Perpetual Engine Series 파트 3: 펀딩 비율
Source: Dev.to
영구 엔진 시리즈 – 파트 3: 펀딩 레이트 (Funding Rates)
영구 스와프(Perpetual Swaps)는 전통적인 선물 계약과 달리 만료일이 없습니다. 대신, 포지션을 유지하기 위해 펀딩 레이트라는 메커니즘을 사용합니다. 이 글에서는 펀딩 레이트가 무엇인지, 어떻게 계산되는지, 그리고 실제 거래에 어떤 영향을 미치는지 살펴보겠습니다.
1️⃣ 펀딩 레이트란?
- 정의: 펀딩 레이트는 롱 포지션 보유자와 숏 포지션 보유자 사이에 일정 주기(보통 8시간)마다 교환되는 금액입니다.
- 목적: 현물 가격과 영구 계약 가격을 일치시키는 역할을 합니다. 가격이 현물보다 높으면 롱이 숏에게 비용을 지불하고, 반대의 경우 숏이 롱에게 비용을 지불합니다.
2️⃣ 펀딩 레이트 계산 방식
펀딩 레이트는 두 가지 주요 요소로 구성됩니다.
-
이자 비용 (Interest Component)
- 기본 통화(예: USDT)와 마진 통화(예: BTC) 사이의 금리 차이를 반영합니다.
- 일반적으로
interestRate = (borrowRate - lendRate) * (timePeriod / 365)로 계산됩니다.
-
프리미엄/디스카운트 (Premium/Discount Component)
- 영구 계약 가격과 현물 가격 사이의 차이를 나타냅니다.
premium = (markPrice - indexPrice) / indexPrice
전체 펀딩 레이트는 다음과 같이 구합니다.
fundingRate = (interestComponent + premiumComponent) * clamp(1, maxFundingRate, minFundingRate)
주의: 대부분의 거래소는 펀딩 레이트에 상한선과 하한선을 두어 급격한 변동을 방지합니다.
3️⃣ 실제 예시
| 항목 | 값 |
|---|---|
| Mark Price (영구 계약 가격) | 20,500 USDT |
| Index Price (현물 가격) | 20,000 USDT |
| 시간 간격 | 8시간 |
| Borrow Rate (BTC) | 5% 연간 |
| Lend Rate (USDT) | 2% 연간 |
| 최대 펀딩 레이트 | 0.03 (3%) |
| 최소 펀딩 레이트 | -0.03 (-3%) |
-
프리미엄 계산
[ \text{premium} = \frac{20{,}500 - 20{,}000}{20{,}000} = 0.025 ;(2.5%) ] -
이자 비용 계산
[ \text{interest} = (0.05 - 0.02) \times \frac{8}{24 \times 365} \approx 0.00000274 ;(0.000274%) ] -
전체 펀딩 레이트
[ \text{fundingRate} = (0.025 + 0.00000274) \approx 0.02500274 ;(2.500274%) ] -
적용
- 롱 포지션 보유자는 8시간마다 2.500274% 를 숏 포지션에게 지급합니다.
- 예를 들어, 1 BTC (10,000 USDT) 포지션을 보유하고 있다면, 8시간마다 약 0.2500 USDT 를 지불하게 됩니다.
4️⃣ 펀딩 레이트가 거래 전략에 미치는 영향
| 상황 | 전략적 의미 |
|---|---|
| 펀딩 레이트가 양수 (롱이 비용 지불) | 롱 포지션을 장기간 유지하기 어려움 → 숏 포지션을 이용한 캐리 트레이드가 유리 |
| 펀딩 레이트가 음수 (숏이 비용 지불) | 숏 포지션을 장기간 유지하기 어려움 → 롱 포지션을 이용한 캐리 트레이드가 유리 |
| 극단적인 펀딩 레이트 | 급격한 가격 변동 가능성 → 포지션 청산 위험이 증가하므로 리스크 관리가 필수 |
5️⃣ 실전 팁
-
펀딩 레이트 알림 설정
- 대부분의 거래소는 펀딩 레이트 변동 알림을 제공합니다. 이를 활용해 급격한 레이트 변동에 대비하세요.
-
레버리지 조절
- 높은 레버리지는 펀딩 비용을 크게 확대시킵니다. 레버리지를 낮게 유지하거나, 펀딩 레이트가 유리한 시점에만 레버리지를 높이는 것이 좋습니다.
-
다중 거래소 활용
- 같은 자산에 대해 서로 다른 거래소에서 펀딩 레이트가 다를 수 있습니다. 차익 거래(Arbitrage)를 통해 펀딩 레이트 차익을 노릴 수 있습니다.
6️⃣ 결론
펀딩 레이트는 영구 스와프 시장에서 가격을 현물과 일치시키는 핵심 메커니즘이며, 트레이더에게는 비용 혹은 수익으로 작용합니다.
- 양수 펀딩 → 롱이 비용을 부담 → 숏 포지션이 유리
- 음수 펀딩 → 숏이 비용을 부담 → 롱 포지션이 유리
펀딩 레이트를 정확히 이해하고, 이를 기반으로 포지션 크기, 레버리지, 청산 시점 등을 전략적으로 조정한다면, 영구 계약 거래에서 리스크를 최소화하고 수익을 극대화할 수 있습니다.
다음 파트에서는 영구 계약의 청산 메커니즘과 마진 콜에 대해 다룰 예정입니다. 기대해 주세요!
소개

