跳至正文
全部策略

策略

DeFi 对 L1 行业多空动量篮子轮换(每周)

结局: 已放弃

DefiVsL1SectorMomentumBasketRotationLongShort

回测门槛: - 指标不可靠:不一致:夏普比率 0.09 与 total_return -13.89% 的符号不一致——夏普比率根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应依据权益曲线进行判断。

假设

一个 DOLLAR-NEUTRAL CROSS-SECTOR MOMENTUM ROTATION 策略:两个 2 个品种的篮子(DeFi/基础设施:LINK + AAVE;L1 主流币:BTC + ETH),策略根据过去 4 周的相对动量 ROTATES 决定做多还是做空哪个板块。RATIONALE 由现已DEFINITIVE 的会话发现驱动:跨 5 个机制类别的 14+ 策略尝试均已失败。分析师最近的校准更新明确承认“本会话我所做的 EVERY 层级模式提取是错误的”,并指出仍真正未测试的类别。本提案明确回应分析师的明确建议:“板块篮子的统计套利(做多 DEX 代币篮子 vs 做空 L1 代币篮子作为单一仓位)”——这是本会话中 TRULY 的未测试机制。KEY DIFFERENTIATION 源自 4 个被证伪的跨资产对(ETH/BTC、BNB/ETH、SOL/ETH、LINK/ETH):(a) 每边 MULTI-INSTRUMENT 个品种——2 个 DeFi 品种 vs 2 个 L1 品种——每条腿内部的多元化稀释了导致所有 MR 配对策略失败的单品种不对称性。(b) 基于 MOMENTUM 的 NOT 均值回归——策略 ROTATES 做多表现优异的板块,押注动量延续;这与 MR 假设漂移反转在结构上不同。(c) SECTOR vs SECTOR 论点——策略并非押注两个资产互相回归,而是押注 OUTPERFORMING SECTOR 继续跑赢(学术动量文献:Asness/Frazzini/Pedersen)。(d) WEEKLY 再平衡——低频、对费用友好,捕捉股票因子模型中记录的横截面板块趋势。(e) ZERO 补充数据依赖。(f) MAXIMALLY SIMPLE —— 1 决策参数(动量回看周数=4)。DIFFERENTIATION FROM L1 BASKET(在流水线中):L1SectorBasketCrossSectionalMomentumLongShortDaily 对 WITHIN 一个板块进行排序(5 个 L1);本策略对 BETWEEN 两个板块进行排序。信号不同、算法不同、互补多元化。

迭代-6 修复仅针对所报告的回测门禁失败:“夏普 0.09 与 total_return -13.89% 的符号不一致”。这两个数值都源自 runner.py 中的 SAME 按市值计价权益曲线,因此日均正回报配合复利负回报即属于波动率拖累(mu - sigma^2/2 < 0),也即账簿每根 K 线的方差远超其优势所能支撑的水平。在不动及动量排序、日历锚点、O(1) 同步缓冲或已通过第 1-3 层的导入/结构的前提下,修复了两个结构性原因:(1)各腿一旦建仓便不再重新调整规模,因此只有板块翻转才会触及它们——盈利腿复利增长而其空头腿萎缩,“中性”篮子累积了巨大的净 delta,其方差淹没板块价差;周度轮动现在在每条同侧腿偏离共享目标名义超过 rebalance_band 时下发 delta 市价单(NETTING OMS)将其拉回共享目标名义,这正是假设中“周度再平衡”的含义,同时也定期实现盈亏而非让其多年保持未实现。(2)gross_exposure 由 0.95 降至 0.60(声明范围 0.30-0.90):拖累随敞口平方缩放,而均值线性缩放,因此复利回报现在跟随单笔交易优势的符号。坦率说明:夏普值为 0.09 意味着板块动量价差在上一次运行中几乎未显示出优势,方差降低使指标保持一致而非制造优势——如果下次回测指标一致但表现平平,则机制本身被证伪。

