{"slug":"implied-volatility-heatmap","qid":"wing_noise","label":"wing_noise","post_title":"implied-volatility-heatmap","post_url":"/blog/implied-volatility-heatmap#q-wing_noise","columns":["volume_bucket","median_iv_pct","iv_range_pct","contracts"],"rows":[{"volume_bucket":"1 contract","median_iv_pct":27.1,"iv_range_pct":11,"contracts":215},{"volume_bucket":"2-5","median_iv_pct":27.4,"iv_range_pct":12.8,"contracts":431},{"volume_bucket":"6-25","median_iv_pct":27.5,"iv_range_pct":11.7,"contracts":668},{"volume_bucket":"26-100","median_iv_pct":26.8,"iv_range_pct":11.5,"contracts":664},{"volume_bucket":"101-1000","median_iv_pct":27,"iv_range_pct":12.6,"contracts":817},{"volume_bucket":"over 1000","median_iv_pct":25.8,"iv_range_pct":11.9,"contracts":126}],"shape":"ranking","sql":"SELECT\n    volume_bucket,\n    round(100 * quantileDeterministic(iv, det), 1) AS median_iv_pct,\n    round(100 * (quantileDeterministic(0.9)(iv, det) - quantileDeterministic(0.1)(iv, det)), 1) AS iv_range_pct,\n    count() AS contracts\nFROM\n(\n    SELECT\n        toFloat64(implied_volatility) AS iv,\n        cityHash64(ticker)            AS det,\n        volume,\n        multiIf(volume =    1, '1 contract',\n                volume <=   5, '2-5',\n                volume <=  25, '6-25',\n                volume <= 100, '26-100',\n                volume <= 1000, '101-1000',\n                                'over 1000') AS volume_bucket\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date BETWEEN '2026-06-01' AND '2026-06-30'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 20 AND 45\n      AND lower(option_type) IN ('put', 'p')\n      AND toFloat64(strike_price) / toFloat64(underlying_close) - 1 BETWEEN -0.20 AND -0.08\n)\nGROUP BY volume_bucket\nORDER BY min(volume)","computed_at":"2026-10-02T15:14:05.773796+00:00","elapsed":0.003441671}