{"slug":"open-source-trading-terminal-for-python","qid":"iv_curve","label":"iv_curve","post_title":"open-source-trading-terminal-for-python","post_url":"/blog/open-source-trading-terminal-for-python#q-iv_curve","columns":["dte_bucket","atm_iv_pct","contracts"],"rows":[{"dte_bucket":"0-7d","atm_iv_pct":26.4,"contracts":68},{"dte_bucket":"8-21d","atm_iv_pct":22.8,"contracts":79},{"dte_bucket":"22-45d","atm_iv_pct":22,"contracts":36},{"dte_bucket":"46-90d","atm_iv_pct":25,"contracts":24},{"dte_bucket":"91d+","atm_iv_pct":27,"contracts":99}],"shape":"ranking","sql":"SELECT\n    multiIf(days_to_expiry <= 7,  '0-7d',\n            days_to_expiry <= 21, '8-21d',\n            days_to_expiry <= 45, '22-45d',\n            days_to_expiry <= 90, '46-90d',\n                                  '91d+') AS dte_bucket,\n    round(avg(implied_volatility) * 100, 1) AS atm_iv_pct,\n    count()                                 AS contracts\nFROM global_markets.options_greeks\nWHERE underlying_symbol = 'AAPL'\n  AND date = '2026-06-15'\n  AND iv_converged = 1\n  AND volume > 0\n  AND days_to_expiry >= 0\n  AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05\nGROUP BY dte_bucket\nORDER BY min(days_to_expiry)","computed_at":"2026-10-03T16:02:48.105100+00:00","elapsed":0.002317429}