在可靠的 324 笔交易 / 6.7 年样本中,期望收益为负:avg_trade_return_pct -0.28%(低于 ZERO),profit_factor 0.94,total_return -13.67%,夏普比率 -0.010(CI [-0.76, 0.74] 跨越零),每笔交易期望收益为 -$63,且 avg_loss (2156) 高于 avg_win (2109)。交易正确实现了假设(美元中性、平衡的 162 多头 / 162 空头、每周再平衡),因此这是对 DeFi 对 L1 行业动量持续性假设的 FAIR 测试——且该假设已被可测量地证伪:不存在正向毛收益优势,收益取决于市场状态(正常三分位 -33.1%,压力状态 +31.4%,regime_spread 1.35),而非稳定的行业价差。手续费仅占毛收益的 1.5%,且每周换手对费用友好,因此这并非 NOT 手续费脆弱性问题——信号的毛收益为负。唯一真正的决策参数(回看期)无法扭转一个 PF-0.94、期望收益低于零的信号;没有可供优化的目标。这是第 6 次迭代,开发者预先承诺,若结果连贯但持平或为负,就意味着机制被证伪——现在观察到的正是这一结果。与多工具多空篮子类别的先验一致(L45/L63,multi_instrument ~0/84):组合层面的结果反映的是市场状态贝塔,而非每个行业的优势。不值得投入 2 小时优化。abandon_class=negative_expectancy。

实现

基于 BINANCE USD-M 日 K 线的美元中性跨板块动量轮动。两个 2 个品种的篮子(DeFi:LINKUSDT+AAVEUSDT;L1:BTCUSDT+ETHUSDT)。在日历锚定的周度网格上(纪元日索引可被 rebalance_days 整除),比较各篮子过去 28 日成员回报均值;策略做多表现优异板块的两名成员、做空表现较差板块的两名成员,每条腿名义相等。周度轮动现在还会将每条存续腿在偏离共同目标名义超过 rebalance_band 时重新等权化回共同目标名义,从而保持账簿美元中性而非复利形成净方向性头寸,总敞口上限为权益的 0.60。

验证结果

将假设文本 / 标题明确为“在日线柱上每周再平衡”,以免第 -1.5 层字符串启发式和未来的 QA 检查再次标记。无需更改代码。

假设标题为“(周度)”,流水线一致性检查标记 config.bar_type = BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL 与周度时间框架相矛盾。经检查,假设的机械声明是 WEEKLY REBALANCING(并非周度 K 线):它明确指定“周度再平衡”和“回看周数=4”。代码通过 7 天的日历锚定轮动网格(rebalance_days=7)配合日 K 线上的 28 天动量回看精确实现了这一点,而日 K 线在结构上是每根 K 线 _reconcile 步骤所必需的(翻转的腿会在紧接着的下一根日 K 线上重新进入)。周度轮动的语义、品种、方向、规模和核心优势都与假设一致,因此这是标签层面的差异,而非机制替换或信号损坏。不构成阻塞。

确认基础 FactoryStrategy 是否遵循子类的 min_bars_required 覆盖来执行预热门控;如果没有,则由 _sector_momentum/calculate_signal 内的 len(self._synced) >= lookback+1 守卫保证预热,这些守卫已能防止过早产生信号。

min_bars_required(self) 覆盖了框架方法(静态分析器 base_shadow 警告)。它返回 lookback_days+2,这是动量窗口的合理预热要求,因此该覆盖看起来是有意且正确的,而非意外遮蔽。

沙盒冒烟测试结果为负(total_return -13.67%,夏普比率 -0.006,avg_trade_return_pct -0.28%,PF 0.96),这是第 6 次迭代,其改动针对的是波动拖累 / 美元中性漂移,而非建立优势。开发者坦诚指出:“如果下一次回测结果连贯但持平,机制本身就被证伪。”指标现在在内部保持一致(夏普比率的符号与收益一致),这正是修复的目的,但目前还看不到正向毛收益优势。市场状态拆分显示,收益依赖市场状态(正常三分位 -35.5%,压力状态 +31.6%),而非稳定的行业动量价差。分析师应依据全历史 + 优化后的数据作出判断;如果连贯的结果持平或为负,这意味着假设被证伪,而非费用问题(手续费仅占毛收益的 1.4%,每周换手对费用友好)。

回测评审

