Crypto vol surface, skew & exotics · SVI Jump-Wings calibrated on option mid prices
Connecting to market data…
Volatility smile
Mid IV recomputed from bid/ask prices · SVI-JW curve
Market mid SVI-JW
RR = IV put − IV call · Fly = (IV put + IV call) / 2 − IV ATMF. Absolute deltas.
Tenor
Future
IV ATMF
RR 25Δ (P−C)
RR 10Δ (P−C)
Fly 25Δ
Fly 10Δ
Extrapolated
Pricer
Surface price and IV for a listed expiry, a standard tenor or a custom date.
Choose an expiry and enter a strike or a delta.
Calibration SVI-JW
—
Parameters: ATM variance, ATM skew, put/call wing slopes and minimum variance. Fit on total variance (w=IV²×T).
Quotation data
At each strike, the smile keeps the call/put side with the tightest usable IV spread; quotes that are too wide or at the numerical floor are excluded from the fit.
Contract
Strike
Mid price
IV bid
IV ask
IV mid price
IV used
Delta BS
OI
Fit SVI-JW
Normalised smiles by expiry · computed points
Full table of every listed SVI-JW smile, from 1Δ to 99Δ.
Expiry
Call-equivalent delta
Absolute put delta
Implied strike
IV SVI-JW
Normalised smiles by tenor · computed points
IVs interpolated or extrapolated by tenor and delta. Deltas 1–5Δ, then 5Δ steps up to 95Δ, then 96–99Δ.
STRATEGY WORKSPACE
Option Pricer
Surface prices and Greeks per leg, for standard strategies or custom multi-leg structures.
Strategy assistant · Goal Seek
Describe the strategy in plain words (English or French). The assistant fills the option legs below and can solve an amount, strike or delta for a target.
Select a template or add legs.
Choose a standard package or build a custom portfolio. Set BUY/SELL and an amount for each leg. Fly is defined here as long one 25Δ (or 10Δ) put and call, short one ATM put and call.
Option legs
Inputs are sand colored; live and model outputs are teal colored. Delta strikes use absolute delta; the implied strike is shown below the input.
Portfolio summary
Add at least one valid leg to see the net portfolio metrics.
Price (TV) uses the expiry ATMF volatility; Price (MV) uses the fitted surface IV at the selected strike. Leg prices scale with Amount; net premium and Greeks also apply BUY/SELL. Net transaction delta (NTD) is calculated per exchange convention as Black-Scholes delta minus option mark price and summed by underlying.
SPOT · BTC & ETH · REALISED
Historical Realised Vol
Close-to-close realised volatility, annualised, for 1D to 12M tenors — current term structure and full rolling history.
Range
Open this page to load the price history…
Realised vol term structure
Current realised vol by tenor.
Historical realised volatility
Rolling realised vol per tenor, one point per day (UTC close). Tap a tenor to show or hide it.
Zoom: range buttons, From/To dates, drag the window in the strip above (handles resize it), or drag across the chart with a mouse · double-click resets to all history.
Methodology
Data. Spot USD candles pulled server-side from public exchange APIs (no key): Coinbase Exchange BTC-USD / ETH-USD first, falling back to Bitstamp BTC/USD · ETH/USD, then Binance BTCUSDT · ETHUSDT. Daily closes from 2015 (BTC) and 2016 (ETH); each tenor’s rolling history starts once its window is full, so e.g. BTC 9M and 12M start in 2016. Candles are cached on the server and refreshed every 30 minutes; only completed candles are used.
Returns. Close-to-close log returns r = ln(Ct/Ct−1) on UTC daily closes (00:00 UTC). A missing candle is carried forward (zero return).
Estimator. Sample standard deviation of the last N returns (demeaned, N−1), annualised with √365 because crypto trades every day: 1W = 7, 2W = 14, 1M = 30, 3M = 90, 6M = 180, 9M = 270, 12M = 365 daily returns.
1D. Cannot come from daily closes: it uses the last 24 hourly log returns, annualised with √(24×365). Its history is the trailing-24h value at each day's 00:00 UTC close, built from hourly candles since late 2017.
Percentiles / cone. Follow the selected range (range buttons, From/To, or the strip under the history chart): today's value is ranked against that tenor's rolling values inside the range, and the shaded bands in the term-structure chart are the selected asset's 10–90% and 25–75% ranges over the same dates, the dashed line its median. Pick All for full history.
Sources in use.—
IMPLIED · SPOT REALISED
IV vs Realised Vol
ATMF implied vol from the surface against close-to-close realised vol over the matching window, for every standard tenor — today’s term structure, and a daily history stored at each 00:00 UTC close.
Open this page to load the data…
IV vs RV term structure
Current ATMF implied vol and realised vol by tenor.
IV vs RV history by tenor
Stored ATMF at each daily close against the rolling realised vol of the same window. Pick a tenor.
Stored surface parameters
Every daily snapshot keeps ATMF, RR/Fly 25Δ and 10Δ, spot and the same-close realised vol for each tenor. IV ATMF and realised vol are charted together for the selected tenor.
Latest stored snapshot
Tenor
IV ATMF
RR25
RR10
Fly25
Fly10
RV
Methodology
Implied vol. Straight from this app’s surface (Meta Data page): mid-quote IVs from the exchange, SVI-JW calibrated per listed expiry, then interpolated in total variance at constant delta to the standard tenors 1D, 1W, 2W, 1M, 2M, 3M, 6M, 9M, 12M. ATMF = DNS (delta-neutral straddle strike, the market convention): the 0-delta straddle, i.e. the 50Δ strike with forward delta not premium-adjusted, where d1 = 0 ⇔ k = ln(K/F) = σ²T/2; solved per expiry on the SVI slice (k* = w(k*)/2, ATMF = √(w(k*)/T)) and interpolated in total variance to the tenor. RR (put − call) and Fly ((put + call)/2 − ATMF) at 25Δ and 10Δ are the same numbers as the Meta Data tenor table. * marks a tenor extrapolated beyond the last listed expiry.
Realised vol. Same engine as the Historical Realised Vol page: close-to-close log returns on Coinbase daily closes (00:00 UTC), sample st.dev, √365. Window = tenor length: 1W = 7, 2W = 14, 1M = 30, 2M = 60, 3M = 90, 6M = 180, 9M = 270, 12M = 365 daily returns. 2M is not on the RV page; it is computed here the same way (60 daily returns). 1D = last 24 hourly returns, √(24×365).
Comparison. Today’s IV is forward-looking, RV is backward-looking over the same horizon; IV − RV is in vol points ((IV − RV) × 100). It is a snapshot comparison, not a variance-risk-premium estimate (that would compare today’s IV with the RV realised over the next window).
Daily snapshot. The server takes one snapshot per asset just after every 00:00 UTC close — the same close the realised vols use — and fills in the same-close RV for each tenor. If the server was down at the close it catches up on restart and marks the row late with its delay. Stored per tenor: ATMF (DNS), RR25, RR10, Fly25, Fly10, SVI-JW (v, ψ, p, c, ṽ), tenor forward, spot, RV, timestamps; plus each listed expiry’s raw SVI and SVI-JW calibration. Closes stored before 22 Oct 2026 used ATMF at k = 0 (K = F); their ATMF and Fly were recomputed as DNS from the stored SVI parameters.
SVI-JW per tenor. The calibration is per listed expiry; for a standard tenor, its interpolated 99-point delta smile is mapped to log-moneyness k = ½σ²T − σ√T·N⁻¹(Δ) and refitted with the app’s own SVI calibrator, then converted to JW (v is the SVI-JW variance at k = 0, so √v is close to, not equal to, the DNS ATMF). Tenor forward: ln(F/S) interpolated linearly in time between listed expiries.
Backfill. None: the IV history of every tenor starts with the stored snapshots. The exchange’s DVOL 30-day index is still stored (DVOL CSV below) but is not charted.
Storage & API. Each snapshot is written to a Cloudflare D1 database and to a file on the app server; either restores the other. Approved users can download: history CSV (one row per close, asset and tenor; ?asset=BTC|ETH|ALL&tenor=1M), full snapshots JSON (incl. per-expiry calibrations), DVOL CSV.