The Regime Filter combines an ADX read for trend strength with a
Bollinger-inside-Keltner squeeze check to produce a single state
label: trending, squeeze, or ranging.
Logic
if adx >= adx_trending_threshold:
regime = "trending"
elif bollinger_inside_keltner:
regime = "squeeze"
else:
regime = "ranging"Params
- ADX period - ADX lookback (default 14).
- ADX trending threshold - ADX threshold for "trending" (default 25).
- Bollinger + Keltner params for the squeeze test.
Output
Single column (string) named after your indicator (e.g. regime).
Usage
Pure filter. Pair with a comparison:
{ "type": "comparison", "indicator": "regime", "operator": "==", "value": "trending" }Common patterns:
- Trend strategies require
regime == "trending". - Mean-reversion strategies require
regime == "ranging". - Breakout-watch strategies trigger only on a
squeezetotrendingtransition.
Pitfalls
The thresholds for trending vs ranging are calibrated to typical
crypto behavior. Adjust them for the symbol/timeframe - equity
futures vs BTC have very different regime durations.
