Does a Regime Model Actually Predict Crypto Prices?

Every vendor selling an "AI regime signal" implies the same promise: know the regime, know where price is going. We built a Hidden Markov Model (HMM) crypto regime engine — trained on 56,762 hours of market data (2020 → now) that classifies the whole market and every Hyperliquid perp — and then did the thing most vendors skip: we scored its own calls against what BTC actually did next.

The results are worth publishing precisely because two are flattering and one is not. In one line each:

Everything below is reproducible against the live /market-regimes model and its history endpoints. Here are the base rates.

Nowcast, Not Forecast: What the Model Actually Does

A nowcast tells you the state of the world right now; a forecast tells you the next move. The HMM is a nowcast. It reads price, volatility and funding that are already in motion and names the regime — usually within hours of a state change.

That's why the regime timeline looks so prescient: green bands sit right on top of rallies. But that agreement is by construction, not prophecy. Measured at the first bar of each regime episode (n=418 bull, 376 bear):

The band is a recognition of the move already underway, not a call on the next one. That's an honest — and still useful — thing for a model to be, as long as you use it as state, not signal.

Finding 1: It Identifies Market State — Reliably

Scored bar-by-bar against the following 24 hours, the volatility regimes carry real information. During vol_spike, 79.5% of the next-24h windows on BTC saw above-median realized volatility — against a 50% base rate. And the state transmits across the whole book, not just BTC:

RegimeClaim testedAccuracyBaseLift
vol_spikefwd 24h vol > median79.5%50%+29.5pp
squeezevol expansion (fwd > trailing)64.5%49.1%+15.4pp
choppyfwd 24h vol > median58.8%50%+8.8pp
rangefwd 24h vol < median58.7%50%+8.7pp

The honest limit: every vol regime beats a coin flip, but none beats trailing 24h realized vol as a forecaster — it encodes the current vol state, it doesn't see further than a good rolling-vol estimate. Use it as a universe-wide sizing and stop-width layer: one market-level call to set position size, stop distance and liquidation buffers across every coin you hold.

Finding 2: It Routes Strategies — Measurably

Here's where the model earns its keep. A plain 24h-momentum strategy is dead flat unconditionally (Sharpe ≈ 0). Split the same strategy by regime and it separates into large, opposite-signed pockets — and the pattern replicates across three independent datasets: BTC (2020–26), 16 major alts, and all 175 HL perps.

RegimeBTC 2020–2616 majors175 HL perpsVerdict
bear−2.09−1.07−5.06Fade — stable
vol_spike−2.17−2.81−0.54Fade — stable
squeeze+0.75+1.71+1.50Momentum — mild
choppy+2.46+1.10−7.31Unstable — skip

Values are the Sharpe of a 24h-momentum strategy inside each regime; negative means fading / mean-reversion is what works. Read it as a strategy selector:

As a BTC exposure filter, holding only during bull returned +579% at Sharpe 1.21 with a 30% max drawdown — versus a 200-day-SMA filter's 0.93 Sharpe and 63% drawdown for roughly the same return. Half the drawdown, a third of the time in market. (Read the next section before you trade that one.)

Finding 3: It Does NOT Predict Direction

Now the unflattering part, stated plainly. P(BTC up over the next 24h | bull) was 52.8%. The unconditional base rate is 52.1%. That +0.7pp is not significant (episode-level p = 0.21). Raising the confidence threshold to ≥0.7 doesn't rescue it — still 52.9%. The bull leg's real edge is drift concentration (bull bars carry ~2.5× average drift), not sign prediction.

The bear label is worse than useless as a short signal: mean BTC return during bear is mildly positive, and shorting it lost money on every dataset. If anything, bear flags bounce conditions — across the 175-perp universe, per-coin bear→down lift was negative for 98% of 174 coins.

This is not a quirk of our model. No regime model — ours or anyone's — predicts short-horizon direction. A regime is a description of the present. Vendors who sell it as a direction oracle simply aren't showing you the base rate. You can check ours yourself:

curl -H "X-API-Key: cdk_live_your_key" \
  "https://cryptodataapi.com/api/v1/quant/market?horizon=24h"
{
  "scope": "market", "horizon": "24h",
  "regime": {"label": "strong_trend_bull", "confidence": 0.71},
  "probabilities": {
    "directional": {"strong_up": 0.10, "mild_up": 0.43, "flat": 0.05,
                    "mild_down": 0.33, "strong_down": 0.09}
  }
}

Add it up: P(up) = 0.10 + 0.43 = 0.53 — a hair above the base rate, exactly as the scoring says. The directional head is a transition-matrix projection, not a realized-outcome forecast, and we label it that way in the docs on purpose.

The Honest Caveat: Most of This Is In-Sample

One more disclosure, because a post about base rates has no business hiding its own. Almost all of the above is in-sample. The HMM's parameters and the state→label mapping were both chosen looking at the full 2020–2026 window, so the strategy-routing and drawdown numbers carry some circularity — the bull-exposure edge in particular is partly a product of the state having been labeled "bull" by inspecting that same window.

Only ~546 bars (about 23 days) are genuinely out-of-sample so far — too few to conclude anything. On that thin slice, the bull filter was slightly negative and bear was again a bounce. So we rank the findings by how much we trust them:

We score the live out-of-sample tail as a separate segment as it accrues (it becomes meaningful around 2,000 bars, ~3 months). The fold-honest history is downloadable so you can re-run every number above yourself:

curl -H "X-API-Key: cdk_live_your_key" \
  "https://cryptodataapi.com/api/v1/quant/regimes/history"   # Pro Plus, full 2020→now

How to Use a Regime Nowcast Without Fooling Yourself

Put together, the model is a context layer, not a crystal ball. Match each job to what the scoring actually supports:

Use it forDon't use it for
Position sizing & stop width (vol nowcast)Predicting the next 24h direction
Strategy selection (fade bear/vol_spike, momentum in squeeze)A standalone long/short entry signal
BTC exposure gating (risk-adjusted, provisional)Shorting a "bear" regime — it bounces
import httpx
m = httpx.get("https://cryptodataapi.com/api/v1/quant/market?horizon=24h",
              headers={"X-API-Key": "cdk_live_your_key"}).json()
regime = m["regime"]["label"]

# 1. Size by volatility state, not by a price forecast
size = 0.5 if regime in ("vol_spike", "choppy_high_vol") else 1.0

# 2. Pick the playbook the regime historically rewards
strategy = ("mean_reversion" if regime in ("strong_trend_bear", "vol_spike")
            else "momentum" if regime == "squeeze" else "flat")

# 3. Gate directional exposure - never short 'bear', it bounces
allow_long = regime == "strong_trend_bull"