Live Dashboard

Regime Classifier

Daily cross-asset risk-on / risk-off composite. Three independent panels — macro, on-chain, and an equity factor panel — recomputed every 24 hours from open data with point-in-time inverse-correlation weights.

Live Composite

Daily regime classification

As of 2026-07-05
Top-line regime
Risk-on
composite 0.55 · 58th pct of last 3y
Macro index
0.60
risk-offrisk-on
On-chain index
0.34
risk-offrisk-on
Equity factor index
0.72
risk-offrisk-on
Full historyrisk-offneutralrisk-on

Macro panel

Indicator24moLastSignedWt
10y–2y yield curveSign +1 — rising 10y–2y yield curve reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
FRED · level · sign +1
0.35%586.7%
Real 10y yieldSign −1 — rising Real 10y yield reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
FRED · level · sign -1
2.25%67.7%
5y breakeven inflationSign +1 — rising 5y breakeven inflation reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
FRED · level · sign +1
2.24%249.2%
HY OAS credit spreadSign −1 — rising HY OAS credit spread reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
FRED · level · sign -1
2.75%8722.7%
DXY (trade-weighted USD)Sign −1 — rising DXY (trade-weighted USD) reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
FRED · level · sign -1
119.298610.0%
Initial jobless claimsSign −1 — rising Initial jobless claims reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
FRED · level · sign -1
215,0006923.0%
VIXSign −1 — rising VIX reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
Yahoo · level · sign -1
15.81587.2%
Copper / Gold ratioSign +1 — rising Copper / Gold ratio reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · level · sign +1
0.00153613.5%

On-chain panel

Indicator24moLastSignedWt
Total DeFi TVLSign +1 — rising Total DeFi TVL reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
DefiLlama · level · sign +1
$74.42B258.5%
Total stablecoin floatSign +1 — rising Total stablecoin float reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
DefiLlama · level · sign +1
$309.31B8810.1%
BTC active addressesSign +1 — rising BTC active addresses reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Blockchain.com · level · sign +1
434,728514.2%
ETH active addressesSign +1 — rising ETH active addresses reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Coinmetrics · level · sign +1
1.03M9614.1%
BTC MVRVSign +1 — rising BTC MVRV reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Blockchain.com · level · sign +1
0.0%
BTC / ETH ratioSign −1 — rising BTC / ETH ratio reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
Yahoo · level · sign -1
35.551914.2%
ETH 50d/200d trendSign +1 — rising ETH 50d/200d trend reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · trend_50_200 · sign +1
1788.291415.3%
New DEX pools (24h)Sign −1 — rising New DEX pools (24h) reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
GeckoTerminal · level · sign -1
100500.0%
DeFi TVL growth (90d)Sign +1 — rising DeFi TVL growth (90d) reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
DefiLlama · change90 · sign +1
-20.1%2014.0%
Stablecoin float growth (90d)Sign +1 — rising Stablecoin float growth (90d) reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
DefiLlama · change90 · sign +1
-1.9%109.5%

Equity factor panel

Indicator24moLastSignedWt
S&P 500 50d/200d trendSign +1 — rising S&P 500 50d/200d trend reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · trend_50_200 · sign +1
7483.247615.2%
Equity breadth (IWM/SPY)Sign +1 — rising Equity breadth (IWM/SPY) reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · level · sign +1
0.39967912.9%
High-beta vs low-volSign +1 — rising High-beta vs low-vol reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · level · sign +1
1.92699614.8%
Momentum factorSign +1 — rising Momentum factor reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · level · sign +1
0.42509810.1%
Growth vs valueSign +1 — rising Growth vs value reads as risk-on, so the percentile is used as-is. "Signed" column has the same orientation as "high = risk-on" across every indicator.
Yahoo · level · sign +1
0.49092413.3%
Utilities leadershipSign −1 — rising Utilities leadership reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
Yahoo · level · sign -1
0.06148412.0%
Staples vs discretionarySign −1 — rising Staples vs discretionary reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
Yahoo · level · sign -1
0.72576711.3%
Shiller CAPE (cyclically adjusted P/E)Sign −1 — rising Shiller CAPE (cyclically adjusted P/E) reads as risk-off, so we flip the percentile (1 − pctile) before averaging. That keeps "Signed" oriented "high = risk-on" across every indicator.
shiller_cape · level · sign -1
30.815010.4%

Predictive power & alignment

Spearman ρ · trailing ~11.8y
Index → forward returnSPX 30dSPX 90dSPX 180dETH 30dETH 90dETH 180d
Composite-0.05-0.00+0.04+0.06+0.05-0.03
Macro-0.15-0.17-0.22+0.01-0.05-0.24
On-chain+0.01+0.04+0.12+0.07+0.12+0.11
Equity factor+0.02+0.11+0.19+0.05+0.05+0.02
Index ↔ current price (alignment)SPX nowETH now
Composite+0.26+0.38
Macro+0.54+0.61
On-chain-0.16+0.08
Equity factor+0.26+0.28

