惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

lucifer的网络博客

我不知道的《易经》 | lucifer的网络博客 Freqtrade 进阶:把多个弱信号拧成一根绳——多信号评分策略实战 | lucifer的网络博客 加密交易的风险管理:仓位、止损与资金分配 | lucifer的网络博客 代币经济学:如何判断一个代币值不值得买 | lucifer的网络博客 稳定币机制全解:从 USDT 到 UST 崩盘的启示 DeFi 保险:谁来保护你的链上资产? | lucifer的网络博客 Claude Code 高级指南:驾驭上下文的艺术 | lucifer的网络博客 NotebookLM:AI 驱动的知识炼金术,瞬间转化复杂信息为易懂洞见 | lucifer的网络博客 当下流动性池分析 | lucifer的网络博客 苹果AI转型:Siri升级与生态潜力 | lucifer的网络博客 我们是如何让 JSON.stringify 的速度提升两倍以上的 | lucifer的网络博客 ACP:AI 代理协作协议在 Web3 空投自动化中的应用 | lucifer的网络博客 从零构建一个真正工作的简单搜索引擎 | lucifer的网络博客 限制即提示:算法解题的隐秘指引 | lucifer的网络博客 如何阅读财报:从入门到进阶指南 | lucifer的网络博客 Freqtrade 量化风暴:Python 铸就的加密交易自动化帝国 | lucifer的网络博客 DePIN 觉醒:Web3 如何让你的闲置硬件变黄金 | lucifer的网络博客 自己动手制作 Web3 代币估值表 | lucifer的网络博客 当 RWA 遇上幸福小区玉米 | lucifer的网络博客 探索 DeFi 借贷与收益率交易的无限潜力 | lucifer的网络博客 Uniswap V4:更灵活、更高效的去中心化交易所 | lucifer的网络博客 Web3 科学家之如何查看鲸鱼挂单数据 | lucifer的网络博客 抖音也开始搞外卖大战了? | lucifer的网络博客 Web3 的 Anti MEV:深入剖析“夹”与反制之道 | lucifer的网络博客 《小菜的交易系统》-一个完整的简易的交易系统 | lucifer的网络博客 回炉重铸, 91 天见证不一样的自己(第 16 期)
永续合约:无到期日的杠杆交易是如何运作的 | lucifer的网络博客
2026-05-12 · via 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
perp_price = 50500


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
total_funding_paid = 0

for period in range(1, 11):

premium = (perp_price - spot_price) / spot_price
funding_rate = premium * 0.3


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%}")



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


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
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
position_size_usd = 100000
leverage = 20
direction = 'long'


maintenance_margin_rate = 0.005
taker_fee = 0.0005


initial_margin = position_size_usd / leverage
position_qty = position_size_usd / entry_price


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
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}")


print(f"\n--- Funding Rate 对持仓成本的影响 ---")
funding_rates = [0.01, 0.03, 0.05, 0.1]
for fr in funding_rates:
daily_cost = position_size_usd * fr/100 * 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

spot_position = capital * 0.5
perp_margin = capital * 0.5
perp_leverage = 2
perp_position = perp_margin * perp_leverage


import random
random.seed(42)


daily_rates = []
total_income = 0

for day in range(30):

day_income = 0
for _ in range(3):
fr = random.uniform(0.005, 0.04) / 100
income = perp_position * 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 成本)

 上一页

投资 交易 区块链 web3 风险管理 仓位管理