A system that watches options, perpetuals, and order books across 3 exchanges — and tells you what's happening, what's mispriced, and what's dangerous.
Navigate: arrow keys · Overview: press O · Vertical slides: down arrow within sections
Vol surfaces, skew, carry, gamma — tells you how expensive protection is and where traders are hedging
Normally siloed from perps
Funding rates, liquidations, order flow, depth — tells you where leverage is building and when it might snap
Normally has no vol context
Order book shape, trade flow, ML predictions — tells you what's likely to happen in the next 30 seconds to 5 minutes
Normally disconnected from both
Vol-of-vol · 2 signals
"How nervous is the market about volatility itself?" When VVIX is high, even the vol market is uncertain — regime shifts happen.
Variance risk premium · 2 signals
"Are option sellers making or losing money right now?" Tracks a synthetic straddle in real-time.
12 dashboards · 8 composite scores
"What's the options market telling us about risk and positioning?" Surfaces, carry, skew, gamma, regimes.
8 dashboards · 5 scores · 6 regimes
"Where is leverage building and is it about to blow up?" Funding, cascades, toxicity, depth.
ML model · 8 signals (4 horizons × 2 assets)
"What is the order book saying price will do next?" ML fusion model with cost-awareness and regime gating.
Volatility measures how much price moves. VVIX measures how much volatility moves. When VVIX spikes, even the people pricing risk are uncertain.
How much DVOL has been swinging around over 7/14/30 days.
EWMA-weighted variance. Reacts faster to recent moves.
Vol is stable, options priced consistently. Good conditions for selling vol (straddles, strangles).
Supports short-vol trades
Vol is unstable, the market doesn't trust its own pricing. Regime change likely. Reduce size or buy protection.
Warns against short-vol positions
Razor simulates a real trade: a delta-hedged 7-day ATM straddle, rolled every hour. Tracks whether premium collected exceeds actual moves — in real-time.
Cumulative P&L of a synthetic straddle. Option reval + hedge cost + roll cost.
Cumulative IV² minus RV² in basis points.
Razor z-scores the cumulative VRP over 30 days and classifies into trade bands:
VRP is abnormally positive. Options are overpriced relative to history. Sell vol — straddle sellers are getting paid well.
VRP is near its average. No clear edge for either side. No directional vol trade.
VRP is abnormally negative. Realized vol is exceeding implied. Buy vol — straddle buyers are profiting.
12 dashboards, each answering a different question. Metrics roll up into 8 composite scores you can trade on.
| Dashboard | The question it answers |
|---|---|
| vol_surface | How expensive are options at each strike and maturity? |
| carry_vrp | Are option sellers getting paid enough for the risk? |
| skew_crash_premium | How much is the market paying for downside crash protection? |
| surface_dislocation | Are any specific options mispriced vs the smooth fitted surface? |
| cross_asset_rv | Is BTC or ETH vol cheap relative to the other? |
| positioning_flow | Where are traders actually positioned? What strikes are crowded? |
| vol_cone | Is today's vol level high or low compared to history? |
| term_structure_momentum | Is near-term vol getting more or less expensive vs long-term? |
| gamma_exposure | How will dealer hedging mechanically push price? |
| funding_context | How does perps funding align with vol stress? |
| straddle_breakeven | Is the market pricing moves correctly vs what actually happens? |
| vol_regime_transitions | Is the vol regime about to shift? |
SSVI model fitted to all Deribit options at target tenors: 7d, 14d, 30d, 60d.
Market's best guess for how much price will move.
60% = expects ~7% move in 7d · 25% = expects ~3% move
Call vol minus put vol at 25-delta. Measures directional fear.
Negative = puts expensive (crash fear) · Positive = calls expensive (upside bid)
Wing vol minus ATM vol. Tail protection cost.
High BF = wings expensive (hedging demand) · Low BF = tails cheap
Carry = implied vol minus realized vol. When IV exceeds RV, sellers collect the difference as profit.
IV(7d) minus RV(7d). The premium sellers are earning now.
Is current carry rich or cheap vs last 30 days?
Shift from "neutral" to "rich" = highest expected return for vol sellers.
Skew measures how much more expensive puts are than calls. When everyone is buying downside protection, skew goes extreme — that's the "crash premium."
25-delta risk reversal, 7-day tenor. The most liquid measure of directional fear.
Is current crash premium extreme vs history?
Extreme panic = puts are rich (fade it). Unwind = complacency (buy protection while it's cheap).
We fit a smooth SSVI surface to all options. Dislocation measures how far actual market prices deviate from this theoretical fit. Big residuals = mispricing.
| atm_residual | How far ATM options deviate from the fit |
| wing_residual | How far OTM puts/calls deviate |
| dispersion_score | Overall surface stress across all tenors |
High dislocation = market stress or illiquidity. Specific strikes are trading away from fair value.
Compares BTC and ETH option markets across multiple dimensions to find relative value opportunities.
| ATM IV spread | Which asset's options are more expensive |
| Skew spread | Which asset has higher crash premium |
| VVIX spread | Which asset's vol is more unstable |
| Carry spread | Which asset's VRP is richer |
| Funding spread | Which asset's perps have more leverage |
When one spread is extreme, it reverts. If BTC vol is abnormally rich vs ETH, you can sell BTC vol and buy ETH vol as a pairs trade — capturing the convergence.
Where are traders positioned?
OI by expiry and moneyness bucket. ATM pinning concentration — how crowded the at-the-money strike is.
Is today's vol high or low vs history?
Ranks current IV and RV as percentiles over trailing windows.
Is near-term vol rising faster than far-term?
Tracks the slope between 7d and 30d IV and its rate of change.
How will dealer hedging push price?
GEX = |gamma| × OI × spot² by strike and expiry.
Is perps leverage aligned with vol stress?
Joins perpetual funding rate z-scores with VVIX to detect dangerous combinations.
Is the market pricing moves correctly?
breakeven = ATM_IV × √(7/365). Compares to actual realized move.
A Markov chain model that tracks which vol state we're in and estimates the probability of transitioning to the next state.
Quiet regime. Realized vol low, IV steady. Good for short-vol strategies.
Vol is rising. Realized is outpacing implied. Mean-reversion strategies break down.
Vol is compressing after a spike. Premium is still elevated but actual moves are shrinking. Best environment for vol sellers.
Each score distills a dashboard into a single number. Positive = one direction, negative = the other.
| Score | What it tells you | How to act on it |
|---|---|---|
| vol_carry_score | Is carry rich or cheap? | > +1: sell vol · < -1: buy vol |
| skew_stress_score | Is crash premium overdone? | > +1: sell puts · < -1: buy puts |
| surface_dislocation_score | Are there surface arbitrage opportunities? | > 2: look for specific-strike arbs |
| cross_asset_vol_score | Is BTC or ETH vol rich relative to the other? | Extreme = pairs trade opportunity |
| vol_regime_score | Long vol or short vol environment? | Positive: short vol bias · Negative: long vol bias |
| funding_vol_context_score | Is funding + vol stress aligned? | > 2: cascade risk from vol-funding feedback |
| breakeven_gap_score | Are straddles mispriced vs realized? | Positive: realized > implied, buy gamma |
| term_structure_momentum_score | Is near-term stress building? | Steepening = front-end pressure building |
Perpetual futures are the most leveraged instrument in crypto. 8 dashboards monitor: funding, cascades, toxicity, depth, positioning. When these break, prices move violently.
| Dashboard | The question it answers |
|---|---|
| funding_basis_carry | How much are longs paying to hold leverage? Is it profitable to arb? |
| liquidation_cascade | Are liquidations concentrated? Is a chain reaction building? |
| order_flow_toxicity | Are informed traders front-running? Is flow toxic to market makers? |
| oi_price_divergence | Is leverage growing in a direction that disagrees with price? |
| cross_venue_price_discovery | Which exchange is leading? Are there cross-venue arb opportunities? |
| depth_resilience | Can the order book absorb large orders without slippage? |
| vol_microstructure | Is high-frequency vol signal or just noise? |
| cum_delta_momentum | Is buying or selling pressure accelerating? |
Every 8h, perps settle a funding rate: longs pay shorts (or vice versa). High funding = longs paying through the nose. Both an income opportunity and warning sign.
| basis_bps | Perp price vs spot, in basis points. Positive = perp is expensive. |
| funding_rate | 8h funding rate. Positive = longs paying shorts. |
| carry_annualized | What you'd earn annualized from just collecting funding. |
| carry_zscore | Is current carry rich or cheap vs recent history? |
Forced sells push price further, triggering more liquidations. Cascade = domino effect. Detected in real-time.
| liq_intensity_zscore | Liquidation volume abnormal? z > 2 = cascade active |
| liq_asymmetry | One-sided? ±0.7 = cascade direction locked |
| cascade_risk_score | 0.5×crowding + 0.3×liq + 0.2×carry pressure |
Normal. Trade freely.
Elevated. Reduce position size.
Critical. Hedge or exit.
Toxic flow means one side has better information. When VPIN (volume-synchronized probability of informed trading) spikes, someone knows something you don't — and you're on the wrong side of the trade.
| vpin_50 | |buy_vol - sell_vol| / total_vol, smoothed. High = one-sided flow. |
| toxic_flow_zscore | Is current toxicity extreme vs 4h/24h baseline? |
| large_trade_ratio | Proportion of volume from large orders. High = whale activity. |
Open interest (OI) measures total leverage in the system. When OI rises but price doesn't follow, someone is building a large position that hasn't moved the market yet — and it will.
| OI up + price up | Healthy. New longs entering, price confirming. Trend is supported. |
| OI up + price flat | Warning. Leverage building but price isn't moving. One side will break. |
| OI up + price down | Bearish. New shorts entering and winning. Or longs trapped. |
| OI down + price up | Short squeeze. Shorts covering, pushing price up. Bounce is fragile. |
Second derivative: is leverage buildup accelerating? Accelerating OI = approaching a breakpoint. When it stops accelerating, the move starts.
Which exchange leads price?
venue_dislocation_bps — venues disagree by >10bps = arb opportunity
convergence_half_life — how fast the arb closes
Can the book absorb a big order?
depth_recovery_speed — slow recovery = fragile. spread_zscore — wide = crisis
Regime: tight / normal / wide / stress
Is the volatility real or just noise?
vol_signature_ratio = RV_5s / RV_5m. High = noise (mean-revert), low = real trends (follow)
Is buying pressure accelerating?
cum_delta_acceleration — peaks precede reversals. absorption_ratio — low = volatility spike coming
| Score | What it tells you | How to act on it |
|---|---|---|
| carry_score | Is funding/basis carry rich or cheap? | > +1: collect carry · > +2: but beware, longs are crowded |
| cascade_risk_score | How likely is a liquidation cascade? | < 1: safe · 1-2: reduce size · > 2: hedge or exit |
| toxicity_score | Is the market safe to trade in? | < 0.8: healthy, execute freely · > 1.5: toxic, avoid |
| positioning_score | Is leverage excessive for the price move? | > 1: fragile, expect mean reversion |
| fragility_score | Is the order book fragile? | < 0.5: resilient · > 1.5: one big order breaks the market |
An ML model that reads the order book, trade flow, and cross-market context to predict price direction — at 30s, 1m, 2m, and 5m horizons. For both BTC and ETH.
The model doesn't predict raw direction. It predicts: "will the move be big enough to cover trading costs?"
Labels are: forward_return ± 3bps round-trip cost. If price moves 2bps, that's "flat" — because you can't profit after costs.
Every prediction passes through 4 gates before becoming a signal:
The model knows what regime it's in and only fires when the regime matches:
| calm_mean_reversion | Low vol, low flow — fade the book imbalance |
| calm_trend | Low vol, normal flow — follow momentum |
| vol_expansion | High vol — signals are less reliable, wider gating |
| thin_liquidity_stressed | Book stressed — signals blocked, too risky |
| prob_up | 0.52 |
| prob_flat | 0.31 |
| prob_down | 0.17 |
| expected_edge_bps | +0.6 |
| tradability_score | 0.45 |
| confidence_bucket | medium |
| blocked_reason | None |
You never have to ask "can I trust this?" — the system tells you. Quality flags gate downstream consumption.
Good fit, sufficient data. Trust and use.
Building baseline. No historical context yet.
Below threshold. Don't use.
Optimizer failed. Data unreliable.
< 25% strikes covered. Extrapolating.
Maturity ordering broken. Arb-free violated.
Walk through the signals step by step. Each one is a checkpoint.
1. vol_carry_score — Is carry rich?
score > +1 = sellers are getting paid well
2. btc_vvix / eth_vvix — Vol-of-vol low?
Low VVIX = stable environment for selling
3. skew_stress_score — Crash premium contained?
Not in "panic" regime = puts aren't screaming danger
4. breakeven_gap_score — Realized < implied?
Negative gap = straddle sellers winning
5. cascade_risk_score — Market stable?
score < 1 = no liquidation cascade building
6. vol_regime_score — Short-vol regime?
Positive score = yes
1. breakeven_gap_score positive
Realized moves exceeding what options priced. Straddle buyers winning.
2. VVIX rising
Vol-of-vol expanding = uncertainty growing, more vol ahead.
3. term_structure steepening
Near-term vol rising faster than far-term. Front-end pressure.
4. gamma_exposure negative
Dealers short gamma — they amplify moves, trends will run.
cascade_risk_score > 2
Liquidations concentrating. Chain reaction building.
toxicity_score > 1.5
Informed traders active. You're on the wrong side.
fragility_score > 1.5
Book can't absorb pressure. Depth thin, recovery slow.
funding_vol_context > 2
High leverage + unstable vol = maximum danger.
| Overview | All signal families at a glance — what's hot, what's safe |
| Signals | VVIX + Razor signals with time series charts |
| Options | 12 options dashboards, 8 composite scores |
| Perps | 8 perps dashboards, 5 composite scores, regimes |
| Microstructure | ML predictions, features, regime state, calibration |
| Datasets | Browse any of the 36 raw datasets |
| Runs | When each pipeline last ran, status, errors |
| Engines | Rust live engine status, book quality |
WebSocket feed pushes updates as they happen. No refresh needed — the dashboard updates live.
Next.js 15, React 19, TypeScript, Recharts. Terminal aesthetic — monospace, flat panels, keyboard navigation.
Everything in the dashboard is also available via REST API and WebSocket streaming.
/api/v1/signals
/api/v1/signals/{id}/latest
/api/v1/signals/{id}/series
/api/v1/options/dashboards
/api/v1/options/{id}/latest
/api/v1/options/{id}/series
/api/v1/options/signals
/api/v1/perps/dashboards
/api/v1/perps/{id}/latest
/api/v1/perps/{id}/series
/api/v1/perps/signals
/api/v1/microstructure/signals
/api/v1/microstructure/features/{asset}
/api/v1/microstructure/regime/{asset}
/api/v1/datasets
/api/v1/datasets/{id}/rows
/api/v1/runs
/api/v1/prices
/api/v1/system/health
/api/v1/engines
WS /api/v1/stream
| If you want to... | Check these | Look for |
|---|---|---|
| Sell vol (straddles/strangles) | vol_carry_score, VVIX, skew_stress_score, breakeven_gap_score, vol_regime_score | Carry rich, VVIX low, skew contained, gap negative, short-vol regime |
| Buy gamma (long straddles) | breakeven_gap_score, VVIX, term_structure_momentum_score, gamma_exposure | Gap positive, VVIX rising, steepening, negative gamma |
| Trade BTC vs ETH vol | cross_asset_vol_score, relative_value spreads | Extreme spread = sell the rich asset's vol, buy the cheap one |
| Collect funding/basis carry | carry_score, carry_zscore, cascade_risk_score | High carry but low cascade risk |
| Scalp microstructure | microstructure signals, tradability_score, blocked_reason | expected_edge > 0, not blocked, confidence medium+ |
| Reduce risk / cut positions | cascade_risk_score, toxicity_score, fragility_score, funding_vol_context_score | Any score > 2 = get out |
| Understand current regime | vol_regime_transitions, regime families, VVIX trend | Transition probabilities + median duration |
Every signal has a z-score, a regime, a quality flag, and a clear interpretation. You don't need to do the math — the system tells you what's normal and what's not.
Options, perps, and microstructure are connected. Funding pressure shows up in vol carry. Cascade risk shows up in skew. The system sees across all three.
Signals pass through quality flags, cost filters, confidence gates, and regime checks before they reach you. If a signal says "trade", it passed all the checks.
Real-time data from 3 exchanges. Rust live engine for order books. Python analytics for signals. Next.js dashboard for visualization. 24/7.