Forward: ρ = rank correlation between today’s index level and the asset’s log return over the next {30, 90, 180} calendar days, evaluated daily over the trailing window. The predictive measure.

Alignment: ρ between today’s index and today’s log-price. A sanity check, not a prediction — does the panel track the asset right now? Note that price-derived indicators (SPX_TREND, IWM_SPY in macro; BTC/ETH ratio, ETH_TREND in on-chain) inflate this by construction.

Cyan = ρ ≥ +0.15, amber = ρ ≤ −0.15, dim = |ρ| < 0.15. Hover any cell for n. Effective independent obs ≈ n / horizon — short-horizon numbers are more trustworthy than 180d.

Backtest · ETH / cash

10bps per rebalance · in-sample 2018–Jan 2024 · out-of-sample Feb 2024–
risk_off · 100% cashneutral · 50% cash / 50% ETHrisk_on · 100% ETH
Strategy×CAGRIn-sampleOut-of-sampleSharpeMax DDTrades
Composite bucket
Default rule on the published composite.
9.06+31.1%+61.2%-19.6%0.76-72.4%86
Macro bucket
Macro panel only.
5.95+24.5%+45.8%-14.4%0.68-70.5%110
On-chain bucket
On-chain panel only.
3.82+17.9%+28.4%-3.5%0.59-78.0%105
Equity factor bucket
Equity factor panel only (only present in /regime_eq).
14.48+38.9%+69.2%-13.2%0.87-72.0%64
Conservative (N-panel)
Any panel off → off; all panels on → on; else neutral.
12.17+35.9%+59.0%-6.1%0.94-52.9%98
Aggressive (N-panel)
Net sum > 0 → on, < 0 → off, = 0 → neutral.
13.99+38.3%+71.2%-16.6%0.85-73.1%109
Buy-and-hold ETH
Reference: 100% ETH.
2.32+10.4%+19.5%-9.9%0.54-94.0%
All-stables
Reference: 100% DTB3 yield.
1.25+2.6%+1.9%+4.3%26.93-0.0%
Equity curves · log scalerisk-offneutralrisk-on

Out-of-sample window starts 2024-02-01. Risky legs earn each asset’s spot return; cash leg earns the daily-compounded DTB3 (3-month T-bill) yield. Transaction cost = ½ × Σ|Δw| × 10 bps charged only when the bucket changes. Chart background is shaded by composite regime (cyan = risk-on, amber = risk-off).

Reading this honestly: a strategy that beats the HODL baseline on Sharpe or max drawdown but loses on CAGR is doing risk management, not alpha. A strategy that beats on CAGR is either (a) catching real signal or (b) overfit — the in-sample / out-of-sample split is the tell. Big gap = overfit; consistent = plausible signal. None of this controls for path-dependence across the single 8y window.

Backtest · SP500 / cash

10bps per rebalance · in-sample 2018–Jan 2024 · out-of-sample Feb 2024–
risk_off · 100% cashneutral · 50% cash / 50% SP500risk_on · 100% SP500
Strategy×CAGRIn-sampleOut-of-sampleSharpeMax DDTrades
Composite bucket
Default rule on the published composite.
2.18+10.0%+9.8%+10.4%0.97-21.3%86
Macro bucket
Macro panel only.
1.57+5.7%+4.7%+7.8%0.70-15.8%110
On-chain bucket
On-chain panel only.
1.54+5.5%+5.3%+5.9%0.51-34.7%105
Equity factor bucket
Equity factor panel only (only present in /regime_eq).
2.19+10.1%+7.8%+15.2%0.83-26.8%64
Conservative (N-panel)
Any panel off → off; all panels on → on; else neutral.
1.47+4.8%+5.5%+3.2%0.77-14.4%98
Aggressive (N-panel)
Net sum > 0 → on, < 0 → off, = 0 → neutral.
1.89+8.1%+7.0%+10.5%0.72-31.0%109
Buy-and-hold SP500
Reference: 100% SP500.
2.78+12.8%+10.1%+19.0%0.72-33.9%
All-stables
Reference: 100% DTB3 yield.
1.25+2.6%+1.9%+4.3%26.94-0.0%
Equity curves · log scalerisk-offneutralrisk-on

Out-of-sample window starts 2024-02-01. Risky legs earn each asset’s spot return; cash leg earns the daily-compounded DTB3 (3-month T-bill) yield. Transaction cost = ½ × Σ|Δw| × 10 bps charged only when the bucket changes. Chart background is shaded by composite regime (cyan = risk-on, amber = risk-off).

Reading this honestly: a strategy that beats the HODL baseline on Sharpe or max drawdown but loses on CAGR is doing risk management, not alpha. A strategy that beats on CAGR is either (a) catching real signal or (b) overfit — the in-sample / out-of-sample split is the tell. Big gap = overfit; consistent = plausible signal. None of this controls for path-dependence across the single 8y window.

