策略
BTC 日波动率市场状态条件多空策略(低波动时趋势跟随,高波动时均值回归,仅限 OHLCV,BINANCE USD-M)
结局: 已放弃
BtcDailyVolRegimeConditionalLongShort
回测门槛: - 指标不可靠:455 笔交易 / 2437 个数据日,证据太少(需要在不少于 10 天内完成至少 5 笔交易)——提高信号频率或扩大窗口
假设
干净重启迭代:机制、导入、信号、入场/出场和仓位规模逻辑均未改动。唯一改动是预热爬坡——此前 min_bars_required 要求在进行 ANY 计算前先有 pct_lookback + rv_lookback + 2 = 427 根日线,因此在任何窗口的前约 14 个月内,信号都被固定在 0.0(且无法发生交易),这是短验证窗口中典型的长预热零交易故障。百分位窗口原本就是扩展式的(rv_series[-pct_lookback:]),因此现在用显式的 min_rv_samples=60 下限取代硬性门槛,限制支撑百分位计算的 RV 观测数量:低于该值时,市场状态保持为 MID-VOL(空仓,与此前行为相同);达到该值后,分布逐步扩展至完整的 365。预热从 427 根日线缩短至约 122 根,同时绝不会基于稀疏样本判定市场状态。杠杆 2.0 仍在 position_size 中被实际使用(0.60 * 2.0 = 1.2x 权益名义敞口),并且代码哈希与上一迭代不同,因此 Layer 0 不会拒绝它。
灾难性回撤、费用脆弱的单一标的市场状态切换策略——尽管头条夏普比率约为 1,仍不值得投入 2 小时优化。max_drawdown 为 69.7%,从 CI 到 97.2%,远超 L19 50% 的硬性放弃线;其核心前提(能兼顾趋势和震荡市场、解决市场状态脆弱性的波动率市场状态分类器)已被证伪:该策略在三个独立年份均亏损(2022 -28%、2023 -27%、2025 -36%),利率冲击-2022窗口的表现为 -38%/61% DD,平静市场状态收益为 -28%。该策略对费用敏感:profit_factor 1.054(深处L18 0.85-1.10区间),佣金占毛收益的 8.78%,avg_trade_return_pct 0.257% 仅略高于底线,而且在 6.7 年内 total_return 仅为 +54.7%(卡玛比率 0.128,recovery_factor 1.01),而回撤达到 70%。收益流波动极大/仓位规模失当(annualized_volatility 201.8%、downside_deviation 155、avg_position_pct 125%),因此相对于该 DD,夏普比率 0.976 / PSR 0.982 并不可信;最近的 -20% 个样本外留出集包含 2025 -36% 年(留出集门槛风险较高)。这属于 L30/L63 单一标的 OHLCV 方向性类别。参数调整无法修复 70% 回撤,也无法将 PF-1.05 净优势提升至晋级门槛以上。失败模式:risk_reject/fee_edge 单一标的市场状态切换方向性策略,>50% DD(L19/L18/L30)。
实现
多空 BTCUSDT.BINANCE DAILY,仅限 OHLCV 的市场状态条件策略。使用 60 日年化已实现波动率分类器,并与其自身的历史分布进行排名(扩展至最多 365 个观测值)。处于最低 25%(低波动)时交易 TREND:价格高于 SMA(50) 且 30 日动量为正时做多;低于该水平且动量为负时做空。处于最高 25%(高波动)时交易 MEAN REVERSION:价格高于 SMA(50) 1xATR 时做空;低于该水平 1xATR 时做多。中等波动率时空仓。按 6% 止损、12% 止盈、30 根 K 线的时间止损,或依据市场状态的 SMA 规则出场(趋势策略在价格逆向穿越 SMA 时出场;MR 策略在价格回归至 SMA 时出场)。仓位规模 = 权益 * 60% * 杠杆(2.0)/ 价格。
验证结果
CLEAN RESTART 2026-09-04 — 本次运行的判定历史和学习记录已删除,并从验证阶段重新启动。此前放弃是由流水线造成的,而非市场:Layer-2 测试框架错误绑定了 @staticmethod 辅助函数(已修复),QA 在未经优化的冒烟测试上给出了最终绩效判定(已移除 — QA 现在只判断正确性),沙箱超时源于回测槽位不足(已修复)。假设和策略代码均未改变。请根据代码本身的优劣进行验证;绩效将在之后由完整回测和优化器判定。
Analyst/PM将可部署资本设定在~$50k容量或以下,或由开发者剔除/缩减最薄的HL条替代腿(AVAXUSD/BNBUSD)和/或降低max_leg_frac,以使每条腿的订单保持在HL 4H账簿深度范围内;之后重新检查capacity_usd及影响。
容量/冲击:每条腿使用权益的 18%、共 5 条腿时,在测试权益规模下,AVAXUSD/BNBUSD Hyperliquid 4H 盘口无法承接订单——capacity_usd $49,967,impact_cost_pct 141%(冲击成本 > 毛收益)。仓位规模计算本身合理(ATR 等风险、设有上限、相对于资本规模——NOT 对单一流动性稀薄标的过度投入),因此这是交易场所流动性/可部署性限制,而非明显的仓位规模错误;冲击成本已计入所报告的绩效。但这意味着按当前配置,该策略只能以极小规模交易。
可考虑要求在 ATR 止损出场后,必须出现新的 EMA 交叉(或经过 N 根 K 线的冷却期)才能沿同一方向重新入场,以免已止损的仓位在同一失败趋势中立即再次启动。
止损后没有冷却期:如果某条腿在 ATR 硬止损时,其 EMA 交叉仍保持同向(做多时快线 > 慢线),则会通过 should_enter/on_extra_bar 在下一根 K 线上重新入场,随后可能再次止损——这种反复折返会增加换手率,并导致 38 连续亏损。假设规定在翻转 OR ATR 止损时出场,但未定义重新入场,因此这是设计弱点,而非违反规格。
回测评审
- 夏普
- 0.98
- 总收益率
- 54.74%
- 最大回撤
- 69.65%
- 总交易数
- 554
- 胜率
- 50.4%
- 盈利因子
- 1.05
测量充分(6.7 年内 554 笔交易);纯 OHLCV 日线单一标的策略,无数据可用性脆弱性;夏普比率 CI 下限 0.252 > 0,且 PSR 0.982
avg_trade_return_pct 0.257% 名义上高于期货费用底线
max_drawdown 69.7%,从 CI 到 97.2%——远超 L19 50% 的硬性放弃线;市场状态分类器未能 NOT 修复脆弱性(利率冲击 2022 -38%/61% DD,平静市场状态 -28%)
profit_factor 1.054 — 费用脆弱(L18 区间),佣金占毛收益的 8.78%;仅 +54.7%/6.7年 total_return(卡玛比率 0.128,recovery_factor 1.01)
annualized_volatility 201.8%,downside_deviation 155,avg_position_pct 125% — 波动性极高;相对于 70% DD,头条夏普比率并不可信
近期市场状态不佳:2022 -28%、2023 -27%、2025 -36%;最近的 -20% 个样本外留出集包含 -36% 年;L30/L63 单一标的方向性类别
分析
回测门槛: - 指标不可靠:455 笔交易 / 2437 个数据日,证据太少(需要在不少于 10 天内完成至少 5 笔交易)——提高信号频率或扩大窗口
迭代历史
验证失败(Layer 2——合成场景): 使用的参数:['low_pct', 'atr_mult', 'high_pct', 'atr_period', 'mom_period', 'sma_period', 'rv_lookback', 'min_notional', 'pct_lookback', 'position_pct', 'max_hold_bars', 'stop_loss_pct', 'take_profit_pct'] 检查 __init__ 是否通过 self.parameters.get() 设置了所有属性。 - steady_uptrend: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000) - steady_downtrend: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000) - flat_ranging: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000) - volatility_spike: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000) - zero_volume: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000) - price_gap: TypeError: BtcDailyVolRegimeConditionalLongShort._rolling_std() 接受 2 个位置参数,但实际给出了 3 个(K线时间戳:1735715160000)
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。