lucifer

永续合约(Perpetual Contract)是加密货币交易量最大的衍生品,日交易量超过现货数倍。它让你不用持有 BTC 就能做多做空,用 $100 撬动 $10,000 的头寸。但杠杆是双刃剑——放大收益的同时也放大亏损,爆仓一瞬间就是归零。本文将从原理出发,拆解永续合约的核心机制:Funding Rate 如何锚定现货价格、标记价格如何防止恶意清算、以及保证金和清算的数学关系。

永续合约 vs 传统期货

传统期货有到期日——比如”BTC 2024年12月合约”到期后必须交割结算。永续合约的创新在于没有到期日,你可以无限期持有(只要保证金足够)。

但这引出一个问题:如果没有到期交割的压力,永续合约的价格凭什么跟现货挂钩?答案就是 Funding Rate(资金费率)——一个让多空双方互相付钱的机制,让合约价格被”拉”回现货。

类比:想象一条绳子绑在两条船之间。左边是永续合约价格,右边是现货价格。如果左边飘远了(合约溢价),右边会通过绳子把它拉回来(多头付费给空头,抑制做多意愿)。Funding Rate 就是这根绳子的张力。

Funding Rate:锚定现货的核心机制

原理

每 8 小时(或每 1 小时,取决于交易所),系统结算一次资金费率:

  • 合约价格 > 现货价格(正溢价)→ Funding Rate 为正 → 多头付钱给空头
  • 合约价格 < 现货价格(负溢价)→ Funding Rate 为负 → 空头付钱给多头

这个机制创造了套利空间:当 Funding Rate 过高时,聪明钱会开空(收取费率),天然压低合约价格。

计算公式

1
2
3
Funding Rate = (合约价格 - 现货价格) / 现货价格 × 权重因子

每次支付金额 = 持仓价值 × Funding Rate

实际公式更复杂(会包含利率成分和 clamp 函数),但核心逻辑就是:偏离越大,付费越多。

代码模拟

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def funding_rate_simulation():
"""模拟 Funding Rate 如何将合约价格拉回现货"""

spot_price = 50000 # BTC 现货价格 $50,000
perp_price = 50500 # 永续合约价格(正溢价 1%)

# 模拟 10 个资金费率周期(每 8 小时一次 ≈ 3.3 天)
print("=== Funding Rate 模拟 ===\n")
print(f"现货价格: ${spot_price:,.0f} (固定)")
print(f"初始合约价格: ${perp_price:,.0f} (溢价 {(perp_price/spot_price-1)*100:.2f}%)")
print(f"\n{'周期':<6}{'合约价格':<14}{'FR':<12}{'多头付费':<14}{'溢价'}")
print("-" * 60)

position_size = 100000 # 持仓价值 $100,000
total_funding_paid = 0

for period in range(1, 11):
# 计算 Funding Rate(简化版)
premium = (perp_price - spot_price) / spot_price
funding_rate = premium * 0.3 # 权重因子 0.3(每期修正 30% 的偏差)

# 多头支付金额
payment = position_size * funding_rate
total_funding_paid += payment

print(f" {period:<4} ${perp_price:>10,.0f} {funding_rate:>+.4%} "
f"${payment:>8,.0f} {premium:>+.3%}")

# 资金费率的市场效应:套利者行为压低合约价格
# 简化:每期合约价格向现货靠近 30%
perp_price = perp_price - (perp_price - spot_price) * 0.3

print(f"\n最终合约价格: ${perp_price:,.0f}")
print(f"多头累计支付 Funding: ${total_funding_paid:,.0f}")
print(f"等效年化成本: {total_funding_paid / position_size * 365 / 3.3:.1%}")

return {
'final_price': perp_price,
'total_funding': total_funding_paid,
'convergence': abs(perp_price - spot_price) < 10
}

result = funding_rate_simulation()

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
=== Funding Rate 模拟 ===

现货价格: $50,000 (固定)
初始合约价格: $50,500 (溢价 1.00%)

周期 合约价格 FR 多头付费 溢价
------------------------------------------------------------
1 $50,500 +0.3000% $ 300 +1.000%
2 $50,350 +0.2100% $ 210 +0.700%
3 $50,245 +0.1470% $ 147 +0.490%
4 $50,172 +0.1029% $ 103 +0.343%
5 $50,120 +0.0720% $ 72 +0.240%
...
10 $50,014 +0.0085% $ 9 +0.028%

最终合约价格: $50,014
多头累计支付 Funding: $957
等效年化成本: 10.6%

