策略
BTC 日线动量策略(带波动率过滤)
结局: 已放弃
BtcDailyMomentumVolatilityFilterLongShort
结局总结
BtcDailyMomentumVolatilityFilterLongShort 是一项刻意保持简单的三参数策略,押注于 BTC 的日线动量持续性,并通过自归一化的波动率扩张过滤器来避免区间震荡行情中的反复交易。基础回测表现确实只是边际水平——夏普比率 0.23、利润因子 1.07、43% 回撤,且收益集中在少数异常交易日——但其包含 120 笔交易的密集样本足以获得优化机会。优化通过将仓位交易过度稀疏至仅 20 笔,得到一个亮眼的夏普比率 1.18;尽管步进式前向检验的过拟合标记为 false,但这依赖两个走运的 OOS 窗口(其中一个没有交易),而按时间顺序划分的留出集表现崩溃至 0.224 比率。分析师将其作为结构性过拟合策略放弃——去膨胀夏普比率 0.0 远低于 9.53 运气门槛,PBO 0.64,且核心参数上出现四个敏感性断崖,包括波动率门槛本身——这与此前被放弃的单资产趋势策略有着相同的过拟合少量交易特征。
假设
BTCUSDT期货上一个简单的日线时间框架动量策略。当波动率扩张时(有利于趋势延续),按近期动量方向入场,并在低波动率震荡期间保持空仓。仅使用2个核心指标(ROC和ATR比率)和3个可调参数,最大程度降低过拟合风险。日线K线意味着每周约1-2笔交易,使手续费拖累可忽略不计。这是刻意的简单 — 优势来自BTC日线时间框架下有充分文档记录的动量持续性,通过波动率制度门槛过滤以避免震荡市中的反复止损。
以刻意的极简主义实现BTC日线动量加波动率过滤假设。calculate_signal返回有符号的ROC(连续的、每根K线都会变化)作为动量信号,并缓存波动率制度门槛(短期ATR/长期ATR)以及用于风险管理的ATR。should_enter要求波动率比率超过vol_ratio_min(波动率扩张 -> 有利于趋势延续),然后才按动量方向建仓;这可以过滤掉动量信号反复止损的低波动率震荡市。波动率门槛以无量纲的ATR比率表示,因此在BTC多年的价格/波动率制度大幅变化中仍保持有效(绝对ATR门槛会漂移出范围)。因为该策略是真正的多空,所以路由到BINANCE期货场所。日线K线每周产生约1-2笔交易,使往返手续费相对于每笔交易移动可忽略不计。风险由ATR止损和时间止损限制;只调整三个指标/参数以最小化过拟合。
失败的去通胀夏普:DSR=0.0(对比0.95门槛),在225次试验中期望最大值=9.53 — 优化后的夏普1.18低于N次最优运气门槛FAR个点,与选择噪声无异(is_significant=false)。每个前向检验都确认了过拟合:HOLDOUT FAILED(比率0.224,样本外夏普0.625 对比WF-OOS 2.79)、PBO 0.6389(>0.5)、sharpe_ci_low -0.69(CI横跨0),以及敏感性FAILED,在CORE定义参数上有4悬崖(atr_period、roc_period、atr_long_mult,以及vol_ratio_min制度门槛本身 — 夏普在小步长间摆动0.46->0.012->0.20)。优化器对一个弱势基础进行了过度精简(初始夏普0.226、PF 1.07、max_DD 43%、120笔交易)至仅剩20笔交易(13多/7空),对微小样本进行了曲线拟合;推进分析is_overfitted=FALSE标志具有误导性,因为它由两个幸运的OOS窗口支撑([4.15、0.0、4.21]),其中有一个窗口产生零笔交易,而诚实的前向样本外则崩溃。不迭代(第1次尝试,共2次):失败是结构性的 — 核心参数上的4悬崖、过度精简至20笔交易、低于运气门槛DSR个点、以及样本外失败 — 而非一个未充分探索的稳健区域,因此第二次扫描会再次发现另一个稀薄的幸运窗口拟合。不revise_hypothesis:BTC日线动量已被充分研究,而波动率扩张门槛恰恰是产生悬崖的原因,没有已验证的兄弟策略被搁置在死目标上。FAILURE PATTERN:在BTC上一个刻意简单的多空日线动量 + 波动率制度过滤策略产生了一个边缘化的基础(夏普0.23),优化器通过过度精简至20笔交易将其膨胀(夏普1.18、PF 2.72),但它在去通胀夏普上失败(0.0,远低于9.53运气门槛)、样本外失败(比率0.224)、PBO 0.64,以及包含波动率门槛本身在内的4悬崖敏感性 — 制度过滤是刀刃般的参数,非稳健优势。在基础动量信号上添加波动率扩张门槛以交易笔数换取脆弱的悬崖依赖;与先前放弃的单一资产趋势策略相同的过度拟合至少笔交易的特征。
实现
1-DAY 根 K 线周期的 BTCUSDT.BINANCE(USD-M 永续合约)上的简单日线级别动量策略,采用多空双向交易。方向由过去 roc_period 天的变化率(ROC)决定;只有在波动率扩张时才允许交易,扩张情况以短窗口 ATR 与较长基准 ATR 的无量纲比率衡量(>= vol_ratio_min)。在波动率扩张状态下,正动量时做多,负动量时做空;在低波动率震荡行情中保持空仓。动量反转、触及 ATR 止损(3x ATR),或 30 天最大持仓时间止损到期时退出。三个核心可调参数(roc_period、atr_period、vol_ratio_min)。仓位规模为账户权益的 50%。
回测评审
- 夏普
- 0.23
- 总收益率
- 34.06%
- 最大回撤
- 43.09%
- 总交易数
- 120
- 胜率
- 32.5%
- 盈利因子
- 1.07
期望收益为正(每笔交易 +$131),在 6.4 年间,密集的 120 笔交易样本总收益为 +34%——足以进行步进式前向检验。
趋势收益特征(avg_win 2.2x avg_loss,胜率为 32%);设计简单(3 个核心参数,过拟合空间小);近年表现为正(2025 +1.4%,2026 +20.1%)。
明确的调参方向:当前 roc_threshold 为 0.0(任何动量方向都会入场——较为粗糙);提高它并调整 vol_ratio_min,可以提高筛选严格度并减少震荡行情中的亏损。
优势稀薄且对手续费脆弱:profit_factor 仅 1.07,夏普比率 0.23,其中 CI 跨越 0(sharpe_ci_low -0.83)。
回撤较大(43%),且出现灾难性的 2022(-23.9%);依赖异常值(return_kurtosis 87.7——+34% 依赖约 4 个巨大交易日)。
容量极小($11.5M),按回测仓位规模计算,冲击成本占毛收益的 9.3%。
这些特征使其成为优化后很可能无法通过去膨胀夏普比率和留出集检验的候选策略。
分析
优化后的表面指标看起来还不错(夏普比率 1.18,PF 2.72,max_DD 25.5%)
步进式前向检验的 is_overfitted 标记在技术上是 FALSE
去膨胀夏普比率 0.0(is_significant FALSE):在 225 次试验中,优化后的夏普比率 1.18 远低于 9.53 的预期最大运气门槛——与最佳 N 次择优带来的选择噪声无法区分
留出集 FAILED:比率 0.224(留出集 0.625 对比 WF-OOS 2.79),远低于 0.70 的下限——前向窗口表现崩溃
敏感性 FAILED,核心参数(atr_period、roc_period、atr_long_mult、vol_ratio_min)出现 4 个断崖——波动率状态门槛本身就是刀锋般敏感的参数
PBO 0.6389(>0.5)以及 sharpe_ci_low -0.69(CI 跨越 0)
优化将 120 笔交易过度稀疏至 20 笔——对极小样本进行曲线拟合;一个步进式前向检验的 OOS 窗口没有产生任何交易
基础回测表现本就平平(夏普比率 0.226,PF 1.07,max_DD 43%)
结局总结
在基础动量信号上增加波动率扩张门槛,以脆弱的断崖依赖性换取较少的交易次数:当优化必须将薄弱的基础策略过度稀疏化至极小样本,且状态过滤器成为刀锋般敏感的参数时,表面上的夏普比率只是选择噪声,在诚实的留出集中会崩溃。
该策略通过了回测审查(结论:优化),但分析师在优化后将其放弃:去膨胀夏普比率为 0.0,而预期最大运气门槛为 9.53;留出集检验失败(比率 0.224,低于 0.70 下限);PBO 0.64;sharpe_ci_low -0.69;敏感性检验失败,核心参数出现 4 个断崖——包括波动率状态门槛本身——同时优化器将 120 笔交易过度稀疏至 20 笔。
一项刻意保持简单的 BTCUSDT 日线多空动量策略:当短窗口 ATR 超过较长基准 ATR(波动率扩张状态门槛)时,沿变化率方向交易;在低波动率震荡行情中保持空仓;动量反转、触及 ATR 止损或触发时间止损时退出——仅使用三个核心可调参数以限制过拟合。
基础回测在约 6.4 年期间表现平平:120 笔交易(61 笔多头,59 笔空头),胜率 32.5%,利润因子 1.07,夏普比率 0.23(CI 跨越零,低 -0.83),总收益 +34%,但收益依赖约 4 个异常交易日(峰度 87.7),最大回撤为 43%。优化将交易稀疏至 20 笔,表面指标强劲(夏普比率 1.18、利润因子 2.72、最大回撤 25.5%)。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。