策略
OKX 14永续合约价量相关性截面:做多低相关性/做空高相关性,每周美元中性再平衡(1-DAY)
结局: 已放弃
OkxDailyPriceVolumeCorrelationCrossSection
结局总结
该假设为语料提出了一个新的机制类别:在14 OKX永续合约上构建价量相关性截面多空策略,总敞口为1.0x,每周再平衡,并为每条腿设置25%灾难止损。开发者使用滚动双端队列和带索引的订单查询来限制工作量,但经过3轮迭代,代码始终未能通过Layer 3沙盒验证;它在2,400天日线窗口上超过了300秒的限制。运行因沙盒超时而中止,尚未进行任何策略回测、回测复核、优化、分析师审查或风险审查阶段,因此该因子的优势从未得到衡量。
假设
选择该策略是为填补代表性不足的类别:OKX为2.0%(目标>=5%),long_short为16.7%(long_only为83%,上限<=55%),且涉及多个交易品种。避免使用BINANCE(62%),也避免BTC集中(BTC仅占14条等权腿中的1)。该机制类别(收益与成交量联动并作截面排序)在语料中几乎没有先例。遵循经验教训:L186/L181,已在目录中核实每条腿的OKX USDT永续合约1-DAY根K线数据,历史连续且没有缺口;仅有约一周OKX历史的币(XRP、DOGE、LTC、FIL、NEAR、OP)已特意排除。L179:触发条件是市场观察(排名),不是日历窗口,因为再平衡频率只决定何时重新读取排名。L111:没有补充筛选条件。L102:不使用期权。杠杆保持OUT的optimization_plan固定,因为它是配置字段,而非策略参数;固定杠杆设置正是最近Layer 1.5的LTC-BCH和OKX抽选运行失败的原因。
verification_loop:sandbox_timeout:验证失败(Layer 3 — 沙盒回测):冒烟测试在约20000根K线的窗口(BTCUSDT.OKX-1-DAY-LAST-EXTERNAL的2400天)上超过300秒墙钟时间限制。这几乎总是意味着每根K线的工作量随历史数据增长,例如反复扫描完整的资金费率/补充数据序列,或在每根K线的calculate_signal()/on_bar()中重建列表并调用min()/sorted()。在__init__中预先计算排序后的时间戳数组ONCE并使用bisect,或按时间戳缓存查询结果,使每根K线的开销为O(log n)而非O(n)。
实现
日线上的截面OKX 14永续合约因子。每隔rebalance_days(分桶 = days_since_epoch // rebalance_days),按过去corr_lookback天的日收益与log1p(成交量/前一日成交量)的皮尔逊相关系数为币排名。做多PVC最低的n个币,做空最高的n个币,在1.0x总敞口下等权配置并保持美元中性。保留的腿仅在偏离超过容差时才调整。每条腿都有一个25%只减仓灾难止损单挂在交易场所,被止损的腿在下一个分桶前保持空仓。所有状态均作为每条腿的标量属性保存。
第3轮迭代处理Layer-3 sandbox_timeout。我在本地使用相同的run_backtest_in_subprocess调用,在2020-01-02..2025-01-24上复现,耗时共338秒。对subprocess_entry在1.6年窗口运行cProfile,耗时179秒。其中166秒耗在ParquetDataCatalog.query(fsspec spec.walk/local.ls/info:371k次ls和2.4M次stat调用,分布在17次目录查询中,另有70秒耗在bar_stamping.load_normalised)。策略整个on_bar路径处理8,456根K线约耗时1.5秒。因此,超时源于14条腿的目录I/O,与策略代码无关(经验教训155(b)/(c):问题在管道,不在信号修复)。每根K线的策略开销已经控制为:仅再平衡K线执行O(14 x回看期)操作,其余为O(回看期),并使用有界双端队列和带索引的开放/在途订单查询。唯一代码改动是小幅的实际节省:再平衡K线上复用主腿已为逐K线信号计算的相关性,不再重复计算。交易品种、腿、方向和参数计划均不变,因此仍忠实于假设。目录查询开销需要通过工程修复解决(缓存目录文件列表,或按明确的K线类型路径查询),也可提高14腿组合的沙盒上限。
验证结果
sandbox_timeout:验证失败(Layer 3 — 沙盒回测):冒烟测试在约20000根K线的窗口(BTCUSDT.OKX-1-DAY-LAST-EXTERNAL的2400天)上超过300秒墙钟时间限制。这几乎总是意味着每根K线的工作量随历史数据增长,例如反复扫描完整的资金费率/补充数据序列,或在每根K线的calculate_signal()/on_bar()中重建列表并调用min()/sorted()。在__init__中预先计算排序后的时间戳数组ONCE并使用bisect,或按时间戳缓存查询结果,使每根K线的开销为O(log n)而非O(n)。
结局总结
14个交易品种的日线策略,必须限制每根K线和每次再平衡的工作量(例如,不在on_bar内扫描缓存的订单或K线历史),才能在300秒沙盒时限内完成,即使假设已要求使用滚动双端队列。
经过3轮迭代后,该策略在验证环节中止。其Layer 3沙盒冒烟测试在约20,000根K线的窗口(BTCUSDT.OKX根1日K线覆盖2,400天)上超过300秒墙钟时间限制,表明每根K线的工作量会随历史数据增长。
在14 OKX USDT永续合约上,每周再平衡,构建美元中性截面因子:根据BigQuant PVC因子并采用固定、预先注册的方向,做多20日价量相关性最低的币,做空相关性最高的币。
没有绩效数据:策略从未完成回测,因此回测报告为空,优化报告为null。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。