KB / framework
Market Regimes (5-tier classifier)
Last verified
Every cycle the platform classifies current conditions into one of five regimes. The label drives narrative on the dashboard, weight adjustments inside the Health Score, and analogue filtering in the base-rate matcher.
The five regimes
RISK-ON
Triggers: DIX strong, GEX positive, HY OAS tight, breadth broad, VIX low
Structural supports intact with broad participation. The floor is solid.
Favor long positions, full sizing. Conditions support risk-taking.
CAUTIOUS
Triggers: Most supports intact but one or two lagging — typically breadth < 50% or credit widening
Mostly there but mixed signals warrant caution. Not all sectors participating.
Be selective. Favor quality, slightly smaller sizes. Watch the lagging signal.
TRANSITIONAL
Triggers: Signals actively disagree — some improving while others deteriorate
Between regimes. Direction is unclear. Often seen at turning points.
Reduce exposure or wait for clarity. Don't force trades when signals conflict.
RISK-OFF
Triggers: Multiple structural supports weakening — rising HY OAS, falling breadth, weak DIX, negative GEX
Environment deteriorating. Institutional buyers stepping back.
Favor defensive sectors, reduce longs, consider hedges. Cash is a position.
PANIC
Triggers: Acute stress across all dimensions — extreme VIX, wide credit, collapsed breadth, heavy put buying
Systemic stress. Capital preservation mode.
Hedge everything. No new longs. Wait for stabilization.
Evaluation order
The classifier evaluates regimes in most-restrictive-first order: PANIC → RISK-OFF → RISK-ON → CAUTIOUS → TRANSITIONAL (default). A row gets the first label whose triggers fire; if none match, it falls through to TRANSITIONAL.
This ordering matters: PANIC and RISK-OFF only catch acute stress, so the gate is intentionally tight. RISK-ON requires broad agreement across all structural supports — it doesn’t fire unless DIX, GEX, credit, breadth, and VIX all confirm.
Energy regime — orthogonal axis
A second regime axis classifies energy conditions separately (energy_regime field): STABLE, ELEVATED, SHOCK, CRISIS. Energy SHOCK or CRISIS triggers the energy_shock override in score_weights.json, rebalancing the Health Score so Correlations doubles (cross-asset transmission becomes the dominant signal), BTC drops to zero, and Sectors scale down. The transmission-order profile in the Alignment dots also flips to oil-led.
How regimes affect the Health Score
Per score_weights.json → regime_overrides, each regime can declare per-component scaling. Only energy_shock and energy_relief are configured today, but the structure generalizes — any future regime can rebalance the 18-component allocation. Total weight stays at 100; the override just shifts which components contribute most.
See also
- Health Score — the 0-100 plumbing-health composite the regime overrides rebalance.
- Alignment — orthogonal view: do the 12 signal categories agree with price direction? (
news_sentimentflag-gated by default; 11 active without the flag.) - Live regime classifier code:
app/signals/regime.py:classify_regime().