{"slug":"is-high-implied-volatility-good","qid":"iv_vs_realized","label":"Implied volatility beside the movement each stock actually delivered over the prior 30 sessions","post_title":"Is High Implied Volatility Good? IV in Context","post_url":"/blog/is-high-implied-volatility-good#q-iv_vs_realized","columns":["ticker","implied_vol_pct","realized_vol_30d_pct","iv_minus_realized"],"rows":[{"ticker":"COIN","implied_vol_pct":78.9,"realized_vol_30d_pct":63.8,"iv_minus_realized":15},{"ticker":"PLTR","implied_vol_pct":67.8,"realized_vol_30d_pct":58.6,"iv_minus_realized":9.2},{"ticker":"MSFT","implied_vol_pct":43.3,"realized_vol_30d_pct":34.1,"iv_minus_realized":9.2},{"ticker":"NVDA","implied_vol_pct":43.9,"realized_vol_30d_pct":38.8,"iv_minus_realized":5},{"ticker":"SPY","implied_vol_pct":15.3,"realized_vol_30d_pct":12.4,"iv_minus_realized":2.9},{"ticker":"QQQ","implied_vol_pct":26,"realized_vol_30d_pct":25.4,"iv_minus_realized":0.5},{"ticker":"AAPL","implied_vol_pct":29.3,"realized_vol_30d_pct":32.4,"iv_minus_realized":-3.1},{"ticker":"JNJ","implied_vol_pct":24,"realized_vol_30d_pct":29.1,"iv_minus_realized":-5},{"ticker":"MSTR","implied_vol_pct":80.2,"realized_vol_30d_pct":86.3,"iv_minus_realized":-6.1},{"ticker":"KO","implied_vol_pct":20.9,"realized_vol_30d_pct":28.4,"iv_minus_realized":-7.5},{"ticker":"TSLA","implied_vol_pct":47.3,"realized_vol_30d_pct":67.7,"iv_minus_realized":-20.4}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           argMax(close, window_start) AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('KO','JNJ','SPY','QQQ','AAPL','MSFT','NVDA','TSLA','PLTR','COIN','MSTR')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2026-05-20') AND toDate('2026-07-28')\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY ticker, d\n),\nrets AS (\n    SELECT ticker, d,\n           log(px / any(px) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)) AS r\n    FROM daily\n),\nrealized AS (\n    SELECT ticker, 100 * stddevSamp(r) * sqrt(252) AS rv\n    FROM rets\n    WHERE r IS NOT NULL AND d > toDate('2026-06-12')\n    GROUP BY ticker\n    HAVING count() >= 20\n),\nimplied AS (\n    SELECT underlying_symbol AS ticker,\n           100 * quantileExact(0.5)(implied_volatility) AS iv\n    FROM global_markets.options_greeks\n    WHERE date = '2026-07-28'\n      AND underlying_symbol IN ('KO','JNJ','SPY','QQQ','AAPL','MSFT','NVDA','TSLA','PLTR','COIN','MSTR')\n      AND iv_converged AND implied_volatility BETWEEN 0.02 AND 5\n      AND abs(strike_price / underlying_close - 1) <= 0.05\n      AND expiration_date BETWEEN date + 20 AND date + 60\n    GROUP BY ticker\n)\nSELECT implied.ticker AS ticker,\n       round(implied.iv, 1) AS implied_vol_pct,\n       round(realized.rv, 1) AS realized_vol_30d_pct,\n       round(implied.iv - realized.rv, 1) AS iv_minus_realized\nFROM implied INNER JOIN realized ON implied.ticker = realized.ticker\nORDER BY iv_minus_realized DESC","computed_at":"2026-08-17T14:10:27.706207+00:00","elapsed":0.005515096}