很多 BTC 自动交易研究都会默认一个前提:
只要都是 BTC,同一时刻的 Binance 和 OKX 价格应该足够接近,所以策略信号在哪个平台生成、在哪个平台执行,结果不会差太多。
从方向上看,这个假设往往没错。
但从实际交易路径看,它并不成立。
最近我做了一次完整的跨市场回放:
- Binance BTCUSDT 现货 5 分钟 K 线负责生成信号;
- OKX BTC-USDT-SWAP 永续合约负责实际执行;
- 信号仍然严格在 Binance 5 分钟 K 线正式收盘后确定;
- 信号产生后立即进入执行,不额外等待下一根完整 K 线;
- 入场、止损、动态保护和最终盈亏全部使用 OKX 合约价格。
结果并不是“完全一样”。
更有意思的是:
策略本身并没有明显失效,但回撤和资金路径确实发生了变化。
这说明一个很重要的问题:
信号市场和执行市场,不能在回测里被简单视为同一个市场。
1. 先把时序问题排除掉
跨交易所回放最容易出现的第一个问题,是时间对齐错误。
例如:
- Binance 这一根 K 线实际上还没收完;
- OKX 却已经使用了下一分钟甚至下一根 K 的价格;
- 或者两边时间戳定义不同,看起来只差一点,实际却错了一整个周期。
所以第一步不是比较收益,而是先机械审计时间。
本次研究中:
- Binance 信号 K 在 5 分钟边界前正式收盘;
- 信号随即确定;
- OKX 在同一个 UTC 5 分钟边界进入新的 K 线;
- 研究回放用这个边界之后的首个可用 OKX 价格作为即时成交代理。
这里有一个容易误解的地方。
研究中经常会写成:
“使用 OKX 下一根 5 分钟 K 的开盘价入场。”
这并不代表实盘要再等 5 分钟。
它只是因为历史 K 线数据中,信号确认后的第一个可观测价格,恰好就是新 K 线的开盘价。
实盘逻辑仍然应该是:
Binance 收盘确认 → 信号生成 → 立即向 OKX 发单。
2. 数据并没有错位
为了确认差异不是数据质量造成的,我把 Binance 和 OKX 的重叠数据重新做了一次对齐检查。
结果:
- 约 65 万根重叠 5 分钟 K 可以一一对应;
- OKX 1 分钟执行数据连续、无重复;
- 研究期内所有需要映射的 Binance 信号都能找到对应的 OKX 执行时间;
- Binance 与 OKX 的非平盘 5 分钟 K,方向一致率约为 96.06%。
也就是说,从宏观方向看,两边当然非常接近。
但 96% 的方向一致,并不等于价格路径相同。
这正是后面差异出现的原因。
3. 入场时,两边通常只差几个基点
在实际完成的交易样本中,OKX 相对 Binance 的入场价格差并不大。
统计结果大致为:
- 平均价差:约 -0.75 bp
- 中位数:约 -0.61 bp
- 90% 的样本落在约 -5.34 bp 到 +4.87 bp
- 极端样本大约在 -13 bp 到 +17 bp
单看这些数字,很容易得出一个结论:
“这点差距应该无所谓。”
如果策略只是“买入后固定持有到某个时间”,也许确实影响有限。
但如果策略包含:
- 固定止损;
- 盈利后动态保护;
- 跟踪退出;
- 账户回撤保护;
- 动态杠杆;
那么几个基点的差异,可能会改变后续整个交易路径。
4. 我做了一个严格对照:只换执行价格
为了隔离影响,我没有改信号,也没有改策略结构。
只做一件事:
同一组信号,一组使用 Binance 价格执行,另一组使用 OKX 价格执行。
结果如下:
| 杠杆上限 | Binance 执行 PF | OKX 执行 PF | Binance 最大回撤 | OKX 最大回撤 |
|---|---|---|---|---|
| 5x | 4.56 | 4.58 | -20.11% | -22.86% |
| 10x | 5.63 | 5.63 | -28.70% | -32.44% |
| 20x | 6.96 | 7.02 | -39.26% | -41.60% |
这里最值得注意的不是 PF。
因为 PF 基本没有恶化。
真正发生变化的是:
资金路径和回撤。
换句话说,策略的总体方向质量依然存在,但执行市场改变了部分交易的路径,从而改变了账户曲线。
5. 同一组信号,为什么会出现不同退出?
逐笔对照后:
- OKX 结果更好:62 笔
- OKX 结果更差:20 笔
- 完全相同:53 笔
- 盈亏状态发生翻转:5 笔
整体来看,OKX 执行相对 Binance 执行的累计差异约为:
-725.76 bp
平均每笔约:
-5.38 bp
这并不是因为每笔交易都变差了。
相反,大多数交易要么一样,要么 OKX 更好。
真正拉开结果的是少数长持仓、动态保护路径不同的交易。
6. 小价差为什么会被放大?
原因在于:
交易策略不是只由入场价决定,而是由整条价格路径决定。
假设 Binance 和 OKX 的入场价格只差 3 bp。
如果后续两个市场的高低点路径也略有差异,那么可能出现:
- Binance 先触发某个动态保护;
- OKX 没有触发;
- 或者 OKX 更早触发止损;
- 或者某个市场的最佳价格更高,使后续保护线位置不同。
一旦退出价格不同,这一笔交易的结果就不同。
如果系统还有账户级风险管理,那么影响会继续向后传播:
本笔盈亏变化
→ 账户权益变化
→ 后续实际杠杆变化
→ 后续回撤保护状态变化
→ 后续资金曲线继续分叉
这就是典型的路径依赖。
所以:
几个基点的市场价差,本身不一定重要;
但几个基点引起的状态变化,可能很重要。
7. 这是 1 分钟回放造成的吗?
为了排除另一个可能,我还比较了:
- OKX 5 分钟执行回放;
- OKX 1 分钟执行回放。
结果是:
135 笔完成交易中,只有 6 笔 的退出收益出现差异。
而且 1 分钟路径整体并没有让结果变差。
这说明:
Binance 与 OKX 的差异,主要不是由 1 分钟重建方式造成的。
真正的来源仍然是:
现货市场与永续合约市场本身的价格路径不同。
8. 为什么执行研究应该尽量使用真实交易市场的数据?
这次研究之后,我对合约策略回测有一个更明确的原则:
信号可以来自一个市场,但执行必须尽量使用真正准备交易的市场数据。
例如:
- 可以用 Binance 的数据研究方向;
- 可以用 Binance 的成交量、主动成交等信息构建信号;
- 但如果最终是在 OKX 永续上交易,那么入场、止损、动态保护和盈亏最好都用 OKX 合约价格重新回放。
否则很容易得到一种“方向逻辑正确,但执行路径被理想化”的结果。
这并不意味着 Binance 回测没有价值。
它仍然可以很好地回答:
这个信号结构是否有长期信息?
但它无法完整回答:
这个信号放到另一个实际交易市场后,账户会怎么走?
这是两个不同的问题。
9. 信号层和执行层应该分开
现在我更倾向于把一个 BTC 合约交易机器人拆成至少两个独立层:
Signal Layer
负责回答:
现在是否出现了值得交易的方向机会?
它可以使用一个数据质量高、历史完整、研究生态成熟的市场。
Execution Layer
负责回答:
如果要交易,现在实际能以什么价格成交?
止损在哪里触发?
动态保护什么时候更新?
最终真实盈亏是多少?
它必须围绕真正下单的交易所设计。
这种职责分离的好处是:
- 不需要为了迁移交易所而重写全部信号研究;
- 可以单独审计执行差异;
- 可以明确区分“预测问题”和“交易问题”。
10. 为什么我没有直接改成 OKX 原生信号?
一个自然的问题是:
既然最终要在 OKX 交易,为什么不直接全部用 OKX 数据重新研究?
我确实做过这个方向的尝试。
但在几轮研究中,虽然可以找到一些历史表现不错的组合,整体的跨年份延续性、周期稳定性和参数稳定性并不理想。
继续调整下去,越来越像是在适配已经发生过的历史。
所以我最终选择的是:
保留相对稳定的信号研究层,再把执行层切换到真实交易市场重新验证。
这比为了“数据源一致”而重新构造一套不够稳定的信号逻辑,更符合目前的研究目标。
11. 这次研究没有解决什么?
这次跨市场回放仍然不是实盘。
它还没有完整解决:
- 真实 FAK 成交滑点;
- 盘口深度与容量;
- 部分成交;
- 网络延迟;
- API 延迟;
- 资金费率;
- 交易所强平梯度;
- 极端行情中的保护单成交质量;
- 实际手续费。
因此,这次研究能说明的是:
把执行价格从 Binance 代理切换到 OKX 真实历史价格后,策略结构仍然保持有效,但风险路径会发生可观察的变化。
它不能说明:
实盘一定会复制这条历史资金曲线。
这是两件完全不同的事。
12. 最后
这次研究最重要的结论,对我来说不是:
Binance 更好,还是 OKX 更好。
而是:
同一个 BTC 策略,在不同市场上执行,本质上已经不是完全相同的交易系统。
即使:
- 信号完全相同;
- 两个市场绝大多数 5 分钟 K 方向一致;
- 入场平均只差几个基点;
只要执行路径、止损触发和动态保护存在差异,账户结果就可能逐渐分叉。
所以一个更完整的自动交易研究流程应该是:
Signal Research
→ Target Market Replay
→ Execution Path Validation
→ Cost / Slippage Stress Test
→ Live Observation
而不是:
Backtest on Market A
→ Trade on Market B
中间那一层执行研究,不能省掉。
本文记录的是历史研究过程,不构成投资、交易或财务建议。文中历史回放结果不代表未来表现,也不等同于真实可实现收益。