Implied Volatility Heatmap: How to Read It
Downside wing cells: SPY put IV dispersion by contract volume, June 2026ranking ·
2026-10-02 · 6×4
One column of the heatmap: near the money AAPL IV by time to expiry, June 2026ranking ·
2026-10-02 · 6×3
One row of the heatmap: AAPL IV by moneyness, 25 to 35 days to expiry, June 2026ranking ·
2026-10-02 · 5×3
A raw IV colour scale across six names, week of June 15, 2026ranking ·
2026-10-02 · 6×3
The same week normalized: each name's IV against its own trailing yearranking ·
2026-10-02 · 6×4
GLD Implied Volatility, Explained
Average implied volatility by delta bucket, trailing twelve monthsranking ·
2026-09-23 · 5×3
25 delta call minus put implied volatility, in volatility pointsseries ·
2026-09-23 · 60×5
Percentile range of daily ATM implied volatility, five year windowranking ·
2026-09-23 · 5×3
Monthly at-the-money 30 day implied volatility: GLD vs SPYseries ·
2026-09-23 · 60×4
Downside wing cells: SPY put IV dispersion by contract volume, June 2026
Downside wing cells: SPY put IV dispersion by contract volume, June 2026
| volume_bucket | median_iv_pct | iv_range_pct | contracts |
|---|---|---|---|
| 1 contract | 27.1 | 11 | 215 |
| 2-5 | 27.4 | 12.8 | 431 |
| 6-25 | 27.5 | 11.7 | 668 |
| 26-100 | 26.8 | 11.5 | 664 |
| 101-1000 | 27 | 12.6 | 817 |
| over 1000 | 25.8 | 11.9 | 126 |
the exact SQL behind every number
SELECT
volume_bucket,
round(100 * quantileDeterministic(iv, det), 1) AS median_iv_pct,
round(100 * (quantileDeterministic(0.9)(iv, det) - quantileDeterministic(0.1)(iv, det)), 1) AS iv_range_pct,
count() AS contracts
FROM
(
SELECT
toFloat64(implied_volatility) AS iv,
cityHash64(ticker) AS det,
volume,
multiIf(volume = 1, '1 contract',
volume <= 5, '2-5',
volume <= 25, '6-25',
volume <= 100, '26-100',
volume <= 1000, '101-1000',
'over 1000') AS volume_bucket
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date BETWEEN '2026-06-01' AND '2026-06-30'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND lower(option_type) IN ('put', 'p')
AND toFloat64(strike_price) / toFloat64(underlying_close) - 1 BETWEEN -0.20 AND -0.08
)
GROUP BY volume_bucket
ORDER BY min(volume)
More from this analysisImplied Volatility Heatmap: How to Read It
One column of the heatmap: near the money AAPL IV by time to expiry, June 2026
ranking 6×3
→
A raw IV colour scale across six names, week of June 15, 2026
ranking 6×3
→
The same week normalized: each name's IV against its own trailing year
ranking 6×4
→
One row of the heatmap: AAPL IV by moneyness, 25 to 35 days to expiry, June 2026
ranking 5×3
→
See all 3,293 queries →