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 SABR 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 SABR calibration.

SABR Calibration

For each (asset, expiry, snapshot) combination with sufficient cleaned quotes, we calibrate a SABR model (Hagan et al. 2002) to the implied volatilities. SABR fits the volatility smile with four parameters and provides a smooth, arbitrage-free surface for interpolation between quoted strikes.

SABR Parameters

SABR Lognormal Formula (β=1)

σ(K, F) = A × (z / χ(z)) × B

where:
A = α / [(FK)(1−β)/2 × (1 + (1−β)²/24 · ln²(F/K) + (1−β)⁴/1920 · ln⁴(F/K))]
B = 1 + [((1−β)²α²)/(24(FK)1−β) + (ρβνα)/(4(FK)(1−β)/2) + ((2−3ρ²)ν²)/24] × T
z = (ν/α) × (FK)(1−β)/2 × ln(F/K)
χ(z) = ln[(√(1 − 2ρz + z²) + z − ρ) / (1 − ρ)]
Numerical safeguards: when F ≈ K, we use the ATM limiting form σ_ATM = α/F1−β × B.

Calibration is performed independently per expiry using least-squares minimization on the difference between SABR-implied and market vols.

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 SABR 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* in total-variance space:
    σ²(K, T*) · T* = w · σ²(K, T₁) · T₁ + (1 − w) · σ²(K, T₂) · T₂
    where w = (T₂ − T*) / (T₂ − T₁)
    This "linear-in-total-variance" interpolation preserves no-arbitrage between adjacent maturities at a fixed strike.

If the queried maturity is beyond the longest calibrated expiry, we extrapolate using the last expiry's SABR parameters evaluated at the queried maturity (flat-parameter extrapolation). If a particular expiry's calibration failed (e.g. insufficient strikes after cleansing), we use the nearest neighboring expiry's SABR parameters as a substitute.

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 SABR-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 SABR 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: SABR 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

For Pro and Ultra tiers, 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.