跳至正文
全部策略

策略

KO/PEP 协整配对回归——在免佣金 US 股票上进行美元中性多空统计套利:交易两个协整消费必需品大盘股之间均值回归的价差,z 分数入场、收敛退出、分歧止损(KO.USEQ + PEP.USEQ,日线 bar,3 个参数)

结局: 已放弃

KoPepCointegrationPairsReversionLS

美元中性实现正确:beta 为 0.029,benchmark_correlation 0.14,benchmark_meaningful 为 false——市场中性构造按设计发挥作用

假设

一种DOLLAR-NEUTRAL、LONG-SHORT的PAIRS统计套利策略,交易两只结构性协整的US大盘股——做多/做空可口可乐(KO.USEQ)与百事可乐(PEP.USEQ)——在USEQ交易场所进行。这与加密货币投资组合中的所有策略以及已列入开发计划的单只股票均值回归策略,在策略类别上都有实质区别:可交易对象是两家具有基本面关联公司的SPREAD,而不是任一公司的股价。KO和PEP是教科书式的协整配对——消费必需品需求驱动因素相同,对宏观环境的敏感度相同,数十年来走势共同变动——因此它们的相对估值围绕稳定的长期关系波动,并在偏离过大时回归。为什么这适合USEQ而非加密货币:配对/市场中性策略在加密货币投资组合中0/125(L68),主要是因为双腿往返交易的FEES(0.20-0.40%)高于薄利的价差回归收益,AND跨交易场所的交易腿无法注入沙盒(L69)。这里则没有BOTH问题——USEQ免佣金(每条交易腿约0.02-0.05% RT,仅需承担价差和冲击成本),因此同样的价差优势在加密货币上会被手续费吞噬,在这里扣除成本后仍有充足收益;而且BOTH交易腿都在SAME交易场所(USEQ),因此第二个工具能像已在运行的372同场所加密货币配对一样,注入Layer-3沙盒。数十年的日线历史(KO和PEP都从1980年代起进行交易)可用于构建真正稳健的多窗口滚动前向测试和实际的15日留出样本,从而避免导致短历史策略失效的空缺-OOS问题。仅有3个自由参数(z_entry、回看期、hard_stop_z),并将z值固定在0时退出,以降低过拟合风险。FEE ARITHMETIC:KO/PEP价差z分数从极值|z|=2到均值回归,峰值至均值的波动约为2-4%;每笔已完成交易捕获约0.8-1.2%的价差收敛收益,而双腿往返成本约为0.16%(4次成交 × 约0.04%),收益约为成本底线的5-7x倍,且远高于0.15%可行性门槛。市场中性构造抵消了广泛市场贝塔,因此收益来自RELATIVE估值的均值回归,而非方向性押注。

第 2 次迭代仅修复 ONLY Layer-2 故障,不作其他改动。原因:Layer-2 代理使用 types.MethodType 将继承的方法复制到普通包装器上,从而把基类静态方法 FactoryStrategy._bar_ts 变成 BOUND 方法——因此 self._bar_ts(bar) 会以两个位置参数传入,并在每个场景中触发 TypeError。修复方法:新增模块级 _bar_timestamp(bar) 辅助函数(读取 ts_event,并在缺失时回退到 ts_init),替换 on_extra_bar、_sessions_since 和 calculate_signal 中的三个 self._bar_ts(...) 调用点。未添加或删除任何导入(Layer 1 仍通过),信号计算、进出场阈值、仓位规模、对冲腿提交逻辑和配置均与上一轮逐字节相同。其余内容与第 1 次迭代一致:每根 bar 都返回连续价差 z 分数,并在 should_enter 中进行阈值判定;恰好有 3 个自由参数(z_entry、回看期、hard_stop_z),并在 _param_bounds 中声明其上下限;两条腿均在同一个免佣金 USEQ 交易场所交易,美元名义金额相等(对冲腿按 beta 调整,beta 限定在 [0.6, 1.6]),总敞口上限为权益的 50%,杠杆为 1.0,因此组合保持市场中性,避免名义金额不等或裸露单腿的故障模式;SyncedBuffer 确保 KO 和 PEP 样本按时间戳对齐;持有时间以引擎仓位 ts_opened 为基准,因此重启后仍能延续。

