Indicators

Regime Filter

Labels the current market state as trending, squeeze, or ranging. Skip-or-take decisions.

1 min readUpdated Jun 19, 2026

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 squeeze to trending transition.

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.

Regime Filter | Help Center | LucraX · LucraX