Back to dashboard

Methodology

Every number on the dashboard is computed from the sources below at request time. Nothing is hardcoded, cached silently, or estimated when a source is missing — unavailable metrics say so and are excluded from the composite model, which lowers its confidence.

Data sources

MetricSourceStatus
Spot price, OHLCV, structure, support/resistanceBinance Spot (fallback: OKX)live
Funding, open interest, quarterly basis, leverage riskBinance USD-M Futureslive
Retail sentiment proxyAlternative.me Fear & Greed Indexlive
Market capitalisationCoinGecko public APIlive / best-effort
Spot ETF net flowsNot configured — requires a licensed ETF flow providerunavailable
MVRV Z-Score, NUPL, exchange netflowsNot configured — requires an on-chain provider (Glassnode / CryptoQuant / Coin Metrics)unavailable

Indicator formulas

Price structure (0-100)
Signed score from price vs the 200 SMA (±2), price vs the 50 SMA (±1), 20 SMA vs 50 SMA (±1), 50 SMA vs 200 SMA (±1) and higher-high/higher-low swing confirmation (±1), normalised to 0-100. ATR(14) provides volatility context.
Support & resistance
Swing pivots (5-bar symmetric window) over ~400 daily candles, clustered with a tolerance derived from ATR%, then weighted by touch count, volume and recency. The nearest meaningful level below/above spot is returned with a confidence score from history depth and touch counts.
Funding rates
Latest perpetual settlement ranked as a percentile against the trailing 500 settlements — no single fixed threshold. Hot above p85.
Open interest
Current OI vs its 30-day distribution plus 7-day change. Rising OI with flat or falling price is flagged as leverage buildup.
Futures basis
((futures / spot) − 1) × (365 / days to expiry) × 100, using the current-quarter contract.
Leverage / liquidation risk
0.35 × funding percentile + 0.30 × OI percentile + 0.20 × OI acceleration + 0.15 × basis risk, renormalised over available inputs.
MVRV Z-Score & NUPL
MVRV Z = (market cap − realized cap) / stdev(market cap); NUPL = (market cap − realized cap) / market cap. Realized cap requires an on-chain provider, so these are reported as unavailable rather than estimated.

Composite cycle risk model

  • onchain25%
  • derivatives20%
  • structure15%
  • institutional15%
  • retail15%
  • exhaustion10%

Each category is normalised to 0-100 and combined by weight. Bands: 0-20 low risk / accumulation, 20-40 healthy bull market, 40-60 elevated caution, 60-75 high distribution risk, 75-100 extreme cycle-top risk. Display score = 10 − risk/10, so a high gauge reading means low cycle-top risk.

Limitations

  • The model is an interpretation of current, observable conditions. It is not a forecast and not financial advice.
  • With on-chain valuation and ETF flow inputs unavailable, confidence is capped well below 100% and no cycle-top conclusion should be treated as definitive.
  • Derivatives inputs come from one venue's perpetual and quarterly markets, so they represent that venue's positioning rather than the whole market.
  • The historical risk chart is a reproducible structural proxy, not a point-in-time replay of the full model; it must not be read as a backtest.
  • Thresholds and weights in src/lib/market/config.ts are configurable and were not optimised to fit past cycle tops.