跳至正文
全部策略

策略

DOGE Bybit–OKX 永续合约偏离

结局: 已放弃

DogeBybitOkxOuDislocation

结局总结

DogeBybitOkxOuDislocation 在 Bybit 和 OKX 上的 DOGE 永续合约中,测试了类 QuantConnect 的 Ornstein-Uhlenbeck 配对机制。经过 5 次迭代,数据和会计核算干净且完全对齐;但约五年的数据仅触发 15 对交易,夏普比率为 0.23,其置信区间跨越零,平均每笔交易收益为 0.0277%。冲击成本和手续费几乎耗尽全部毛利润。分析师在回测审查阶段放弃该策略,因为无论如何调整参数,都无法让如此小的价差覆盖交易成本,因此后续未进行优化、分析和风险审查。

假设

在两个交易所的同一资产上检验 QuantConnect 的 Ornstein–Uhlenbeck 配对机制。使用此前 30 天同步的 1 小时 K 线拟合对数价格价差,并每日更新。将对冲仓位固定为相等的 DOGE 数量,且仅使用已完成的 K 线。

fee_edge / negative_expectancy(首次测量报告)。在 1905 天内,单腿 avg_trade_return_pct 为 0.0277%。单腿期货下限为 0.15%;对于 Bybit+OKX 配对的四次成交,按腿缩放下限(L127)约为 0.63%。冲击成本消耗毛收益的 79%,PF 为 1.027;夏普比率为 0.23,其 CI 跨越 0(PSR 0.52);信号 IC 为 -0.015(未通过)。仅触发 15 对入场,而有意义的优化或留出测试约需 100 对(L178)。优化 entry_z、exit_z 或 min_edge,无法提升同一资产跨交易所价差;其典型偏离小于四次吃单成交成本加冲击成本。提高 min_edge 会使剩余的少数交易消失,降低它则会增加成本为负的交易。完整历史数据证实了 QA 对优势的担忧:配对数量少于 30,每对净优势远低于成本。只有两个交易所都采用做市或被动执行,才值得重新提案;且需预先登记每对扣除冲击成本后至少 0.6% 的净优势。

实现

同一资产跨交易所 OU 配对交易:对已完成且时间戳对齐的 1H K 线,计算 log(DOGE Bybit 收盘价 / DOGE OKX 收盘价)。每 UTC 天拟合一次 AR(1)/OU 模型,使用此前 30 天的同步价差(均值、平稳标准差)。信号为当前价差的 z 分数。高于 +entry_z(且距均值至少 min_edge_bps)时,做空 Bybit 并以相同 DOGE 数量买入 OKX;低于 -entry_z 时反向操作。当 z 回到 exit_z 内、触及 stop_z 不利止损,或模型失效时退出。每条腿的仓位为权益的 leg_fraction,不使用杠杆。

第 5 次迭代针对第 -3 层超时,不改变交易规则。我在本地使用 BacktestRunner,仅对 120 天的 DOGEUSDT.BYBIT/OKX 1H 数据分析了 previous_code。总耗时为 390 秒。其中约 380 秒耗于 ParquetDataCatalog.query -> get_file_list_from_data_cls -> fsspec glob/walk。该遍历访问了约 372k 个目录,因为目录索引现包含约 133k 个 K 线目录和 97k 个期权目录。策略自身逐 K 线代码未出现在累计耗时前 -30 项中。因此,超时来自目录索引文件发现,耗时随目录索引规模增长,而非由策略导致(经验教训 L155(b)/(c):基础设施)。在平台修复目录索引查询路径前,例如使用直接路径文件列表,问题很可能再次出现。唯一的代码更改移除了策略中剩余的历史数据比例工作量。此前每日拟合会重建一个 OKX 时间戳字典并扫描两个 K 线缓冲区。现在改为读取有界双端队列 deque(maxlen=lookback*24+24),存储 (ts, log spread) 对,并在每根对齐的 K 线上追加一次。拟合保持不变:窗口相同,匹配规则相同(仅使用 ts 完全相同的配对),AR(1) 估算相同。每根 K 线的成本为 O(1),每日拟合的成本为 O(720)。由于 calculate_signal 会在预热 K 线上运行,双端队列会在预热期间重建。