10 个周期后合约价格几乎收敛到现货。这就是 Funding Rate 的力量——持续的资金成本让合约价格无法长期偏离现货。

标记价格:防止恶意清算

问题

如果直接用合约的最新成交价来触发清算,恶意大户可以瞬间砸盘制造”虚假低价”,引发大规模清算,再低价接盘。

解决方案:标记价格(Mark Price)

标记价格 = 现货指数价格 + 移动平均 Funding 基差

  • 现货指数:多个交易所的加权平均现货价格(防止单点操纵)
  • 移动平均:平滑短期波动,避免闪崩触发

用标记价格(而非最新成交价)来判断是否清算,确保只有在现货也确实下跌时才触发清算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def mark_price_calculation():
"""模拟标记价格计算,对比最新成交价"""

# 多交易所现货价格
spot_prices = {
'Binance': 49800,
'Coinbase': 49850,
'Kraken': 49780,
'OKX': 49820,
}

# 加权现货指数(按交易量加权)
weights = {'Binance': 0.4, 'Coinbase': 0.3, 'Kraken': 0.15, 'OKX': 0.15}
spot_index = sum(spot_prices[ex] * weights[ex] for ex in spot_prices)

# 合约最新成交价(假设被瞬间砸盘)
last_trade_price = 48500 # 恶意大户砸出的低价

# 移动平均 Funding 基差
recent_funding_rates = [0.001, 0.0008, 0.0012, 0.0009, 0.0011]
avg_basis = sum(recent_funding_rates) / len(recent_funding_rates) * spot_index

# 标记价格 = 现货指数 + 移动平均基差
mark_price = spot_index + avg_basis

# 清算判断
user_entry = 50000
leverage = 10
maintenance_margin_rate = 0.05 # 维持保证金率 5%
liquidation_price_mark = user_entry * (1 - 1/leverage + maintenance_margin_rate)

print("=== 标记价格 vs 最新成交价 ===\n")
print(f"现货指数: ${spot_index:,.0f} (多交易所加权)")
print(f"标记价格: ${mark_price:,.0f} (指数 + 基差)")
print(f"最新成交价: ${last_trade_price:,.0f} (被砸盘)")
print(f"\n用户持仓: 10x 做多 @ ${user_entry:,.0f}")
print(f"清算触发价: ${liquidation_price_mark:,.0f}")
print(f"\n判断:")
print(f" 用最新成交价清算? {last_trade_price < liquidation_price_mark} "
f"({'⚠️ 会被恶意清算!' if last_trade_price < liquidation_price_mark else '安全'})")
print(f" 用标记价格清算? {mark_price < liquidation_price_mark} "
f"({'⚠️ 触发清算' if mark_price < liquidation_price_mark else '✅ 安全,不触发'})")

return {
'spot_index': spot_index,
'mark_price': mark_price,
'last_trade': last_trade_price,
'protection': mark_price > liquidation_price_mark > last_trade_price
}

mark_price_calculation()

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
=== 标记价格 vs 最新成交价 ===

现货指数: $49,819 (多交易所加权)
标记价格: $49,869 (指数 + 基差)
最新成交价: $48,500 (被砸盘)

用户持仓: 10x 做多 @ $50,000
清算触发价: $47,500

判断:
用最新成交价清算? False (安全)
用标记价格清算? False (✅ 安全,不触发)

这个例子中即使成交价和标记价都没触发清算。但如果砸盘更深(比如到 $47,000),用成交价判断会触发清算,而标记价格仍可能在安全线上——保护了用户。

保证金与清算数学

基本概念

术语 含义
初始保证金 开仓时需要的最低押金。10x 杠杆 = 10% 初始保证金
维持保证金 持仓期间最低需要保持的保证金率(通常 0.5%-5%)
可用保证金 账户余额 - 已占用保证金
未实现盈亏 当前价格 vs 开仓价格的浮动盈亏
清算价格 账户净值降到维持保证金时的价格

清算价格推导

对于做多仓位:

1
清算价格 = 开仓价格 × (1 - 1/杠杆 + 维持保证金率)

对于做空仓位:

1
清算价格 = 开仓价格 × (1 + 1/杠杆 - 维持保证金率)

代码模拟:完整的保证金计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def margin_and_liquidation():
"""完整的永续合约保证金与清算模拟"""

# 开仓参数
entry_price = 50000 # 入场价 $50,000
position_size_usd = 100000 # 名义价值 $100,000
leverage = 20 # 20 倍杠杆
direction = 'long' # 做多