没有显著优势,且机制已衰减——不值得优化。全样本夏普比率为 0.106,bootstrap CI [-0.163, 0.380] 区间跨过零,information_ratio 为负值(-0.385),且 total_return 在 54 年间约为每年 1%。关键在于,KO/PEP 价差优势已经衰减:从 2023 到 2026 的每一年都为负值,滚动夏普比率已降至 -4.26,因此滚动前向验证中最近的 OOS 窗口和最近的 -20% 留出集都处于亏损阶段,无法通过验证。这不是成本受手续费限制(avg_trade_return_pct 0.476% 高于 USEQ 成本底线)——这是已知的 USEQ 市场中性 / KO-PEP 配对零幸存者模式(此前已迭代两次,均以失败告终)。优化一个仅微幅为正、统计上不显著且正在加速衰减的协整价差,只会对历史窗口过度拟合,并在留出集上失败。

实现

在KO/PEP协整价差上进行美元中性的多空配对统计套利,使用USEQ根日K线。每个交易时段在45个时段的窗口内对log(KO)对log(PEP)拟合滚动OLS对冲比率,构建价差 = log(KO) - beta*log(PEP),并返回该价差的z分数作为信号。z <= -1.8时做LONG KO / SHORT PEP,z >= +1.8时做SHORT KO / LONG PEP;两腿以等额美元名义同时开仓(每腿各占权益的25%,对冲腿按beta缩放,取整股)。头寸在收敛时平仓(z回穿0)、在背离硬止损时平仓(逆持仓方向|z| >= 3.5),或在40个时段的时间止损时平仓,且两腿始终同时平仓。PEP腿仅在确认KO腿成交有效后才提交,若在主仓位为空时发现孤立的对冲腿则立即平仓,因此账簿从不持有裸露的方向性头寸。

验证结果

CLEAN RESTART 2026-09-04 — 本轮的判定历史和学习记录已删除,并从验证阶段重新启动。此前放弃该策略是由流水线导致,而非市场导致:Layer-2 测试框架错误绑定了 @staticmethod 辅助方法(已修复);QA 在未优化的冒烟测试中给出了终局绩效判定(已移除 — QA 现在只判断正确性);沙箱超时源于回测槽位不足(已修复)。假设和策略代码均未改变。请依据代码本身的表现进行验证;绩效将在之后由完整回测和优化器判定。

不改代码;确保使用完整历史窗口,使每个 WF 窗口和留出集都有足够数量的已完成往返交易。

沙盒交易次数偏少(42,约4.5年,约9次/年)——这是配对交易频率所固有的特点,NOT并非可测量性的障碍,因为完整回测基于数十年的KO/PEP日线历史数据运行(数百笔交易)。已作标记,以便分析师检查各时间窗口的滚动前向/留出样本交易笔数。

回测评审

夏普
0.11
总收益率
53.91%
最大回撤
13.65%
总交易数
445
胜率
58.0%
盈利因子
1.18

美元中性实现正确:beta 为 0.029,benchmark_correlation 0.14,benchmark_meaningful 为 false——市场中性构造按设计发挥作用

avg_trade_return_pct 0.476% 高于 USEQ 成本底线(并非手续费导致的失败)

风险控制良好:max_drawdown 13.6%,两腿在同一交易场所,因此不存在注入问题

极长历史中有 445 笔交易——样本数量充足

夏普比率为 0.106,且 CI 的 [-0.163, 0.380] 区间跨过零——即使在样本内也没有统计显著的优势

total_return 仅在 54 年内交易了 53.9% 次(约每年 1% 次),且 information_ratio -0.385 和 profit_factor 1.18

优势已衰减:2023–2026 年间每年均为负值,滚动夏普比率已降至 -4.26——KO/PEP 价差已无法通过回归持续获利

留出集(最近约 11 年)和最近的滚动前向验证 OOS 窗口都处于近期负面行情阶段,因此优化会在 OOS/留出集上失败

符合已知的 USEQ 市场中性 / KO-PEP 配对零幸存者失败模式(此前已失败两次)

迭代历史

验证失败(Layer 2 — 合成场景): 使用的参数:['z_exit', 'z_entry', 'beta_max', 'beta_min', 'lookback', 'hard_stop_z', 'per_leg_pct', 'min_notional', '_param_bounds', 'max_hold_bars'] 请检查 __init__ 是否通过 self.parameters.get() 设置了所有属性。 - steady_uptrend: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000) - zero_volume: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000) - price_gap: TypeError: FactoryStrategy._bar_ts() 接受 1 个位置参数,却收到了 2 个(bar 时间戳:1735689600000)

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