跳至正文
全部策略

策略

跨资产防御性双动量制度轮动策略,使用 US ETF(SPY/QQQ 与 TLT/IEF/GLD 对比,基于日线的月度再平衡,绝对动量风险规避开关,数十年历史)——非动量共振家族,填补 USEQ 市场空白,使用工厂中最干净的数据集

结局: 已放弃

CrossAssetDefensiveDualMomentumEtfRotation

结局总结

该策略将工厂从濒死的永续合约动量共振家族转向 USEQ 数十年深度的日线 ETF 数据,每月在 SPY/QQQ、TLT/IEF/GLD 防御性板块和现金之间轮动一个名义金额为 100% 的仓位,并通过绝对动量熔断开关控制。初始回测通过了 backtest_review,给出“优化”判定,数据确实免受手续费影响(回报 419%,Sharpe 0.41,每笔交易 2.87%,零佣金);审查者确认,该熔断开关相较于买入并持有基准可测量地降低了 2008 回撤。随后优化揭示其优势只是噪声:走步验证过拟合,OOS Sharpe -0.718 为负,PBO 0.635,折减后 Sharpe 0.0346,参数面平坦且遍布断崖,熔断开关阈值不起作用,整体表现逊于其自身的等权基准。经过 2 次迭代后,该策略被放弃,成为第六个以相同且已测得的结构性原因失败的 USEQ 月度 ETF 制度轮动实例——整个生命周期内决策太少,无法估计任何东西。

假设

一项 LONG-ONLY、MULTI-ASSET 的制度轮动(regime-rotation)策略,覆盖一个小而流动性良好的 US-ETF 资产池 {SPY, QQQ, TLT, IEF, GLD},基于 1-DAY 级别的 K 线,按月再平衡。这是相对于垂死的双时间框架动量融合永续合约族系的 DELIBERATE 转变 OFF(撞车的 BTC-HL 端口已死亡 fee_edge,其 LTC/XRP/LINK/SOL/HL-SOL/DOT/BNB 克隆体已成坟场),并 ON TO 本工厂中表现 LIFE 的 ONE 股票族系:制度轮动(UsRiskOnRiskOffRegimeRotationSpyTltHysteresis ADVANCED 历经 backtest_review 直至在 2026-09-06 上进行优化,与 L74 中七个股票教科书式异常值的死亡不同)。它与 SectorDispersionGatedCrossSectionalMomentumLS 的死亡有本质区别(后者在 CORRELATED 个股票板块上做多空排名后亏损;而本策略在 UNCORRELATED 个资产类别之间轮动,并配有防御性的绝对动量熔断开关)。其优势不在于日内阿尔法择时——而在于 (a) 收割长期股票风险溢价,同时 (b) 利用绝对(时间序列)动量在持续下跌趋势中将股票 OUT 至债券/黄金/现金,从而削减那些使买入持有夏普减半的深度熊市回撤。选择它是因为 USEQ 的 1-DAY K 线拥有 DECADES 的复权历史数据——这是整个工厂中最为稳健可回测的交易场所——且股票场所代表性不足。每月节奏(约每年 12 次再平衡)使费用可忽略不计,即使在 USEQ 约 0% 的佣金之前。

第 2 次迭代仅修复报告中的 Layer-2 故障。TypeError(“other”应为 InstrumentId,却收到 str)来自待处理目标哨兵值:再平衡后,self._pending_target 保存了 InstrumentId,而守卫 `self._pending_target != "none"` 将 Cython InstrumentId 与 str 进行比较,导致抛出异常而非返回 False。现在哨兵改为普通布尔标志 `_pending`,`_pending_target` 仅保存 InstrumentId 或 None。出于同样原因,所有 id 比较(`held == target`、`iid == target`、`iid == self.instrument_id`)现在都通过可安全处理 None 的 `_same_id()` 字符串比较进行,因此 InstrumentId 不会再与 None 或 str 比较。信号逻辑、投资范围划分、月历锚点、仓位规模和执行顺序均与上一迭代相同(Layer 1 / 1.5 已通过,导入未改动)。

三项不可豁免的 HARD 有效性失败项(走步验证过拟合、负的 OOS Sharpe -0.718、PBO 0.635),并经 DSR 0.0346 确认:选定的 Sharpe 低于N次试验中最大值的噪声线,项目 FDR 拒绝。经优化详情文件核实:前 5 笔交易占 98 笔交易的 78.5% 盈亏(前 10 笔 = 110%,因此剩余 88 笔净亏损);且该策略表现不及自身等权基准($543,635 对比 $848,616),information_ratio -0.090——防御性熔断开关损失的回报超过其避免的回撤,推翻了该假设的核心主张。这不是手续费问题(佣金 0,每笔交易 2.23%,高于 0.05% 下限),也不值得继续迭代(两个参数均呈断崖状,热力图是平坦噪声,阈值参数不起作用)。由于过拟合,应放弃而非修改。这是第六个以此方式失败的 USEQ 月度 ETF 制度轮动实例;结构性原因已测得——每年约 12 次再平衡仅产生 56-98 次生命周期决策,其中少数几次贡献了全部盈亏,因此无法用该样本估计具有 3 个参数的规则。