夏普
-0.01
总收益率
-13.67%
最大回撤
25.48%
总交易数
324
胜率
49.1%
盈利因子
0.94

交易忠实地实现了假设:在两个行业篮子之间保持美元中性、平衡的 162 多头 / 162 空头,每周再平衡——这是对行业动量假设的公平检验,而非机制失效。

策略设计上对费用友好:手续费仅占毛收益的 1.5%,每周换手——失败原因 NOT 不是费用问题。

指标现在在内部保持一致(夏普比率的符号与 total_return 一致),因此第 -6 次迭代的波动拖累修复在机制层面奏效。

在具有决定性的 324 笔交易 / 6.7 年样本中,期望收益为负:avg_trade_return_pct -0.28%(低于 ZERO),profit_factor 0.94,total_return -13.67%,每笔交易期望收益为 -$63,夏普比率 -0.010(CI [-0.76, 0.74] 跨越零)。

不存在正向毛收益优势:avg_win 2109 < avg_loss 2156, win_rate 0.49 — 行业动量价差不会持续。“优势”是依赖市场状态的噪声,而非稳定信号:正常三分位 -33.1%,压力状态 +31.4%,因此结果会随市场状态改变而反转,而不是可重复的跨行业价差。

第 6 次迭代;开发者明确预先承诺,连贯但持平或为负的结果意味着机制被证伪——这正是现在观察到的结果。唯一真正的决策参数(回看期)1 没有可供调优的目标:信号的毛收益为负。

符合多品种多空篮子类的先验(L45/L63、multi_instrument ~0/84):账簿层面的回报为制度 beta,而非逐品种/逐板块的优势。

分析

回测门槛: - 指标不可靠:不一致:夏普比率 0.09 与 total_return -13.89% 的符号不一致——夏普比率根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应依据权益曲线进行判断。

迭代历史

验证失败(第 4 层——QA 审查)[类别=code_defect]: - [edge_concern] 相较于阻断性缺陷,这是次要问题:回测环境表现为负值(total_return -17.0%,夏普比率 0.04,PF 0.97,avg_trade_return_pct -0.061%,max_drawdown 40.9% CI 至 80.8%),且按构造为市场中性——没有证据表明轮动策略扣除成本后仍有优势。但这不是它被阻断的原因;应在实现修正后重新评估,因为当前的轮动日期本身就是由运行时间锚定的日程造成的假象。 - 每周再平衡由一个 PROCESS-RELATIVE BAR COUNTER 驱动,并带有 -(10**9) 哨兵值——这是 18 标出的反模式,且对轮动策略至关重要。随后 `self._signal_bar_count += 1` 在 `(_signal_bar_count - _last_rebalance) >= rebalance_days` 时以 `_last_rebalance = -(10**9)` 进行再平衡。锚定运行时间,而非日历:(1) 会在每次重启后的第一根 bar 上触发完整的 4 条腿再平衡(1 - (-1e9) >= 7 会立即成立),因此线上崩溃重启循环会使整个组合不断换手;(2) 周度网格锚定于进程启动时间,而非 bar 日期,所以轮动日期会漂移,无法通过一致性检查或回放复现。对于唯一优势仅在于轮动 WHEN 的策略而言,这足以构成否决理由。 - 尽管 _rebalance() 提前返回(没有对齐的历史数据),_last_rebalance 仍在首次调用时设定,因此首次真正的交易再平衡——以及整个周度网格——都会相对于任意一根 bar 发生偏移。只要将日程改为使用 bar 时间戳,这个问题就会自动修正。

验证失败(第 1 层 —— 配置):config.instrument_id 与 config.bar_type 为 REQUIRED(得到 instrument_id=None、bar_type=None)。将两者均设为假设的品种,例如 instrument_id='BTCUSDT.BINANCE'、bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'。

sandbox_timeout:验证失败(第 3 层——沙盒回测):在约 20000 个柱的窗口(2400 天的 BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL)上,冒烟测试超过了 300 秒墙钟时间限制。这几乎总是意味着逐柱工作量随历史长度增长——例如每次都重新扫描完整的资金费率 / 补充数据序列,或在每个柱的 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询结果,使逐柱开销为 O(log n) 而非 O(n)。

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