Multi-exchange vol surface
The query
WITH (
SELECT max(timestamp)
FROM api.option_chains
WHERE underlying_asset = 'BTC' AND timestamp > now() - INTERVAL 30 MINUTE
) AS latest_ts
SELECT
exchange,
toDate(expiration) AS expiry,
toFloat64(strike) AS strike,
toUInt32(date_diff('day', timestamp, expiration)) AS dte,
toFloat64(mark_iv) AS iv,
toFloat64(underlying_price) AS spot,
toFloat64(abs(strike - underlying_price)) AS moneyness
FROM api.option_chains
WHERE underlying_asset = 'BTC'
AND mark_iv != 0
AND timestamp >= latest_ts - INTERVAL 5 MINUTE -- snapshots refresh every 5 minutes
AND dte BETWEEN 2 AND 150
ORDER BY exchange, expiry, strikeInterpolation onto a shared grid
The surfaces

ATM term structure

Volatility smile

Download
Last updated
Was this helpful?