methodology

VIX-family maths,
every step open.

The same variance-swap-replication formula behind Cboe's VIX, Deribit's DVOL, and Volmex's BVIV — applied to a 3-venue crypto options universe with explicit median blending, outlier rejection, and a per-tick confidence score.

01

Methodology base

VolX adopts the Cboe VIX-family methodology — variance swap replication via a strip of out-of-the-money options — formalised in Cboe's 2003 white paper. Same maths family as the equity VIX, Deribit DVOL, and Volmex BVIV.

What VolX computes per 60-second tick:

  • select two expiries bracketing 30 days (near + next)
  • solve the forward via put-call parity at the ATM strike
  • fit the IV surface as a natural cubic spline in log-moneyness
  • apply the Carr-Madan variance integral
  • interpolate in total-variance space to the exact 30-day point
σ²_T  =  (2 e^{rT} / T) · ∫ Q(K) / K² dK  −  (F / K₀ − 1)² / T
02

Per-venue strip

The variance integral runs independently per venue: one strip for Deribit, one for OKX, one for Bybit. Each venue produces its own σ²₃₀d number reflecting only its own order book.

A venue's strip is rejected if it has fewer than 5 strikes with both call and put legs quoted > 0.000000001 USD. Rejected venues are excluded from that 60-second tick and contribute to the confidence score collapse.

03

Median blend

The three venue values are combined by taking the median, not the mean. A single bad venue cannot drag the median around the way it could the mean.

BVOL  =  100 · √median(σ²_dervt,  σ²_okx,  σ²_bybit)

For two surviving venues the median collapses to the simple mean of the two. For one surviving venue the value passes through unchanged. The published value is then 100 · √σ²₃₀d — annualised vol percent.

04

Outlier drop

If a venue's σ²₃₀d deviates from the cross-venue median by more than 5% for 5 consecutive ticks (5 minutes), the engine drops that venue from the blend until its quotes return to consensus.

Availability rollback: if the drop would leave the active set empty (e.g. all three venues simultaneously diverging), the policy reverts — every venue is kept active and the confidence score absorbs the degraded state. The system never publishes a null for a transient quorum collapse.

Why three venues, not two: Volmex BVIV blends two venues (Deribit + OKX). With only two sources no real outlier policy is possible — drop one and you collapse to a single-venue index. VolX's third venue (Bybit) is specifically what makes the 5%/5-tick drop policy viable.

05

Confidence score

Every published index tick carries a [0.0, 1.0] confidence value computed from three multiplied factors:

confidence  =  venue_factor  ×  freshness_factor  ×  strike_factor
venue_factorvenues_live / venues_expected
e.g. 2/3 ≈ 0.667 if one venue is dropped
freshness_factormax(0, 1 − max_quote_age / 60s)
decays linearly as quotes age past 60 s
strike_factormin(1, strip_strikes / 8)
reaches 1 once the strip has ≥ 8 strikes

Multiplicative so two simultaneous degradations compound rather than mask each other. A perfect snapshot (3/3 venues, all quotes fresh, ≥ 8 strikes) yields confidence = 1.0. Downstream consumers can filter, gate, or weight by the score.

06

Filters

Two layers of filtering protect the index from contaminated input.

Normalizer layer (per quote)

  • · Drop if last tick > 5 s old
  • · Drop if ask ≤ bid
  • · Drop if (ask − bid) / mid > 0.30
  • · Drop if mid < intrinsic value (1e-9 tolerance)

Engine layer (per snapshot)

  • · Drop strike if mark_iv ≤ 0.001 or non-finite
  • · Drop strike if either call or put leg is missing for that (strike, expiry)
  • · Reject the expiry if fewer than 5 strikes survive
07

Relationship to Deribit DVOL

DVOL is the closest published reference: same VIX-family methodology, but on a single-venue (Deribit-only) input universe. Restricting VolX to Deribit-only input and running the engine should reproduce DVOL within numerical noise — the canonical correctness check.

Acceptance bar per the PRD: |VolX − DVOL| / DVOL ≤ 2% sustained over 30 consecutive days. Until that window passes, the index is shipped but not yet validated.

Audit it. Run it locally.

The full spec, the reference Python implementation, and the Rust engine that ships the published number are all open.