{"slug":"what-is-an-implied-volatility-index","qid":"iv_screener","label":"iv_screener","post_title":"what-is-an-implied-volatility-index","post_url":"/blog/what-is-an-implied-volatility-index#q-iv_screener","columns":["symbol","iv30_pct","near_iv_pct","far_iv_pct"],"rows":[{"symbol":"NVDA","iv30_pct":36.84,"near_iv_pct":36.35,"far_iv_pct":36.99},{"symbol":"MSFT","iv30_pct":30.48,"near_iv_pct":30.21,"far_iv_pct":30.57},{"symbol":"AMZN","iv30_pct":29.76,"near_iv_pct":29.63,"far_iv_pct":29.8},{"symbol":"AAPL","iv30_pct":21.83,"near_iv_pct":21.77,"far_iv_pct":21.85},{"symbol":"KO","iv30_pct":18.72,"near_iv_pct":19.01,"far_iv_pct":18.62},{"symbol":"SPY","iv30_pct":13.59,"near_iv_pct":13.49,"far_iv_pct":13.63}],"shape":"ranking","sql":"SELECT\n    underlying_symbol                                           AS symbol,\n    round(sqrt((near_iv * near_iv * near_dte * (far_dte - 30)\n              + far_iv * far_iv * far_dte * (30 - near_dte))\n              / (far_dte - near_dte) / 30) * 100, 2)            AS iv30_pct,\n    round(near_iv * 100, 2)                                     AS near_iv_pct,\n    round(far_iv * 100, 2)                                      AS far_iv_pct\nFROM\n(\n    SELECT\n        underlying_symbol,\n        maxIf(days_to_expiry, days_to_expiry <= 30)             AS near_dte,\n        minIf(days_to_expiry, days_to_expiry > 30)              AS far_dte,\n        argMaxIf(atm_iv, days_to_expiry, days_to_expiry <= 30)  AS near_iv,\n        argMinIf(atm_iv, days_to_expiry, days_to_expiry > 30)   AS far_iv\n    FROM\n    (\n        SELECT\n            underlying_symbol,\n            days_to_expiry,\n            avg(toFloat64(implied_volatility))  AS atm_iv,\n            count()                             AS contracts\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')\n          AND date = '2026-06-15'\n          AND iv_converged = 1\n          AND volume > 0\n          AND days_to_expiry BETWEEN 7 AND 90\n          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.025\n        GROUP BY underlying_symbol, days_to_expiry\n        HAVING contracts >= 2\n    )\n    GROUP BY underlying_symbol\n    HAVING countIf(days_to_expiry <= 30) > 0\n       AND countIf(days_to_expiry > 30) > 0\n)\nORDER BY iv30_pct DESC","computed_at":"2026-09-12T01:31:11.030819+00:00","elapsed":0.00410779}