Backtest · ETH + SP500 + cash

10bps per rebalance · in-sample 2018–Jan 2024 · out-of-sample Feb 2024–
risk_off · 100% cashneutral · 50% cash / 25% ETH / 25% SP500risk_on · 50% ETH / 50% SP500
Strategy×CAGRIn-sampleOut-of-sampleSharpeMax DDTrades
Composite bucket
Default rule on the published composite.
6.26+25.3%+39.2%-2.5%0.89-44.9%86
Macro bucket
Macro panel only.
4.21+19.3%+28.9%-0.7%0.75-41.0%110
On-chain bucket
On-chain panel only.
3.45+16.4%+22.2%+4.0%0.65-52.6%105
Equity factor bucket
Equity factor panel only (only present in /regime_eq).
7.69+28.5%+40.2%+4.1%0.97-42.9%64
Conservative (N-panel)
Any panel off → off; all panels on → on; else neutral.
5.04+22.0%+32.6%+0.2%1.01-34.1%98
Aggressive (N-panel)
Net sum > 0 → on, < 0 → off, = 0 → neutral.
7.54+28.2%+42.4%-0.3%0.92-45.4%109
50/50 ETH + SP500 HODL
Reference: always max-risk.
4.76+20.1%+24.6%+9.1%0.63-73.3%
All-stables
Reference: 100% DTB3 yield.
1.25+2.6%+1.9%+4.3%26.94-0.0%
Equity curves · log scalerisk-offneutralrisk-on

Out-of-sample window starts 2024-02-01. Risky legs earn each asset’s spot return; cash leg earns the daily-compounded DTB3 (3-month T-bill) yield. Transaction cost = ½ × Σ|Δw| × 10 bps charged only when the bucket changes. Chart background is shaded by composite regime (cyan = risk-on, amber = risk-off).

Reading this honestly: a strategy that beats the HODL baseline on Sharpe or max drawdown but loses on CAGR is doing risk management, not alpha. A strategy that beats on CAGR is either (a) catching real signal or (b) overfit — the in-sample / out-of-sample split is the tell. Big gap = overfit; consistent = plausible signal. None of this controls for path-dependence across the single 8y window.

Composite = 0.5 × macro + 0.5 × onchain. Each panel is a weighted mean of sign-aligned 3y rolling percentile ranks; weights within a panel are inversely proportional to each indicator’s mean absolute correlation with the rest of the panel. Bucket thresholds: composite percentile <33 = risk-off, >67 = risk-on.


Methodology

How it works

  • Macro panel (8): 10y–2y curve, real 10y, 5y breakeven, HY OAS, DXY, initial jobless claims, VIX, copper/gold — sources: FRED & Yahoo.
  • On-chain panel (10): DeFi TVL (level + 90d growth), stablecoin float (level + 90d growth), BTC/ETH active addresses, BTC MVRV, BTC/ETH ratio, ETH 50d/200d trend, new DEX pools per 24h — sources: DefiLlama, blockchain.com, Coinmetrics, Yahoo, GeckoTerminal.
  • Equity factor panel (8): high-beta vs low-vol (SPHB/SPLV), momentum (MTUM/SPY), growth vs value (IWF/IWD), utilities leadership (XLU/SPY), staples vs discretionary (XLP/XLY), S&P 500 50d/200d trend, IWM/SPY breadth, Shiller CAPE — sources: Yahoo Finance and the Shiller spreadsheet mirror. Sign-stable equity risk-appetite + style + valuation signals.
  • Normalization: rolling 3-year percentile rank per indicator, sign-aligned so +1 always means risk-on.
  • Within-panel weighting: point-in-time inverse-correlation. Each day’s weights use only the trailing 3-year window — no look-ahead. Redundant inputs get auto-discounted without manual sub-grouping. 25% per-indicator cap.
  • Composite: arithmetic mean of all three panel indices, then 3y rolling percentile, bucketed at 0.33 / 0.67.
  • Smoothing: the published regime label requires 5 consecutive trading days in the new bucket before switching, OR a single-day move in composite percentile exceeding of its trailing 1y daily-change distribution (with direction consistent with the new bucket). Filters out boundary-noise flips while still responding quickly to legitimate fast regime shifts.
  • Storage: long-format CSV (atomic write) committed daily to git; current snapshot in public/data/regime-eq-snapshot.json. No database.

Why three panels

The macro panel reads upstream causes — monetary policy, credit conditions, the labor market. The on-chain panel reads crypto-native flows and network health. The equity factor panel reads the behavioral response of price-setters who have already digested the upstream inputs and are committing capital. Three independent viewpoints on the same risk regime, blended into one composite. Walk through the comparison and per-panel attribution in the research write-up.

For the original two-panel classifier (macro + on-chain only, kept as a reference) see /regime_2panel. For the full prior-art survey and design-space mapping, see the Regime Detection research brief.