源文件:research/quant_digests/2026-03-18_1328_ttm-squeeze-release-regime-gate.md
看的是两个开源实现:GiustiRo/squeezem-adx-ttm(把 Squeeze Momentum、ADX、TTM Waves 拼到一张 Pine 面板里)和 hackingthemarkets/ttm-squeeze(用 Python 直接把 Bollinger Band 完全收进 Keltner Channel 定义成 squeeze_on,再检测 coming out the squeeze)。对当前 desk 来说,最值得抄的不是整套指标拼盘,而是一个更朴素的 shared gate:当 15m 还困在压缩里时,别急着把 breakout、Fib 回踩或 EMA 延续都当成已经启动。
Crypto 5m/15m,squeeze_on 更像 no-trade / avoid-chop 提醒,squeeze_off 后的前几根扩张 bar 才更像值得让三条收口线出手的窗口。BB(20,2) 是否被 KC(20,1.5*ATR) 完整包住;一旦从 sqz_on=1 变成 0,就视为压缩结束、波动重新扩张。压缩中、刚释放、已扩张一段时间,这比“线碰到了没”更贴 15m 执行。OI / liquidation / VWAP / CHoCH 不同,这条线只依赖现有 OHLCV,接入成本最低,也最适合先做一刀最小实验。V3 final-verdict / breakout-short follow-up:如果跌破发生时仍处在 sqz_on,更诚实的读法往往不是 continuation,而是 箱体内假动作 / chop break;只有 sqz_off 后继续扩张,short follow-through 才更值得信。Fibonacci confirmation / retest_hold:Fib 告诉我们“价格回到哪”,但 squeeze 状态能补一句“这次回踩是在压缩里乱抖,还是已经完成压缩、开始重新放大”。EMA / PSAR raw alpha focus:这条线最像 shared regime veto——EMA/PSAR 负责方向,squeeze 负责判断这段行情到底有没有从静音切到可交易。avoid-chop / expansion-confirmation 层。BB inside KC 的压缩/释放状态接到现有三条 base archetype 上,能在不明显砍死样本的前提下,减少 2~4 bar 假启动与成本后磨损。sqz_on_t = [lowerBB(20,2) > lowerKC(20,1.5ATR)] and [upperBB(20,2) < upperKC(20,1.5ATR)]release_t = sqz_on_{t-1}=1 and sqz_on_t=0linreg momentum 正负号;long 要求 mom_t > 0,short 镜像。basebase + no_sqz_on_veto(压缩中不做)base + release_recent_gate(只接受 release_t 后 1~4 根内的信号)base + release_recent_gate + momentum_signBTC / ETH / SOL perpetual,最近 120~180d,15m,把它压到三条 archetype:breakdown_reclaim_short、fib_retest_hold、ema_slope_continuation;统一 next-bar open + no-overlap,成本先看 6 / 10 bps per side。whipsaw_2bars / 4bars、post-cost expectancy、trade_count_retention、follow-through@4/8 bars。no_sqz_on 或 release_recent 能不能稳定减少假启动,而不是单纯靠大幅砍样本? 如果能,它就配进 shared gate 候选池;如果 retention 掉太多、收益没改善,就快速压回 evidence pool。BB/KC 参数非常容易被调参美化;20/2/1.5 只能先当默认基线,不该一开始就扫太大参数网格。release 常常是 晚确认:它可能减少假动作,但也可能把最好的一段初始扩张让掉,尤其在 crypto 里经常发生“刚 release 就一根走完”。EMA + ADX + volume 有邻近性,所以这轮刻意不把 ADX 当主角;若最终改善主要来自 ADX 而不是 sqz_on/off 状态机,就应把功劳还给 ADX,不要混记。