实现

仅做多的月度双动量制度轮动策略,覆盖五-ETF USEQ 投资范围,使用 1-DAY K线。每个交易时段都会对每个 ETF 评分,评分依据是其 126 个交易时段和 63 个交易时段总回报的加权组合。每个日历月首次评估的交易时段(以K线自身时间戳为锚,可安全重启)由相对动量从 SPY/QQQ 中选出较强者;只有当该胜出者的绝对动量超过 abs_momentum_threshold 时才持有,否则轮动至超过同一阈值的 TLT/IEF/GLD 中最强者,否则持有现金。每次仅持有一个占权益 95% 的整股仓位,五条腿均手动驱动,并按结算状态排序执行(先平仓,之后在较晚的干净K线上入场)。

验证结果

如果基准依赖自身的 min_bars_required 来控制额外腿的预热门槛,请确保五条腿在首次再平衡触发前都已有 >= lookback_days+1 根 K 线(每条腿的 _score None 守卫已强制执行这一点,因此这只是双重保险的说明)。

min_bars_required() 覆盖了框架方法(静态分析标记)。这似乎是有意为之(返回 lookback_days+2 = 128 以控制预热期),并且再平衡/评分逻辑会独立检查缓冲区是否过短(当 len(closes) < horizon+1 时,_score 返回 None),因此不存在前视或过早交易风险。请确认基类会采用此覆盖实现进行预热期控制,而不是使用其自身的值。

制度轮动天然低换手:沙盒在约 1650 天内仅产生 17 笔交易,因此即使拥有数十年的 USEQ 1-DAY 历史数据,该策略很可能也只会产生约 60-120 笔交易。这足以运行,但样本太稀疏,难以区分优势与噪声(参见 L16)。该机制的价值在于降低回撤,而非交易级别的 alpha,因此标题指标 avg_trade_return_pct(5.28%)并非相关统计量;分析师应依据完整历史的风险调整指标(Sharpe/Calmar/max_dd)进行判断,并确认绝对动量熔断开关确实能相较于 SPY 买入并持有基准削减熊市回撤。沙盒中的 Sharpe 0.84 / Calmar 2.92 / beta 0.55 与防御性轮动论点在截短窗口上的表现一致。

回测评审

夏普
0.41
总收益率
419.16%
最大回撤
37.44%
总交易数
70
胜率
50.0%
盈利因子
2.78

在最干净的交易场所数值上可行且不受费用影响:metrics_reliable=true,70笔交易,avg_trade_return_pct 2.87%(远高于USEQ 0.05%下限),PF 2.78,夏普比率为正 0.41,$0 total_commission——这绝对NOT不是因费用优势而失效。

交易体现了这一假设:70 笔做多交易,0 笔做空交易;仅做多,在不相关资产类别间轮动,具备且触发了绝对动量熔断开关(在持续下跌趋势中,股票仓位会降至现金,例如曲线中的 2018-12/2019-01 和 2022-07..2022-11 平台期)。

核心防御性论点已被证实,并非仅是断言:在 2008 中,该子策略的回撤约为 $125k -> $78k(约 37%),而 SPY 买入持有策略的回撤约为 55% —— 熔断开关切实削减了最深的熊市回撤,这正是 QA 要求确认的内容。

这是在工厂中已展现出 LIFE 的制度轮动股票家族(其 SPY/TLT 滞后控制同类策略进入了优化阶段),并且与 SectorDispersion 横截面失败案例有本质区别(不相关资产类别 + 防御开关,而非相关行业多空策略)。

正 alpha(每年 +1.1%)和低换手(每年约 3.3 次切换)使其能稳健应对成本;recovery_factor 13.2,profit_factor 2.78。

标题中的风险调整指标较低:Sharpe 0.41 / Sortino 0.43 / Calmar 0.26,且相较等权篮子为 information_ratio -0.09——相对于朴素的多资产持有策略,其主动优势有限。

压力波动率最高三分位仍为负值(回报 -20%,Sharpe -0.02,DD 56.6%),且 covid_crash_2020 窗口 -21%——月度/6 个月的节奏在快速崩盘期间反复遭受双向震荡;该开关对缓慢熊市(2008)的保护效果优于快速熊市。

有效样本约为 2005-2026(在 GLD 于 2004-11 中累积回看期之前,策略保持空仓),因此约为 21 年 / 约 70 次切换 —— 可运行但对前推划分而言偏薄;需警惕在每窗口约 23 笔交易上出现过拟合。

在 419% 总回报中,end_unrealized_pct 31 意味着标题数字的一部分来自测试结束时仍未平仓的头寸——应以已实现/风险调整后的表现为准,而非 MTM 的标题数字。

分析

