策略
BTC 波动率状态门控动量汇合,多空(单一品种 BTCUSDT.BINANCE 永续合约,4H+1D 动量 ACTIVE ONLY,适用于正常至偏高波动率状态,在极低波动率震荡期保持空仓,ATR 追踪,3 参数)
结局: 已放弃
BtcVolRegimeGatedMomentumConfluenceLS
可衡量的全历史样本:2437 天内有 121 笔交易,avg_trade_return_pct 2.06%(远高于 0.15% 的费用底线),PF 1.48,alpha 为正(0.139)、beta 接近零(0.027),因此确属多空策略,而非加密资产 beta。
假设
一项针对 BTCUSDT.BINANCE USD-M 永续合约的 LONG-SHORT、单品种、纯 OHLCV 策略,运行工厂的 ONLY 已验证正向机制——4H 主信号 + 1D 确认动量合流(论文阶段存活者,Sharpe 约 1.99)——但增加了一项 VOLATILITY-REGIME ENTRY GATE:仅在已实现波动率处于正常至偏高区间时执行动量交易,在波动率极低时空仓观望。这是我挂账方案中所有思路之外的一种独立稳健性杠杆:周期变体(更快的 1H+4H、宏观的 4H+1W)改变了时间框架且为 FALSIFIED;波动率-TARGETED 趋势按反向波动率缩放 SIZE;而本方案则按波动率状态 FILTERS ENTRIES。其依据来自详尽证据:动量在 BTC 上的优势真实存在但较为脆弱,其变体的失败模式为低信念状态下的反复震荡——波动率极低的区间正是趋势信号产生虚假反转并持续亏损之处。规避这些情形(仅在波动率指示真实有方向的环境下交易)直击该失败模式,有望提升单笔交易优势并削减震荡期回撤。该策略仍使用 BTC(唯一已证明具备可交易性的品种)、纯 OHLCV(唯一可靠可测、覆盖完整的数据——网格/补充/相对价值方案均因执行、覆盖或 DD 失败),单品种,采用标准增量指标,开发安全且可测量(多年历史中约 100-200 笔交易)。它填补了低于目标的 LONG-SHORT 桶(13.7% 对 86.3% 仅做多)。参数共 3 项,其中波动率状态阈值由滚动分位数(非调参)设定以限制过拟合。
本次迭代仅包含一处变更,且为纯性能修复,不产生任何行为变化:波动率分位数此前在 _vol_rank 中对每根 K 线都扫描全部 720 窗口观测值,现改为在该窗口的有序镜像上使用二分查找,并通过 insort 与索引删除进行维护。我在 25,000 次观测上进行了基准测试——耗时从 2.85s 降至 0.10s,加速比为 28x 倍,所生成的排名与旧扫描逐位一致,因此所有闸门决策、开仓、平仓与指标均未改变,先前报告的数值仍可由此制品复现。我将如实说明本次修复的作用与局限:相对于 300 秒的预算,节省了约 3 秒。此处其他每根 K 线的代码路径已为 O(1)——合流仅两次索引读取,ATR 以增量方式折叠,前一信号由状态承载,跟踪止损重置上限为 200 根 K 线,且仅在首次观测到持仓时执行。主要开销并不来自策略代码。我在本会话早些时候已对此流水线进行过剖析:BacktestRunner 对每种 K 线类型各发起一次 catalog.bars(),NautilusTrader 在每次调用时对整个 K 线目录树做 fsspec glob,每次 bars() 查询约耗 95s,instruments() 另耗 25s,且基本不随 K 线数量变化(61 根 K 线耗时 125.8s,2,401 耗时 137.9s,6,999 耗时 140.4s,在 215s 的剖析运行中约有 200s 消耗于 fsspec glob/walk)。因此单腿策略在执行任何逻辑之前就要付出约 120s,与并发运行共享 I/O 的沙箱仅此一项就可能超过 300s。若再次超时,对策在于基础设施——在单次运行内的 catalog.bars() 调用间缓存已 glob 的文件清单,或直接查询该腿自身的目录而非整个 data/bar 树——而非进一步的策略优化。我未触动信号、闸门、阈值、平仓或仓位规模,因为我在迭代 2 中预先承诺的两项放弃触发条件均已触发,此时再变更机制无异于在止损条件命中后寻觅正向迹象,从而污染记录。
已衰减的双-TF 动量优势,低于 L82 可存续特征(Sharpe 0.90 对比 >1.3,PF 1.48 对比 >2.0,DD 26.7% 对比 <20%)——不值得投入 2 小时优化。该机制在 2020-2023 有效,但在 2024 中较弱(+6%),在 2025 中则显著为负(-20.5%);滚动 Sharpe 在 2025-2026 期间深度为负(-3 至 -7)。20% 留出集完全处于这一亏损状态,将无法通过硬性留出集 Sharpe>0 门槛,而基准 Sharpe <1.0 已是上限,约 225 次试验造成的衰减只会使其更低。波动率状态门控——该变体的全部核心依据——显然毫无帮助(regime_performance 在平稳的 0.88/0.95/0.95 中,震荡的 DD 仍为 26.7%),因此优化只会针对较早的牛市状态拟合动量阈值。失效模式:L82/L63 次于可存续水平的双-TF 动量策略,近期状态已衰减,导致留出集注定失败。
实现
在 BTCUSDT.BINANCE USD-M 永续合约上运行的多空 4 小时动量策略,确认期底线为 1 天,仅当已实现波动率处于正常至偏高状态时才允许开仓。两个动量周期均来自同一 4H 序列,并以随机游走 sigma 单位表示(n 根 bar 上的变化除以 ATR*sqrt(n));4H 腿体现信念强度,而 1D 腿在入场阈值的 25% 处作为方向许可底线。状态门控是相对 ATR(ATR/close)相对于自身过去 720 根 bar 分布的滚动百分位,在第 30 百分位处开启——这是自校准水平,而非拟合得到的绝对阈值。状态门控关闭时,信号会被减弱并严格限制在出场水平以下,因此它既不能开仓,也不能单独平仓。入场要求信号新近穿越入场阈值;出场条件为滞后反转信号达到入场阈值的一半,或从入场以来最高收盘价回撤 ATR 的追踪止损;两者均逐 bar 评估,因此风险管理绝不会受门控限制。仓位规模按追踪止损距离设定固定比例的权益风险,并以权益名义金额的 1x 为上限,杠杆为 1.0。
验证结果
sandbox_timeout:验证失败(第 3 层——沙箱回测):在约 20000 根 bar 的窗口上(涵盖 BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL 的 2400 天),冒烟测试超过了 300s 的墙钟时间限制。这几乎总是意味着存在随历史长度增长的逐 bar 工作——例如每根 bar 都重新扫描完整的资金费率/补充序列,或在 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或缓存以时间戳为键的查询,这样逐 bar 成本就是 O(log n) 而非 O(n)。
回测评审
- 夏普
- 0.90
- 总收益率
- 153.70%
- 最大回撤
- 26.65%
- 总交易数
- 121
- 胜率
- 39.7%
- 盈利因子
- 1.48
可衡量的全历史样本:2437 天内有 121 笔交易,avg_trade_return_pct 2.06%(远高于 0.15% 的费用底线),PF 1.48,alpha 为正(0.139)、beta 接近零(0.027),因此确属多空策略,而非加密资产 beta。
属于工厂可晋升的唯一机制族(在 Binance USD-M 上使用 4H+1D 双-TF 动量汇合,L82);实现简洁、单一品种、纯-OHLCV,开发者已修复已知的两个汇合/出场缺陷。
在所有指标上均低于 L82 可存续的双-TF 特征:Sharpe 0.90(需要 >~1.3),PF 1.48(需要 >2.0),max_drawdown 26.7%(需要 <20%)。基准 Sharpe <1.0 已是上限;约 225 次试验造成的衰减只会进一步拉低它(L63/L82)。
优势已明显衰减:2020 +31.9%、2021 +36.5%、2022 +19.4%、2023 +19.1%,随后是 2024 +6.2%、2025 -20.5%、2026 +6.5%。在 2025-08 至 2026 期间,rolling_sharpe 深度为负(-3 至 -7),而 information_ratio 为 -0.63。
20% 留出集(最近约 15 个月)恰好落在亏损的 2025-2026 状态中,几乎肯定无法通过硬性留出集门槛(Sharpe > 0)。单一配置的 PSR 目前也只有 0.9487。
作为本变体全部前提的波动率状态闸门毫无贡献:regime_performance 在平静/正常/承压三类状态下均匀分布(0.88/0.95/0.95),震荡期回撤仍为 26.7%——该杠杆未能如假设般提升单笔交易优势或削减震荡回撤。
迭代历史
验证失败(第 4 层——QA 审查): - UNMEASURABLE SAMPLE、AND THE CHOSEN LEVER MOVES AWAY FROM MEASURABILITY。沙箱在 363 天内产生 6 笔交易(约 6/年 -> 多年跨度约 36,低于约 100 的底线,L16),与假设自身声称的多年跨度约 100-200 笔交易相悖。这是结构性问题,并非偶然:波动率-EXCLUSION 门控相较于未门控的 4H+1D 存活策略,只会 REDUCE 交易数——它会剔除波动率最低的约 30% 比例 bar——因此将其加到一个已经高度筛选的 1.0-sigma 汇合策略上(两个周期都必须通过阈值,采用 signed-minimum,且要求新近穿越),只会令样本更 SMALLER;对于一个反复因样本量不足而失败的策略族,这恰恰适得其反(1H+4H 为 9/年,三重 iter1 为 12/年,周线为 9-22/年,均不可衡量)。n=6 的指标只是噪声,尽管表面数字诱人:profit_factor 3.95,在 SIX 笔交易中 avg_trade_return_pct 4.04%;Sharpe 0.897,其 CI [-0.71, 2.29] 跨越零;return_skew 2.73、return_kurtosis 50.5,且 largest_win $7,072 占 $10,411 净利润的约 68%——由尾部收益驱动,无法与运气区分。
验证失败(第 4 层——QA 审查): - THE COUNT FIX WORKED AND REVEALED NO EDGE——开发者自己预先承诺的放弃条件。基础选择性修复(1D 腿改为方向性 FLOOR 门控,而不是同等权重的 signed-minimum 阈值;同一修复曾使宏观同类策略从 9 提升至 22)正确地将交易数从 6 提升至 21,覆盖 363 天(多年跨度内约 105-130,大致可衡量)。但扩大后且可衡量的样本净值明确为负:total_return -8.12%、profit_factor 0.650、Sharpe -0.532(CI [-2.28, 0.93])、win_rate 0.333、avg_trade_return_pct -0.592%(为负且低于 0.15% 费用底线),每笔交易的期望收益为 -$386。盈亏比有利(avg_win $2,151 对比 avg_loss $1,655,约为 1.30),但 33% 的胜率不足以支撑它(EV ~= 0.333 x 2151 - 0.667 x 1655 ~= -$388)。开发者预先承诺的两个放弃触发条件均已触发:交易数低于约 30/年 AND,且可衡量样本为负/低于费用底线。波动率状态变量对 BTC 上的动量汇合策略毫无帮助。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。