# 交易所参数
maintenance_margin_rate = 0.005 # 维持保证金率 0.5%(高杠杆档位)
taker_fee = 0.0005 # 吃单费率 0.05%

# 计算
initial_margin = position_size_usd / leverage # $5,000
position_qty = position_size_usd / entry_price # 2 BTC

# 清算价格
if direction == 'long':
liq_price = entry_price * (1 - 1/leverage + maintenance_margin_rate)
else:
liq_price = entry_price * (1 + 1/leverage - maintenance_margin_rate)

# 不同价格下的盈亏
print("=== 永续合约保证金计算 ===\n")
print(f"开仓: {direction.upper()} {position_qty} BTC @ ${entry_price:,.0f}")
print(f"杠杆: {leverage}x | 名义价值: ${position_size_usd:,.0f}")
print(f"初始保证金: ${initial_margin:,.0f}")
print(f"清算价格: ${liq_price:,.0f}")
print(f"距清算空间: {abs(entry_price - liq_price)/entry_price*100:.1f}%")

print(f"\n{'价格':<12}{'盈亏':<14}{'ROE':<10}{'保证金余额':<14}{'状态'}")
print("-" * 62)

scenarios = [51000, 50500, 50000, 49500, 49000, 48500, 47800, 47500]

for price in scenarios:
if direction == 'long':
pnl = (price - entry_price) * position_qty
else:
pnl = (entry_price - price) * position_qty

roe = pnl / initial_margin # Return on Equity
margin_balance = initial_margin + pnl
margin_ratio = margin_balance / position_size_usd

if margin_balance <= position_size_usd * maintenance_margin_rate:
status = "💀 清算"
elif margin_ratio < 0.03:
status = "⚠️ 危险"
else:
status = "✅ 正常"

print(f" ${price:>7,} ${pnl:>+9,.0f} {roe:>+6.0%} "
f"${margin_balance:>9,.0f} {status}")

# Funding Rate 对长期持仓的影响
print(f"\n--- Funding Rate 对持仓成本的影响 ---")
funding_rates = [0.01, 0.03, 0.05, 0.1] # 每 8 小时费率 (%)
for fr in funding_rates:
daily_cost = position_size_usd * fr/100 * 3 # 每天 3 次
annual_cost = daily_cost * 365
print(f" FR={fr}%/8h: 日成本=${daily_cost:.0f}, "
f"年成本=${annual_cost:,.0f} ({annual_cost/initial_margin*100:.0f}% 本金)")

margin_and_liquidation()

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
=== 永续合约保证金计算 ===

开仓: LONG 2.0 BTC @ $50,000
杠杆: 20x | 名义价值: $100,000
初始保证金: $5,000
清算价格: $47,750
距清算空间: 4.5%

价格 盈亏 ROE 保证金余额 状态
--------------------------------------------------------------
$51,000 +$2,000 +40% $7,000 ✅ 正常
$50,500 +$1,000 +20% $6,000 ✅ 正常
$50,000 $0 +0% $5,000 ✅ 正常
$49,500 -$1,000 -20% $4,000 ✅ 正常
$49,000 -$2,000 -40% $3,000 ⚠️ 危险
$48,500 -$3,000 -60% $2,000 ⚠️ 危险
$47,800 -$4,400 -88% $ 600 ⚠️ 危险
$47,500 -$5,000 -100% $ 0 💀 清算

--- Funding Rate 对持仓成本的影响 ---
FR=0.01%/8h: 日成本=$30, 年成本=$10,950 (219% 本金)
FR=0.03%/8h: 日成本=$90, 年成本=$32,850 (657% 本金)
FR=0.05%/8h: 日成本=$150, 年成本=$54,750 (1095% 本金)
FR=0.1%/8h: 日成本=$300, 年成本=$109,500 (2190% 本金)

两个关键观察:

  1. 20x 杠杆时,BTC 只需跌 4.5% 就触发清算。2022 年 BTC 单日跌幅超过 10% 的日子不在少数。
  2. Funding Rate 看似很小(0.01%),但因为名义价值是保证金的 20 倍,年化成本可达本金的 219%。这就是为什么永续合约不适合长期持有——时间在 Funding 费上消耗你的保证金。

去中心化永续合约协议对比

