Methodology

How CryptoVol constructs volatility indices, surfaces, constant-maturity history, and Greeks from live crypto options market data.

1. Data Sources and Snapshots

Option chain snapshots are collected from Deribit and OKX — the leading venues for listed options on the assets we cover. For each snapshot we capture the full option chain: bid/ask prices, strikes, maturities, plus underlying spot and futures prices across all listed expiries.

Asset Coverage

Coverage spans BTCETHSOLXRPAVAXTRX

To follow the major liquidity flows in the market, we use coin-collateralized (inverse) options for BTC and ETH — where the contract is denominated and settled in the underlying coin — and USDC/USDT-collateralized (linear) options for SOL, XRP, AVAX, and TRX, where settlement is in stablecoin. This matches where the deepest order books and tightest bid-ask spreads sit for each asset.

Historical depth varies by asset:

Sessions

We capture three snapshots per day, timed to the close of each major global trading session. This gives users a consistent intra-day view of vol levels and term structure across geographies:

2. Vol Surface Calibration

For each snapshot, we construct an arbitrage-free implied volatility surface in four stages: cleaning the raw option chain, implying the forward and yield curves, inverting Black-Scholes to recover implied vols from option premia, and calibrating the SVI model per expiry against those vols.

Data Cleansing

Raw option chains contain stale, one-sided, and arbitrageable quotes that would distort calibration. We apply a series of filters before any fitting:

Forward and Yield Curves

For each option expiry, we find the closest-to-ATM strike with both call and put two-sided quotes and solve for the yield from put-call parity.

r(T) = −ln((S − C + P) / K) / T
F(T) = S × er(T) · T = K + (C − P) × er(T) · T

We prefer the option-implied forward over the listed futures price. The implied forward is, by construction, internally consistent with the option market: using it ensures that subsequent implied vols are arbitrage-free across calls and puts at the same strike. Using a listed futures price instead can introduce a small mismatch between the two markets, producing put-call parity violations and contaminating the calibration.

The implied forward and yield curves are also exposed in the API as additional analytic fields.

Implied Volatility Calculation

Each cleaned option premium is converted to an implied volatility by inverting the Black-Scholes formula. For each strike K and expiry T, we solve numerically for the σ that reproduces the observed market price under the calibrated forward and yield:

Call: C = e−rT × [F · N(d₁) − K · N(d₂)]
Put: P = e−rT × [K · N(−d₂) − F · N(−d₁)]
where d₁ = [ln(F/K) + σ²T/2] / (σ√T), d₂ = d₁ − σ√T

The resulting (strike, vol) pairs form the input to SVI calibration.

SVI Calibration

For each (asset, expiry, snapshot) combination with sufficient cleaned quotes, we calibrate a raw SVI model (Stochastic Volatility Inspired; Gatheral, 2004) to the implied volatilities. SVI parameterizes each expiry's total implied variance as a smooth function of log-moneyness with five parameters, giving an arbitrage-free smile that interpolates cleanly between quoted strikes and extrapolates sensibly into the wings.

SVI Parameters

Each expiry's smile is described by five parameters acting on the log-moneyness k = ln(K/F) (strike relative to the forward):

Raw SVI Formula

w(k) = a + b × [ ρ(k − m) + √((k − m)² + σ²) ]

where:
k = ln(K / F) — log-moneyness (strike relative to the forward)
w(k) = σBS²(k) × T — total implied variance at log-moneyness k
σBS(k) = √( w(k) / T ) — the implied vol returned for that strike
Arbitrage & stability safeguards: σ is floored so the at-the-money curvature stays finite, and the wing slope is bounded to keep each slice free of butterfly (static) arbitrage. The fit is done in forward log-moneyness, so the smile is anchored to the option-implied forward rather than spot.

Calibration is performed independently per expiry by minimizing a relative least-squares error between the SVI and market total variance. The linear parameters are recovered in closed form inside each step of the non-linear optimizer — a quasi-explicit scheme that is fast and robust to poor initial guesses.

3. Vol Interpolation