按设计免受手续费影响:USEQ 笔交易,佣金 $0,建模冲击仅占毛收益的 1.42%,每笔交易回报为名义金额的 2.23%,高于 0.05% 下限——NOT 手续费优势失效。

代码忠实实现了该假设:98 在 SPY/QQQ/TLT/IEF/GLD 间进行仅做多的月度轮动,持有约 2 个月,不做空,end_unrealized_pct -0.39(没有 MTM 标题指标虚高)。

留出集(2013-04 至 2018-04)表现为正,Sharpe 为 0.83,共 16 笔交易;利润因子高于软性下限 2.25。

三项不可豁免的 HARD 失败项:is_overfitted=true(IS +0.528 对比 OOS -0.718),平均 OOS Sharpe NEGATIVE(-0.718;三个窗口均为非正值:-0.087/-1.843/-0.224),PBO 0.635 > 0.50。

DSR 0.0346,选定的 Sharpe 0.416 BELOW,低于 225 次试验中偶然最大值预期线 0.7317(有效试验数 44);项目的 FDR 拒绝(p=0.965,保留 4/291)。

两个真实参数都呈断崖状;5x5 热力图是从 0.41 到 0.63 的平坦噪声场,所选单元格也不是峰值。abs_momentum_threshold 在所有变化中均不起作用——优化器关闭了该假设的标志性熔断开关。

最终产生五笔交易:表现最佳的 5 笔(共 98 笔)贡献了 $444k 盈亏中的 78.5% 部分,排名第 10 位的为 110%(其余 88 笔净亏损)。

该策略表现不及自身基准:等权买入并持有最终为 $848,616,策略为 $543,635,二者起始资金同为 $100k;IR -0.090,beta 为 0.58 时 alpha 为每年 1.17%。

在 33.4% 时突破预先登记的 20% DD 上限(Calmar 0.44,处于水下 1065 天);达到预先登记预测的 2/5。

在 291 个项目候选项上以 q=0.10 进行 Benjamini-Hochberg 校正后,保留 4。未能通过这一步的候选项,与项目自身的噪声无法区分,无论其单独统计数据看起来多么出色。

迭代历史

验证失败(Layer 2 — 合成场景): 使用的参数:['min_notional', 'n_risk_extra', 'notional_pct', '_param_bounds', 'lookback_days', 'blend_short_frac', 'abs_momentum_threshold'] 请检查 __init__ 是否设置了 self.parameters.get() 中的所有属性。 - steady_uptrend: TypeError: 参数 'other' 类型错误(应为 nautilus_trader.model.identifiers.InstrumentId,却收到 str)(K线时间戳:1735697220000) - flat_ranging: TypeError: 参数 'other' 类型错误(应为 nautilus_trader.model.identifiers.InstrumentId,却收到 str)(K线时间戳:1735697220000) - volatility_spike: TypeError: 参数 'other' 类型错误(应为 nautilus_trader.model.identifiers.InstrumentId,却收到 str)(K线时间戳:1735697220000) - zero_volume: TypeError: 参数 'other' 类型错误(应为 nautilus_trader.model.identifiers.InstrumentId,却收到 str)(K线时间戳:1735697220000) - price_gap: TypeError: 参数 'other' 类型错误(应为 nautilus_trader.model.identifiers.InstrumentId,却收到 str)(K线时间戳:1735697220000)

结局总结

一条每年约再平衡 12 次的规则,整个生命周期仅产生 56-98 次决策,其中少数几次贡献了全部盈亏;因此,无论基础数据多干净或历史多长,都无法用该样本对具有 3 个参数的月度轮动策略进行统计估计。

分析师在优化后,基于三项不可豁免的硬性有效性失败项放弃该策略——走步验证过拟合、平均 OOS Sharpe 为负、PBO 高于 0.50——同时还有项目 FDR 拒绝(p=0.965)、两个真实参数均呈现敏感性断崖、abs_momentum_threshold 不起作用,以及策略表现不及自身等权基准($543,635 对比 $848,616,IR -0.090);前 5 笔交易贡献了 78.5% 盈亏,共 98 笔交易。

一种仅做多的月度双动量轮动策略,基于 USEQ 日线,在 SPY/QQQ 中持有较强者,只要其混合绝对动量为正;否则转入 TLT/IEF/GLD 中最强者或持有现金,旨在获取股票风险溢价,同时削减深度熊市回撤。

在 1993-2026 上的初始回测总回报为 419.2%,Sharpe 为 0.41,Calmar 为 0.26,利润因子为 2.78,最大回撤为 37.4%,共 70 笔做多交易,avg_trade_return_pct 2.87%,佣金为 $0;优化后回报为 443.6%,Sharpe 为 0.416,最大回撤为 33.4%,交易数为 98,但走步验证 OOS Sharpe 为 -0.718(窗口分别为 -0.087 / -1.843 / -0.224),且 PBO 0.635、折减后 Sharpe 为 0.0346;而 2013-2018 留出集表现为正,Sharpe 为 0.83,共 16 笔交易。

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