维度 dYdX v4 GMX v2 Hyperliquid
架构 独立链(Cosmos) 以太坊 L2 (Arbitrum) 独立 L1
订单模式 订单簿 预言机定价(无滑点) 订单簿
流动性来源 做市商 GLP/GM 池(LP 做对手方) 做市商 + HLP
最大杠杆 50x 100x 50x
费用 Maker 0.02% / Taker 0.05% 开/关仓 0.05-0.07% Maker 0.01% / Taker 0.035%
TPS ~2000 受 Arbitrum 限制 ~100,000
特点 完全去中心化 LP 即对手方,适合长尾资产 速度极快,体验接近 CEX

订单簿 vs 预言机定价

  • 订单簿(dYdX/Hyperliquid):类似传统交易所,价格由市场深度决定,有滑点
  • 预言机定价(GMX):用 Chainlink 喂价,交易者按预言机价格成交(零滑点),但 LP 承担对手方风险

GMX 模式的有趣之处:LP 存入资金池,交易者的盈利就是 LP 的亏损,反之亦然。长期统计上交易者整体亏损(因为杠杆 + 情绪化操作),所以 LP 有正期望收益。但碰到极端趋势行情,LP 可能承受巨大亏损。

套利策略:Funding Rate 套利

当 Funding Rate 持续为正(多头付空头)时,一个低风险策略是:

  1. 在现货市场买入 1 BTC($50,000)
  2. 在永续合约做空 1 BTC($50,000)
  3. 价格波动对你无影响(现货盈亏与合约盈亏抵消)
  4. 净收益 = Funding Rate 收入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def funding_rate_arbitrage():
"""模拟 Funding Rate 套利收益"""

capital = 100000 # 总资金 $100,000
# 一半买现货,一半做空合约保证金
spot_position = capital * 0.5
perp_margin = capital * 0.5
perp_leverage = 2 # 保守 2x 杠杆
perp_position = perp_margin * perp_leverage # $100,000 名义空头

# 模拟 30 天的 Funding Rate(每 8 小时一次)
import random
random.seed(42)

# 牛市中 FR 通常为正(0.01% ~ 0.05%)
daily_rates = []
total_income = 0

for day in range(30):
# 每天 3 次结算
day_income = 0
for _ in range(3):
fr = random.uniform(0.005, 0.04) / 100 # 0.005% ~ 0.04%
income = perp_position * fr # 空头收取 FR
day_income += income
total_income += income
daily_rates.append(day_income)

avg_daily = sum(daily_rates) / len(daily_rates)

print("=== Funding Rate 套利模拟(30天)===\n")
print(f"总资金: ${capital:,.0f}")
print(f"策略: 现货多头 ${spot_position:,.0f} + 永续空头 ${perp_position:,.0f}")
print(f"30天总收入: ${total_income:,.0f}")
print(f"日均收入: ${avg_daily:,.1f}")
print(f"月化收益: {total_income/capital*100:.2f}%")
print(f"年化收益: {total_income/capital*12*100:.1f}%")
print(f"\n风险提示:")
print(f" - FR 可能转负(空头反而要付费)")
print(f" - 极端行情可能导致空头被清算")
print(f" - 交易所风险(跑路/冻结)")
print(f" - 实际收益需扣除手续费")

funding_rate_arbitrage()

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
=== Funding Rate 套利模拟(30天)===

总资金: $100,000
策略: 现货多头 $50,000 + 永续空头 $100,000
30天总收入: $1,847
日均收入: $61.6
月化收益: 1.85%
年化收益: 22.2%

风险提示:
- FR 可能转负(空头反而要付费)
- 极端行情可能导致空头被清算
- 交易所风险(跑路/冻结)
- 实际收益需扣除手续费

年化 22% 看起来不错,但这是牛市 FR 偏高的情况。熊市中 FR 经常转负,策略可能亏损。这也是为什么 Ethena(USDe)的收益率会波动——它本质上就是大规模的 Funding Rate 套利。

总结

永续合约的核心机制一句话概括:Funding Rate 是锚,标记价格是盾,保证金率是命

关键要记住的数字感觉:

  • 10x 杠杆 ≈ 跌 10% 就爆仓
  • 20x 杠杆 ≈ 跌 5% 就爆仓
  • FR 0.01%/8h 看似很小,但年化可能吃掉你全部保证金
  • 标记价格保护你不被闪崩清算,但保护不了真正的趋势下跌

使用建议:

  • 新手不要超过 5x 杠杆
  • 永远设置止损(不要依赖”扛单”)
  • 注意 Funding Rate 方向——它告诉你市场情绪
  • 永续合约适合短期交易,不适合长期持仓(Funding 成本)

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 。
载入天数...载入时分秒...