Part 2에서 우리는 엔진의 “심장박동”인 PnL Calculation을 구축했습니다. 모든 가격 틱이 소수점 정밀도로 트레이더의 자산을 정확히 업데이트하도록 보장했습니다. 하지만 시장은 가격 움직임만으로는 살아남을 수 없습니다. 기준점이 없으면 영구 계약의 가격은 기초 자산의 실제 가치와 무관하게 떠돌게 됩니다.
그 기준점이 바로 Funding Rates입니다. 이는 영구 시장이 공정하고 균형 잡히며 현실에 맞춰지도록 보장하는 규제 메커니즘입니다. 아래는 제가 Rust로 구현한 이 “인센티브 엔진”의 구현 방식입니다.
1. 펀딩 비율이란? (시장의 앵커)
무기한 선물은 만료일이 없습니다. 계약 가격이 현물 가격에서 너무 크게 벗어나지 않도록 시스템은 피어‑투‑피어 결제 교환을 사용합니다.
- 롱 포지션이 우세할 때 (강세): 무기한 가격 > 현물 가격 → 롱이 숏에게 지급합니다.
- 숏 포지션이 우세할 때 (약세): 무기한 가격 < 현물 가격 → 숏이 롱에게 지급합니다.
Rust 구현
Result {
let rate = self.funding_rate; // e.g., 0.0001 for 0.01%
let mut total_applied = Decimal::ZERO;
for position in self.positions.values_mut() {
let notional_value = position.quantity * self.mark_price;
let funding_amount = notional_value * rate;
// Longs pay when rate is positive, Shorts receive
if position.position_type == PositionType::Long {
position.pnl -= funding_amount;
total_applied += funding_amount;
} else {
position.pnl += funding_amount;
total_applied -= funding_amount;
}
}
self.last_funding_time = std::time::Instant::now();
Ok(FundingResult { total_applied, rate })
}
4. “조용한 살인자”: 펀딩‑트리거 청산
이는 파트 1 (Liquidations)과 파트 3 사이의 가장 중요한 통합 지점입니다. 가격이 움직이지 않더라도 포지션은 청산될 수 있습니다.
트레이더가 최대 레버리지를 사용하고 유지증거금이 거의 남지 않은 경우, 단일 펀딩 지급으로 손익(PnL)이 적자로 전환되어 즉시 청산이 발생할 수 있습니다.
Logic Flow
- Trigger: 타이머가 3600 seconds에 도달합니다.
- Apply: 모든 열린 포지션의 PnL에 펀딩을 차감/추가합니다.
- Audit: 즉시
should_liquidate검사를 실행합니다. - Execute: 마진 요건을 더 이상 충족하지 못하는 포지션을 종료합니다.
5. Tokio를 이용한 다중 사용자 확장성
프로덕션 수준 엔진에서는 펀딩을 계산하기 위해 주문서를 차단할 수 없습니다. tokio::time::interval을 사용하면 펀딩 로직을 백그라운드 작업으로 실행하여 엔진이 응답성을 유지합니다.
백그라운드 작업
tokio::spawn(async move {
let mut interval = tokio::time::interval(Duration::from_secs(3600));
loop {
interval.tick().await;
// Acquire write lock and apply funding to all users
engine.apply_funding().await?;
}
});
6. 요약 표
| Concept | What | Why |
|---|---|---|
| Funding Rate | 거래자 간에 지급되는 % | 영구 선물 가격을 현물 가격에 가깝게 유지한다. |
| Notional Value | 수량 × 가격 | 수수료가 전체 시장 노출 규모에 비례하도록 보장한다. |
| Zero‑Sum | 롱 포지션이 숏 포지션에 지급(또는 그 반대) | 거래소는 중립적인 중개자 역할을 유지한다. |
| Liquidation Risk | 수수료로 인한 마진 감소 | 높은 레버리지는 펀딩만으로도 사라질 수 있다. |
결론
Funding rates는 단순한 “betting” 엔진을 정교한 금융 상품으로 전환합니다. 이를 Rust로 구현함으로써 thread safety를 활용하여 수천 건의 거래가 진행되는 동안에도 “funding heartbeat”가 모든 잔액을 정확히 조정하고 단 한 푼도 사라지지 않도록 보장합니다.