Crypto market regime detection — building a 4-state classifier from public data
Every trading strategy works in some regimes and fails in others. A momentum strategy thrives in trending markets and bleeds in chop. A mean-reversion strategy makes money in range and dies in trends. Most retail traders never explicitly label the regime — so they run the same strategy in every condition, and the long-term result is the mediocre average across regimes. A four-state regime classifier built from free public data takes 30 minutes to set up and improves any strategy's risk-adjusted returns meaningfully.
What "regime" actually means
Regime is the latent state of the market. It's not the price level, it's not the trend, it's the structural mode the market is operating in. A market trending up at 3% per week is in a different regime than a market chopping ±5% per day with no net direction, even if both might end the month with similar absolute moves.
Strategies have implicit regime assumptions baked in. A trend-following strategy assumes the trend will continue. A mean-reverter assumes price will return to a recent average. If you run a trend-follower in a mean-reverting market, you give back your gains on every reversal. If you run a mean-reverter in a trending market, you fade the trend repeatedly and accumulate losses.
The four states
For crypto futures, four regimes capture most of what matters:
State A: Trend-up (bull trending)
BTC making higher highs and higher lows on the daily. Funding consistently positive. OI growing alongside price. Volatility moderate (not extreme either direction).
What works: trend-following longs, momentum continuation plays, basis trades (sell perp / buy spot to harvest funding).
What fails: contrarian shorts, mean-reverters fading rallies, aggressive Kelly-sized bearish plays.
State B: Trend-down (bear trending)
BTC making lower highs and lower lows on the daily. Funding compressing toward zero or negative. OI declining as positions get squeezed out. Volatility elevated.
What works: trend-following shorts, capitulation buys at specific structural levels, defensive yield strategies in stablecoins.
What fails: long-only momentum plays, "buy the dip" assuming bottom is in, mean-reverters fading rallies.
State C: Chop (range-bound)
BTC oscillating within a defined range. Funding alternating. OI roughly flat. Volatility moderate but with clear support and resistance.
What works: range trading (buy support, sell resistance), short-horizon mean reversion, market making with tight inventory.
What fails: trend-following (gets faded on every reversal), longer-horizon directional bets.
State D: Volatile chop (regime transition)
BTC making violent moves in both directions with no clear range or trend. Funding swings widely. OI volatile. Volatility extreme.
What works: very short-horizon strategies (scalping, market making), waiting in cash, defensive positioning.
What fails: all swing strategies, position trades, anything that requires holding through a 5-10% adverse move.
The classifier rules
Four diagnostic inputs, four threshold rules, one composite state output.
Input 1: BTC daily trend score
Calculate the 14-day rate of change on BTC daily close. Positive = uptrend bias. Negative = downtrend bias. Compute the absolute value: high = strong trend, low = no clear trend.
Threshold: |ROC14| > 7% indicates a directional trend regime. |ROC14| < 4% indicates a range/chop regime. In between is ambiguous.
Input 2: BTC realized volatility
Compute the standard deviation of daily returns over the last 14 days, annualized. This is the volatility regime indicator.
Threshold: vol > 80% annualized indicates "volatile" regime. Vol < 50% indicates "calm". Between is ambiguous.
Input 3: Funding rate regime
Compute mean of last 30 funding payments (8-hourly intervals on Binance USDT-M Futures). Sustained positive = bullish positioning. Sustained negative = bearish positioning. Oscillating around zero = no clear consensus.
Threshold: |mean funding| > 0.015% per 8h indicates a directional positioning regime. Below indicates positioning is neutral.
Input 4: Open interest delta
Compute change in BTC futures total open interest over last 14 days as % of starting OI. Growing OI on rising price = trend confirmation. Falling OI on falling price = capitulation/deleveraging.
Threshold: |OI delta| > 20% over 14 days indicates a significant positioning shift.
Combining the inputs into a state
Simple decision tree:
- If trend score positive AND vol moderate AND funding positive → State A (trend-up)
- If trend score negative AND vol elevated AND funding compressing → State B (trend-down)
- If trend score near zero AND vol moderate → State C (chop)
- If trend score near zero AND vol elevated → State D (volatile chop)
- Otherwise: "ambiguous transition" — apply prior state with reduced conviction
Implementations vary in how they handle edge cases. Some force a state on every observation; others allow "uncertain" labels. For practical use, force a state with reduced sizing during ambiguous periods.
How to actually compute this
All inputs come from free public APIs:
- Binance Futures kline endpoint:
/fapi/v1/klines?symbol=BTCUSDT&interval=1d&limit=30— last 30 daily candles for ROC and volatility. - Binance funding endpoint:
/fapi/v1/fundingRate?symbol=BTCUSDT&limit=90— last 30 days of funding for the regime average. - Binance OI endpoint:
/futures/data/openInterestHist?symbol=BTCUSDT&period=1d&limit=14— last 14 days of daily OI for delta.
Poll once a day at the daily close. Compute the four inputs. Apply the threshold rules. Output a state label. Total compute time: under 1 second per day.
Store the regime label over time as a separate time series. After 60-90 days of regime labels, you can backtest your strategies separately within each regime and see which strategies are net positive in each state. This per-regime breakdown is one of the most valuable analytics any quant desk has — and it costs nothing to build.
What to do with regime-tagged backtests
Once you have a regime label per day and a backtest of each strategy split by regime, the per-strategy ROI numbers tell you which combinations to run:
- Strategies that are positive in State A → run only when classifier says A
- Strategies that are positive in State B → run only when classifier says B
- Strategies that are positive across multiple states → run as your defaults
- Strategies that are positive only in one state → run only in that state
- Strategies that are negative in every state → kill
This selective deployment dramatically improves risk-adjusted returns compared to running every strategy at all times. The cost: more operational complexity. The benefit: meaningful Sharpe-ratio improvement on the strategy mix you actually run.
Our own implementation
All our internal strategies — NEVA, CATALYST, VENUE, PHOENIX — incorporate regime awareness. The exact thresholds and which states each strategy considers compatible are firm IP and not published, but the framework is exactly what's described above: classify the market state continuously, only fire signals when the strategy is in a regime where it's expected to work, gate aggressive sizing on regime confidence.
This regime gating is one of the structural reasons our strategies are more consistent than gut-feel discretionary trading. The strategy doesn't try to make money in regimes where its edge structurally disappears. It pauses, waits, and resumes when the regime fits.
The honest takeaway
If you trade discretionarily, even a coarse regime label (trending vs chop, calm vs volatile) applied to your strategy choice would materially improve your results. The math is simple, the data is free, the workflow takes 30 minutes to set up. Most retail traders never do this because the daily effort feels like overhead. Traders who do it consistently are systematically more profitable than traders who don't.
Skip the regime modeling, get the signals
Our internal strategies fire only when their compatible regime is active. NEVA + CATALYST + VENUE + PHOENIX all run regime gating automatically. You allocate capital; the strategy decides when to deploy. Trial is free.
Start free trial →