资金费率套利方案分析:从机会筛选到开平仓风险控制
这篇文章只记录一个具体问题:如果现货买入 1 倍,但永续空单改成 2 倍,套利组合会发生什么?
这里的“1 倍”指现货腿按 1 倍买入;“2 倍”指合约空单的名义价值不变,但只放一半保证金。下面用一个便于计算的模拟,不代表某个真实账户:
- 现货:买入价值 1,000 USDT 的币;
- 永续:做空名义价值 2,000 USDT;
- 合约杠杆:2 倍,初始保证金约 1,000 USDT;
- 其他余额、手续费、资金费、维持保证金率和交易所风险限额暂不计入;
- 现货和空单数量一开始完全配平。
先把一个容易混淆的算式说清楚:持仓价值 ÷ 杠杆 = 初始保证金。因此 2 倍杠杆、2,000 USDT 持仓,对应约 1,000 USDT 保证金;如果只放 500 USDT 保证金,2,000 USDT 持仓实际是 4 倍杠杆。本文主模拟采用前者。
这套组合已经不是完全对冲:现货只有 1,000 USDT,空单却是 2,000 USDT,净敞口相当于额外做空 1,000 USDT。价格方向上的盈亏不会互相抵消,套利收益也没有因为“2 倍”自动翻倍。
先看走势图:空单是现货的两倍,合计收益会向下
图的横轴是价格,标出 0、3、6.8、13.6;纵轴是组合盈亏,横轴与纵轴的交点是“平均持仓价 6.8、盈亏 0”。价格高于 6.8 时,2,000 U 空单相对 1,000 U 现货形成净空,组合进入亏损;价格低于 6.8 时,组合进入盈利。价格 3 的虚线是本次模拟的 ADL 触发线,不是 OKX 的真实触发价。触发后红线表示空单被减仓、现货暂时裸露;绿色虚线表示按 1 倍重新对冲后的示意结果。
这张图只展示线性盈亏,不是强平曲线。强平发生前,合约账户的保证金率会先恶化,实际强平点还要看维持保证金率、标记价格、资金费、手续费和账户其他余额。
价格从 6.8 跌到 3,按“现货 1,000 U + 空单 2,000 U”的线性模型,现货约 亏损 559 U,空单约 盈利 1,118 U,组合约 盈利 559 U(未计费用和资金费)。
价格从 6.8 涨到 13,按同一模型,现货约 盈利 912 U,空单约 亏损 1,824 U,组合约 亏损 912 U。
价格上涨:组合可能接近平衡,空单却可能先出问题
假设币价从 6.8 上涨到 13,涨幅约 91.2%。忽略手续费和资金费:
| 腿 | 初始名义价值 | 价格上涨后的变化 |
|---|---|---|
| 现货多头 | 1,000 U | 约盈利 +912 U |
| 永续空头 | 2,000 U | 约亏损 -1,824 U |
| 两腿合计 | — | 约亏损 -912 U |
从“现货加空单”的组合角度看,价格上涨会让组合出现净亏损:现货只抵消了空单一半的亏损。但交易所看的是合约账户的保证金和空单权益,不是你另一个账户里的现货盈利。2 倍空单只有约 1,000 U 初始保证金,空单亏损接近这部分保证金后就会进入强平风险区,实际强平价还会受到维持保证金率、手续费、资金费、标记价格、全仓/逐仓和其他仓位影响。
所以,“现货能抵消空单”不能推出“空单一定不会爆仓”。抵消只在组合账面上成立,不能自动把现货利润转进合约保证金。
价格下跌:账面仍大致对冲,但空单盈利不等于风险消失
如果币价从 6.8 下跌到 3.4,现货约亏 500 U,空单约赚 500 U,组合账面仍接近打平。这个方向通常不会触发空单强平,反而可能释放保证金。
但仍有三个现实问题:
- 如果下跌很快,现货和合约成交价、标记价不同,短时间内会出现腿间差额。
- 空单盈利、收到的资金费或释放的保证金,是否被系统识别并继续对冲,取决于账户模式和自动复购逻辑。
- 大幅波动时可能触发 ADL。ADL 是交易所强制减少空单,不是“赚到钱后正常平仓”。空单被减掉后,现货还在,组合就会重新暴露成裸多头。
如果发生自动减仓,系统现在会怎么做
项目中的 arb auto 不是无条件地把仓位重新开到任意杠杆。代码和使用说明有两个关键限制:
- 自动复购开仓前会把杠杆设为 1 倍并回读确认;当前不是 1 倍时,不会直接按 2 倍补仓。
- U 本位只补被 ADL 减掉的空单缺口;币本位还会处理收到资金费或 ADL 释放出来、尚未被空单对冲的币。
因此,假设原来用 2 倍开空,后来被 ADL 减仓,自动复购不会简单地“按原 2 倍重建”。它更可能因为杠杆不是 1 倍而停止补仓,或者在全平后按 1 倍条件重新开空。这是安全约束,不是策略收益保证。
ADL 后应该平仓换 USDT,还是重新建仓?
这不是一个可以由程序统一替你决定的问题,要先看剩余仓位和市场状态。
选择平仓换 USDT
适合以下情况:
- ADL 后只剩一部分空单,现货已经无法和它配平;
- 盘口很薄,重新开空会带来明显滑点;
- 资金费已经转负,继续持有空单的预期变差;
- 你无法确认交易所实际减掉了多少仓位,或者订单结果不明确。
做法是先确认交易所仓位和现货数量,再结束这笔套利,把剩余空单和现货按实际数量处理。这样会放弃后续资金费,但可以先把裸露方向风险收回来。
选择重新建仓
只有在下面条件都满足时才考虑:
- 已经确认 ADL 的实际成交数量和剩余现货;
- 重新计算后仍有足够保证金和可用盘口;
- 新的空单杠杆、保证金模式和数量已经明确;
- 资金费、手续费和滑点仍然值得承担;
- 自动复购服务正常运行,且不会和手动平仓同时下单。
对当前项目而言,重新建仓的默认安全方向是 按 1 倍重新对冲,而不是自动恢复到 2 倍。因为 2 倍的主要收益是节省保证金,代价却是上涨时更快触及强平线;ADL 之后再用 2 倍追着补,容易把一次异常扩大成连续补仓。
ADL 后的两种处理结果
假设价格下跌到 3,触发了本次模拟的 ADL,空单被减掉一部分。此时最重要的不是马上追单,而是先确认交易所实际剩下多少现货、多少空单。下面把两条路拆开:
这张图把处理过程画成两个分支:先确认交易所实际仓位,再决定是补回对冲,还是结束组合。价格 3、ADL 和后续动作都是本次模拟,不代表交易所一定会在这个价格触发。
方案一:重新建仓
假设 ADL 后现货还剩 1,000 U,空单只剩 500 U。如果重新按 1 倍补开 500 U 空单:
| 项目 | 重新建仓后 | 颜色含义 |
|---|---|---|
| 现货腿 | 1,000 U | — |
| 空单腿 | 1,000 U | 配平后 |
| 当前价格仍为 3 时的组合盈亏 | 约 +559 U | 盈利 |
| 后续价格上涨/下跌的方向敞口 | 接近 0 | 重新回到对冲状态 |
优点是保留现货和后续资金费机会;缺点是重新开仓要重新承担手续费、滑点、资金费反转和再次 ADL 的风险。若市场流动性不足或无法确认 ADL 数量,自动补仓可能把错误放大。
方案二:卖出现货,换回 USDT
如果不再重建对冲,直接把现货按当前价格卖出,组合会停止继续承担币价方向风险。以价格 3 为例,卖出 1,000 U 的现货得到约 1,000 U,同时保留已经实现的资金费和交易结果;之后价格继续上涨或下跌,都不会再产生这部分现货的盈亏。
| 项目 | 卖币后 | 颜色含义 |
|---|---|---|
| 现货数量 | 0 | 不再有裸多头 |
| USDT 流动性 | 约 1,000 U(扣除卖出成本) | 可立即使用 |
| 后续资金费收益 | 0 | 不再持有空单对冲组合 |
| 后续币价风险 | 0 | 风险收口 |
卖币不是“把亏损变成盈利”,而是把仓位结束、把未来的不确定性换成 USDT。它的机会成本是放弃后续资金费;但如果空单已经被 ADL、服务掉线或流动性问题破坏,先收口通常比盲目重开更容易核对。
这次模拟带来的结论
- 2 倍杠杆没有让套利收益翻倍,只减少了合约初始保证金。
- 上涨时,现货盈利可以抵消组合账面亏损,却不能替合约账户自动补保证金;2 倍空单可能先被强平。
- 下跌时,组合账面仍大致对冲,但 ADL 可能把空单削掉,留下裸现货。
- ADL 后不是默认“马上重开”。先确认实际仓位、订单状态、资金费和盘口;不满足条件时,平仓换 USDT 更容易控制风险。
- 当前自动复购逻辑明确偏向 1 倍对冲,不能把它描述成支持任意杠杆的自动恢复系统。
这也是我把套利默认杠杆保留为 1 倍的原因:它不保证盈利,却给价格上涨、资金费反转、ADL 和服务异常留下更多处理时间。
与前一篇开发心得的关系
《Okx合约量化套利开发心得》 记录的是平台怎样把机会、仓位、资金费和报警放到一起;这篇只补充一个更窄的决策问题:当杠杆从 1 倍改成 2 倍后,风险会先在哪一条腿暴露,以及 ADL 后是否应该继续重建对冲。 这里的数字是模拟输入,不能当成真实账户的强平价格或收益记录。





