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
| Metric | Source | Status |
|---|---|---|
| Spot price, OHLCV, structure, support/resistance | Binance Spot (fallback: OKX) | live |
| Funding, open interest, quarterly basis, leverage risk | Binance USD-M Futures | live |
| Retail sentiment proxy | Alternative.me Fear & Greed Index | live |
| Market capitalisation | CoinGecko public API | live / best-effort |
| Spot ETF net flows | Not configured — requires a licensed ETF flow provider | unavailable |
| MVRV Z-Score, NUPL, exchange netflows | Not 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.