验证结果

考虑将 min_edge_bps 调至优化器的取值范围内(例如 35-80),或使用被动限价单入场,使捕获的收敛幅度明显超过 21 bp 加冲击成本。

手续费可行性处于临界水平。入场条件为 |价差 - OU 均值| >= 35 bp 且 z >= 2。两次往返的吃单手续费约为单腿名义金额的 21 bp,另加建模冲击成本;冒烟测试中的冲击成本很高。按双腿总名义金额计算,即使价差完全收敛,每笔交易的净收益也远低于分析师设定的 0.15% 每笔交易下限。由于 0.35% 高于 0.15%,此项通过检查 8,但已接近限值。

资金盈亏中纳入 Bybit 和 OKX 的资金费率(可用时),或记录有多少对仓位跨越了资金费率结算时点。

模型未纳入跨交易所资金费率差:回测报告 funding_folded=false,且 funding_events_available=0。平均持仓仅约 2 小时,因此影响较小;但若配对仓位跨越 8 小时的资金费率结算时点,就需支付或收取两个交易所费率之差。

无需更改策略。目录索引查询路径(遍历约 372k 个目录)应提交工程团队处理。

运行时间:沙盒耗时 275 秒,限时为 300 秒;完整历史数据预计约需 630 秒。策略自身每根 K 线的工作量为 O(1):追加一次双端队列,且通过 maxlen=744 限定长度。每日拟合 AR(1) 的复杂度为 O(720)。开发者的性能分析将耗时归因于 ParquetDataCatalog 文件发现;若属实,这是平台问题而非策略问题。请注意,2 个标的、约 1904 天的 1H K 线,大约相当于每条腿 46k 根 K 线。

在 should_exit 内根据 Bybit 未平仓仓位的方向推导 _entry_direction,而非从实例状态获取。

_submit_entry 被重写,以原子方式同时开立两条腿。它会调用 super()._submit_entry,然后以相同数量、相反方向对 OKX 调用 _submit_entry_instrument。配对建仓期间,_opening_pair 会阻止重入式协调;孤立或不匹配的腿会被中止。此处看起来正确。不过,_entry_direction 保存在内存中,重启后不会恢复,因此重启后继承的配对仓位,其 should_exit 的均值穿越和止损测试将失效(方向 0)。此时退出将取决于模型或 OKX 腿检查。

相较于四条腿的交易成本,该优势很薄弱。两条腿各完成一次往返的吃单手续费约为单腿名义金额的 0.21%(Bybit 0.055% x2,加上 OKX 0.05% x2)。因此,35 bp 的 min_edge 入场过滤条件、在 0.25 sigma 处退出后,每对扣除冲击成本前净余约 10 bp。冒烟测试中,冲击成本占毛收益的 64%,手续费另占 22%;在 834 天内,4 个平仓单腿仓位(2 对)的平均收益仅为每腿仓位 0.034%。样本量远不足以作出判断。完整回测应报告扣除冲击成本后的每对净收益,还应报告 Bybit 与 OKX DOGE 永续合约的资金费率差;此处未建模(funding_folded=false,0 次事件)。如果 1904 天的历史数据产生的配对数量仍少于约 30,结果就不可信。

回测评审

夏普
0.23
总收益率
0.10%
最大回撤
1.99%
总交易数
30
胜率
43.3%
盈利因子
1.03

数据和会计核算无误:两条腿对齐且没有缺失 K 线,accounting_valid 为 true,end_unrealized 为 0%,且没有强平。

回撤较小(1.99%),且交易多空均衡,符合市场中性价差设计。

每笔交易的优势低于成本。avg_trade_return_pct 是每个单腿仓位 0.0277%。Bybit/OKX 单腿期货成本下限为 0.15%。根据 L127 的按腿缩放规则,下限约为 3 x 0.21% = 0.63%,因为每对需支付四次吃单成交费用。优势约低于此下限 5-20x。