To answer a query for vol at an arbitrary (strike, maturity) pair, we interpolate along both axes of the calibrated surface:

  1. Strike axis (per expiry). For each calibrated expiry, we evaluate the SVI formula at the target strike using that expiry's fitted parameters. This produces one implied vol per expiry — a slice of the surface at the requested strike.
  2. Time axis. The per-expiry vols (evaluated at the same target strike on both bracketing expiries T₁ and T₂) are interpolated to the target maturity T* linearly in variance:
    σ²(K, T*) = w · σ²(K, T₁) + (1 − w) · σ²(K, T₂)
    where w = (T₂ − T*) / (T₂ − T₁)
    Interpolating the annualized variance (rather than the vol directly) keeps the term structure smooth and stable between calibrated expiries.

If the queried maturity falls beyond the longest calibrated expiry, the implied vol is held flat at the last calibrated expiry's level (flat extrapolation in variance space). A raw SVI slice describes a single expiry and carries no native time dimension, so we do not project its parameters onto a longer maturity. If a particular expiry's calibration failed (e.g. insufficient strikes after cleansing), that expiry is dropped from the term structure and the vol is interpolated across the remaining calibrated expiries.

4. Strike Conventions

We adopt a spot-based convention for both moneyness and delta queries:

Moneyness

moneyness = K / S

where K is the strike and S is the spot price at the snapshot time. moneyness = 1.0 is at-the-money relative to spot. moneyness = 0.95 is a strike 5% below spot (typical OTM put), moneyness = 1.05 is 5% above (typical OTM call).

Delta

Delta queries also use the spot-based convention. The delta is the standard Black-Scholes lognormal delta computed at the SVI-fitted vol with spot as the underlying:

Δ_call = N(d₁), Δ_put = N(d₁) − 1
where d₁ = [ln(S/K) + (r + σ²/2)·T] / (σ·√T)

A 0.25 delta call is the strike where the option's spot delta equals 0.25 (typical OTM call), and a 0.25 delta put is the strike where the put's delta equals -0.25 (typical OTM put). When you query by delta, the API solves for the strike that produces the requested delta under the calibrated SVI vol surface.

Spot is stored alongside each snapshot. The vol-surface and vol-surface/bulk endpoints expose the spot price in their response so users can convert between moneyness, delta, and absolute strike consistently. This convention is intuitive for crypto markets where carry is small relative to volatility, and matches how most crypto practitioners think about strikes.

5. Constant-Maturity Convention

Listed option expiries are discrete and roll forward periodically. For consistent time series suitable for backtesting and regression analysis, we expose data at fixed constant tenors rather than at calendar expiry dates.

Available constant maturities:

For each constant tenor, we publish vol at a grid of fixed strikes — addressable either by moneyness or by delta:

Moneyness grid (K / S)

Delta grid (spot delta magnitude)

Constant-maturity vols are produced by the same vol-interpolation procedure described in Section 3: SVI is evaluated at the requested strike on each bracketing expiry, and the resulting vols are interpolated to the target tenor in total-variance space.

The result: a clean daily time series at, say, 30-day constant maturity 25-delta call, suitable for regression and backtesting without expiry-rolloff artifacts. Available via /v1/vol-history.

6. Volatility Index

The CryptoVol Index is a model-free implied volatility measure following the variance-swap methodology popularized by the CBOE VIX, adapted for crypto options:

VarSwap(T) = (2/T) × Σᵢ (ΔKᵢ / Kᵢ²) · erT · Q(Kᵢ)

where Q(Kᵢ) is the mid-price of the out-of-the-money option at strike Kᵢ.

Constant-maturity indices (7D, 30D) are produced by interpolating the variance swap rate to the target tenor in total-variance space:

VarSwap(T*) · T* = w · VarSwap(T₁) · T₁ + (1 − w) · VarSwap(T₂) · T₂
where w = (T₂ − T*) / (T₂ − T₁)

Index(T*) = √[ VarSwap(T*) ] × 100

Available via /v1/vol-index.

7. Greeks and Analytics

On every plan, the /v1/vol-surface and /v1/vol-surface/bulk endpoints support include_analytics=true, which returns advanced analytics such as spot, forward, yield rate, Black-Scholes option price, and Greeks (delta, gamma, vega, theta) for each queried point.

8. Limitations and Caveats

API Access

All data described above is available via our REST API:

See pricing and full coverage details on the main page, or get an API key at cryptovol.io/api. Questions? Email support@cryptovol.io.