策略原理:让资金在两个市场“搬砖”
期现套利的核心逻辑是捕捉比特币现货价格和期货价格之间因情绪、资金费率或流动性差异产生的短暂裂口。
Don++ 通过 4 个步骤自动化这一过程:
- 实时利差计算:比价器每隔 3 秒拉取现货(Binance Spot BTC/USDT)与当季期货(Binance BTCUSDT Quarterly)的最新价。
- 阈值触发:利差 > +20 USDT 时,买入现货,同时等额做空期货;利差 < ‑20 USDT 时反向操作。
- 动态仓位:默认只动 10% 可用 USDT,用交易所下单推送 API 毫秒级双杀,降低滑点。
- 自动平仓:当利差缩小至 ±3 USDT 内,或者持仓超过 12 小时仍无收敛,系统一并平仓止盈/止损。
💡 重要:每笔交易都以1:1 对冲为前提,价格波动风险几乎为零,收益来源纯粹是市场无效价差。
五大亮点让策略更硬核
1. 自适应阈值
策略可用移动平均 ±N 倍方差实时刷新上下轨,防止“只听夏至蝉”。也可以锁定固定值,平跑震荡币对。
2. 数据完整性校验
- 缺失 >1 秒的行情包会自动抛弃
- BBO(最优买价、卖价)深度 <50 档时暂停交易
给策略套上“安全带”,避免坑进伪信号。
3. 内置风控三重保险
- 百分比仓位:默认 10%,低波动阶段可降到 5%。
- 持仓倒计时:最大 12 小时自动强平。
- 资金费率监测:做空期货时实时检查资金费率,如出现正向倾斜,可提前退出。
4. 可视化一目了然
Events 通道把下单、止盈、止损全部打印到图表下方,颜色编码一看就知道今天在哪个波段“搬砖”。
5. 及时推送与日志归档
- 触发开平仓,飞书群 Bot 秒推送
- AWS S3 滚动存储 CSV 日志,方便算盈亏
让你睡着也能拿到应收的搬砖利息。
当前限制 & 升级方向
| 痛点 | 表现 | 潜在解决方案 |
|---|---|---|
| 历史数据缺口 | 回测区间只能取自 TradingView,样本偏小 | 接入 Tick 级订单薄历史库 |
| 忽略做市深度 | 低流动性时,100 张合约砸盘直接穿盘 | 引入深度 1% 成交量阈值过滤 |
| 固定手续费 | 默认 0.04% 双边合算,实际隔夜算资金费率会有额外支出 | 接入 Binance 实时 fee API,自动调整阈值 |
| 手动选币 | 用户自己改 code,易拼错合约名 | 在 JSON 配置里做匹配 whitelist |
| 回测失真 | 未加滑点因子、资金费率 | 使用 ccxt 回测插件,参数继承实盘 |
实战案例:5 小时内稳收 0.65%
2025-05-27 早上 8:00,现货 BTC 价格为 67 120 USDT,当季合约冲高至 67 230 USDT,裂口 160 USDT。
• 使用脚本瞬间建仓:现货买入 0.1 BTC,期货做空 0.1 BTC。
• 18 分钟后,裂口回落至 7 USDT,平仓盈利约 135 USDT。
• 滑点成本 3 USDT,手续费 5.6 USDT,净收益 ≈ 0.65% 本金,年化折合 47%。
扩展进阶:三步让 Don++ 成为下一代“印钞机”
- 加入波动过滤器
用 ATR 判断,当日内波动 <1.2%,放弃新开仓,减少无行情时的时间成本。 - 动态成本实时化
Binance 和 OKX 的 API 已公开资金费率、VIP 手续费层级;脚本每小时刷新阈值。 - 多币对自动轮询
列表改成 ETH、SOL、DOGE,用 asyncio 并行跑,24 小时轮流锱铢必较。
常见疑问 FAQ
Q1:期现套利真的“零风险”吗?
A:风险被锁在对冲仓位里,仅剩资金费率和爆仓强平两大黑天鹅。使用高等级子账号 + 低杠杆,可把爆仓概率压到 <0.01%。
Q2:收益率会随着资金规模递减吗?
A:会。当单笔 50 BTC 同时搬砖,就会出现 3~5 USDT 滑点。建议多市场拆单或保持仓位 ≤ 交易所深度 0.05%。
Q3:为何回测与实盘差异大?
A:历史 K 线未包含资金费率、实际深度。建议使用 exchange-counterpart Backtrader 插件,并引入实盘撮合回放。
Q4:想用其他交易对,参数该怎么配置?
A:现货与当季合约代码、最小下单量、资金费率因子全部放进 config.json,仅需一条指令即可切换。
Q5:脚本是否需要 24 小时开机?
A:推荐放在 VPS,15 美金的洛杉矶实例即可。策略本身只占 512 MB RAM,几乎不会掉线。
Q6:如何回写贡献代码?
A:fork 仓库,提交 PR 前跑一次 pytest,跑通全部 12 条单元测试即可合并。👍
风险提示 & 免责声明
本文仅分享策略思路及技术笔记,不构成任何投资建议。所有盈亏、潜在大罢工、交易所强平风险需自行承担。实操前请:
- 通过 sandbox 跑 7 天模拟单;
- 手动小仓位测试 72 小时;
- 再逐渐扩大投入。