建模冲击成本占毛收益的 79.5%(软性下限为 50%),手续费另占 10.9%。净 PF 为 1.027,仅略高于 1。

样本过小。在 1905 天内仅触发 15 对入场(平仓 30 个单腿仓位),而所需数量约为 100(L178)。留出样本预计仅有 3 对,低于所需的 10 对。

结果不显著。夏普比率为 0.23,其 95% CI 为 -0.55 至 1.25;PSR 为 0.52,Calmar 比率为 0.0096。信号研究的 IC 为 -0.015(rejected_no_information),净预测优势为 -0.04%。

市场参与时间约为 0.1%,最大回撤持续 1560 天,因此日历夏普比率不可能接近 1.0(L165)。2023 没有交易,说明跨交易所 DOGE 价差很少偏离超过 35 bp。

分析

回测门槛: - 指标不可靠:不一致:夏普比率 -0.05 与 total_return 0.10% 符号相反——夏普比率根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。

迭代历史

验证失败(第 4 层——QA审查)[类别=code_defect]: - [edge_concern] 25 bp 的最低建模收敛幅度,扣除约 21 bp 的四次吃单手续费后所剩无几,且尚未计入滑点和资金费率。四笔交易的沙盒测试无法证明存在优势。 - [严重] should_enter() 在基类检查并提交 Bybit 订单前,就先提交了 OKX 订单。若 Bybit 订单被拒绝或延迟,OKX 可能单独成交。(第 113 行)——修复:将两笔订单及其成交作为一对跟踪;若任一条腿的对应订单失败,立即平掉该腿。 - [严重] 仅当 Bybit 有未平仓仓位时,基类才会调用 should_exit()。因此,单独的 OKX 仓位没有退出路径,可能无限期处于未对冲状态。(第 116 行)——修复:每根已处理 K 线都检查两个交易所的仓位,并平掉任何未配对的腿。

验证失败(第 4 层——QA审查)[类别=code_defect]: - [edge_concern] 四笔交易的沙盒测试无法证明盈利能力;其权益指标已标记为不可靠。 - [严重] 绝对 z 分数退出可能错过穿越 OU 均值的时点。若正 z 入场后价差跳至退出区间外的负 z,配对仓位仍会保持开放,即使已穿过原交易的均值回归目标。(第 215 行)——修复:记录入场方向,并在价差穿越该方向对应的均值侧阈值时退出。将不利变动止损单独处理。

sandbox_timeout:验证失败(第 3 层——沙盒回测):冒烟测试在约 20000 根 K 线的窗口(833 天的 DOGEUSDT.BYBIT-1-HOUR-LAST-EXTERNAL)上超出 300 秒墙钟时间限制。这通常意味着每根 K 线的工作量随历史数据增长,例如反复扫描完整的资金费率或补充序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的成本为 O(log n) 而非 O(n)。

结局总结

同一资产在两个交易所之间的偏离通常小于四次吃单成交的成本加冲击成本。只有在两个交易所都采用做市或被动执行,并预先登记每对扣除冲击成本后至少 0.6% 的净优势时,才值得重新提案。

分析师在回测审查阶段、优化之前,因 fee_edge / negative_expectancy 放弃了该策略。单腿优势 0.0277% 远低于 0.15% 的单腿下限,也远低于配对四次吃单成交时约 0.63% 的按腿缩放下限。样本过小(15 对,而所需约为 100),信号 IC 的 -0.015 被判定为不含信息。

该策略交易 Bybit 和 OKX 上 DOGE 永续合约之间的对数价格价差均值回归。每天根据此前 30 天同步的 1 小时 K 线重新拟合 Ornstein-Uhlenbeck 模型,然后在价差 z 分数达到 2.0 时交易等量对冲配对。

在 1905 天内仅开仓 15 对(平仓 30 个单腿仓位),整体结果接近持平。夏普比率为 0.23(95% CI -0.55 至 1.25),盈利因子为 1.027,最大回撤为 1.99%。平均每笔交易收益为名义金额的 0.0277%,建模冲击成本占毛利润的 79.5%。

分析

最优配对交易

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。