Volatility index
SQL API
public_data.volatility_index
Minute-resolution OHLC bars of the volatility index published by an exchange. Currently the primary source is Deribit's DVOL for BTC and ETH ā a 30-day forward-looking implied-volatility index analogous to the VIX in traditional finance.
Columns
exchange
LowCardinality(String)
Exchange that publishes the index (deribit)
market
LowCardinality(String)
Underlying asset (BTC, ETH)
timestamp
DateTime64(9, 'UTC')
Bar timestamp
open
Decimal(76, 20)
Open value of the index for the bar
high
Decimal(76, 20)
High value
low
Decimal(76, 20)
Low value
close
Decimal(76, 20)
Close value
The index is quoted in annualised volatility percentage points: a value of 55.21 means a 55.21% annualised IV.
Example Queries
1. Latest BTC and ETH DVOL
SELECT
timestamp,
market,
close
FROM public_data.volatility_index
WHERE exchange = 'deribit'
AND market IN ('BTC', 'ETH')
AND timestamp >= now() - INTERVAL 24 HOUR
ORDER BY timestamp DESC, market ASC
LIMIT 502. 1-hour resampled DVOL
The raw bars are at 1-minute resolution. Aggregate to whatever interval you need:
Functions used: toStartOfHour, argMin, argMax.
3. Variance risk premium (DVOL forecast vs forward-realised)
Compare the DVOL forecast on day D against the realised vol that actually unfolded over the next 30 days (D, D+30]. The difference is the ex-post variance risk premium ā what a delta-hedged option seller pocketed (or paid) on a 30-day book opened at D. This is the textbook implied-vs-realised comparison and the basis for short-vol carry strategies.
The trick is the forward window ā ROWS BETWEEN 1 FOLLOWING AND 30 FOLLOWING flips the usual trailing rolling-stddev around so each row's realised value is computed from the 30 days after it. The result drops 30 days from the recent end (you can't measure the realised vs a forecast whose window hasn't elapsed yet).
Functions used: toStartOfDay, toDate, toFloat64, log, sqrt, lagInFrame, stddevSamp.
Output (rolling 365 days, BTC)
A short summary across one year of forecasts:
mean premium
+4.2 vol pts
median premium
+9.3 vol pts
days with negative premium
93 / 365 (ā25%)
largest positive premium
+24.1 vol pts (2025-12-07)
largest negative premium
ā45.1 vol pts (2026-01-28)
Two things to read from this:
Mean is positive but small; the median is materially higher. That's the variance risk premium signature ā most days the forecast over-prices what unfolds, but a handful of tail months pull the mean down. Selling 30-day vol on a typical day is profitable; doing it indiscriminately is not.
Tail events show up clearly. Late January 2026 had realised vol over 80% while DVOL was sitting around 38% ā the forecast missed by 40+ vol points. A delta-hedged short straddle opened on those days lost roughly that spread, scaled by vega and time. The kind of event short-vol books exist to survive (or fail to).
Notes
The query uses calendar days (
stddevSampover 30 forward bars). For trading-day RV, replace the daily candles with 5-trading-day-week filters upstream.The rolling 30-day stddev is sample (Bessel-corrected). Use
stddevPopif you prefer the population estimator ā the 1/29 vs 1/30 normalization difference is well under a basis point for our window sizes.If you want the forward annualised RV in basis-point premium terms (instead of vol points), divide by
dvol_forecastand multiply by 1e4. Useful for ranking days by relative misforecast magnitude.
REST API
Returns OHLC (open / high / low / close) of an exchange's published volatility index for a given underlying. Currently the primary source is Deribit's DVOL (BTC and ETH).
This endpoint is limited to 10000 records per request.
Required for /ohlcv and /trade endpoints. Pass your API key in the x-api-key header. Public /market/* endpoints do not require authentication.
Exchange that publishes the index (e.g. deribit).
Underlying asset (e.g. BTC, ETH).
Window start. Accepts any format parseable by parseDateTime64BestEffort
ā e.g. a plain date (2026-03-01, treated as midnight UTC) or a full
ISO 8601 timestamp (2026-03-01T12:00:00Z).
2026-03-01Window end. Same format as start_datetime.
2026-03-08OK
Bar timestamp (UTC)
Exchange that publishes the index
Underlying asset
Open value of the index for the bar
High value
Low value
Close value
GET /volatility-index?exchange=text&market=text&start_datetime=2026-03-01&end_datetime=2026-03-08 HTTP/1.1
Host: api.koinju.io
x-api-key: YOUR_API_KEY
Accept: */*
OK
[
{
"time": "2026-03-01T00:00:00Z",
"exchange": "deribit",
"market": "BTC",
"open": 55.21,
"high": 55.21,
"low": 55.2,
"close": 55.21
}
]Last updated
Was this helpful?