源文件:research/quant_digests/2026-04-06_1020_volume-anomaly-bandfade-hmm-veto-alpha.md
README.md + VEBB.txt + reactive_vebb.py + regime_detection.py + optimization_results.csv + multi_year_results.csv)15m 上出现足够深的带外偏离(更像 20-bar, 2.5σ 的 stretch)且同时伴随“广义放量”时,后续更容易回到中轨;HMM 不是 alpha 本体,只是危机状态下的禁开仓 / 强平 veto。这次看的是一个 2025-12 创建、2026-01 更新 的公开 GitHub thesis repo:AbeneilMagpantay/Adaptive-HMM。它表面上的 headline 是:
> 用 Gaussian HMM 给 BTC 的均值回归策略加一个危机 regime circuit breaker,尽量避免在 2025 这类高波动阶段被反复打脸。
但如果按我们当前 desk 的 intake 优先级来读,这份材料真正值得先收进素材池的,不是 “HMM 很高级”,而是更朴素的这一句:
> base alpha = 带外 stretch 之后,不是立刻无脑抄底摸顶;而是只在“真的有异常参与度”的时候,去赌向中轨的回摆。
这让它和最近几轮已经补过的 breakout / carry / pairs / OBI continuation 不同: 它补的是一个单资产、可直接落地、偏反转侧的 raw alpha 壳,而且天然可以拆成 raw alpha + regime veto 两层。
一句话版:
> 先把 HMM 放一边,这个 repo 最值钱的不是“预测 regime”,而是告诉我们:BTC 的 band-fade 是否成立,关键不在更精细的 vol_z 数值,而在“是否真的出现了宽口径的成交量异常”以及“是否避开危机状态”。
它怎么证明这点?
optimization_results.csv 给了 729 组 参数网格;bb_mult = 2.5、atr_sl = 1.5、atr_tp = 1.5;vol_z = 1.5 / 2.0 / 2.5 的平均值和最优值完全一样,cooldown 10 / 20 / 50 影响也很小;bb_mult 从 1.5 → 2.0 → 2.5 时,平均收益明显改善(均值约 -0.737% → -0.256% → -0.065%);multi_year_results.csv 又显示它非常吃 regime:2018 +16.66%、2021 +11.22%、2023 +4.73%、2025 +2.84%,但 2024 -12.89%,说明这不是“永远有效的买跌卖涨”,而是必须配状态过滤。翻成人话:
结合最近 digest 进展,我们已经连续补了不少:
但 “单资产 mean reversion 的完整策略壳” 相对还是少一点,尤其是这种:
entry / exit / stop / cost / regime veto;15m,再下钻到 5m / 3m 做 child execution;所以它不是在重复老 Bollinger Band 话题,而是在补一个更 desk-friendly 的判断:
> 如果 band-fade 要活下来,最先该测的不是 HMM 多厉害,而是 “stretch 要多深 + 放量口径怎么定义 + 哪些 regime 必须直接不做”。
2.5σ stretch 比 1.5σ/2.0σ 更像样参数网格给的最直接信息就是:
bb_mult = 2.5 的均值和最优值都显著优于 2.0 和 1.5;对 short-cycle desk 来说,这比“再找一个新指标”更重要: 很多反转 alpha 死,不是因为反转不存在,而是 entry 太浅。
repo 有两套实现:
band touch + vol_z > 2;percentile / z-score / ratio / OBV 的组合确认。再结合 729 组网格,最有价值的启发反而是:
> 把“有没有异常参与度”做成宽口径 admission,可能比不断微调 vol_z 阈值更重要。
这很适合我们 desk: 可以把 volume confirmation 设计成 shared module,后面既能接在这个 band-fade 上,也能接到别的 breakout-fail / exhaustion-fade / overreaction-revert 上。
reactive_vebb.py 里 HMM 用的是:
gk_vol(Garman-Klass volatility)hurstlog_ret训练 3-state GaussianHMM,然后:
gk_vol 超过训练样本 99 分位,触发 circuit breaker。这层设计对我们有价值,但必须老实定位:
这里必须记一笔:repo 内部绩效口径不完全一致。
例如:
0.90 → 1.79,但 2025 OOS 仍然 -8.65%;HMM 再把损失压到 -1.30%,并把回撤使用压低 98.7%。multi_year_results.csv 又显示 2025 +2.84%;metrics.json 还是另一组接近持平的小结果。这通常意味着:
所以这轮 digest 的结论不是“这 repo 已经证明能赚钱”,而是:
> 它已经足够证明我们该先复现一个 clean 的 band stretch + broad volume anomaly + crisis veto 壳。
1m / 3m / 5m / 15m 的最小实验怎么测第一轮别急着上 HMM,先测 raw alpha:
BTCUSDT perp15mclose <= lower_band(20, 2.5σ) 且 volume_percentile_100 >= 70close >= upper_band(20, 2.5σ) 且 volume_percentile_100 >= 701.5 ATR 止损 / 1.5 ATR 止盈;8~12 bars4~5 bps + 1 tick 滑点先回答三个问题:
2.5σ 是否真的比 2.0σ 更稳,而不是只减少 trade count?第二轮再接 overlay:
15m 数据训练 3-state HMM;GK vol + rolling Hurst + log return 开始;regime != safe:禁新开仓GK vol > train_p99:强平 / size=0看三件事:
5m / 3m / 1m最实用的 child execution 版本是:
15m 负责生成 raw alpha 方向;5m / 3m 负责挑更好的入场价;1m 只做 execution veto(例如再破前低 / 前高就不接)。也就是说,这条线最自然的映射不是“直接在 1m 上重新训一套 BB”,而是:
> 15m 定 stretch,5m/3m 吃回摆。
如果只拿一句结论走,我会写成:
> 这份 HMM thesis repo 最值得复现的,不是 HMM 本身,而是一个更朴素、也更可复刻的壳:深 band stretch × 宽口径放量 admission → 向中轨回摆;HMM 只负责在最坏 regime 里说“不做”。