{"slug":"stocks-with-the-biggest-iv-rv-gap","qid":"gap_leaderboard","label":"gap_leaderboard","post_title":"stocks-with-the-biggest-iv-rv-gap","post_url":"/blog/stocks-with-the-biggest-iv-rv-gap#q-gap_leaderboard","columns":["symbol","implied_vol_pct","realized_vol_pct","gap_pct"],"rows":[{"symbol":"VKTX","implied_vol_pct":79.2,"realized_vol_pct":58.3,"gap_pct":20.9},{"symbol":"TTD","implied_vol_pct":71.8,"realized_vol_pct":53.9,"gap_pct":17.9},{"symbol":"UPST","implied_vol_pct":83.8,"realized_vol_pct":68.6,"gap_pct":15.2},{"symbol":"VXX","implied_vol_pct":71.7,"realized_vol_pct":58,"gap_pct":13.7},{"symbol":"CORZ","implied_vol_pct":87.6,"realized_vol_pct":74.2,"gap_pct":13.4},{"symbol":"UUUU","implied_vol_pct":101.4,"realized_vol_pct":88.1,"gap_pct":13.3},{"symbol":"LYFT","implied_vol_pct":63.3,"realized_vol_pct":50.2,"gap_pct":13.1},{"symbol":"WBD","implied_vol_pct":35.7,"realized_vol_pct":22.7,"gap_pct":13},{"symbol":"DPST","implied_vol_pct":78.5,"realized_vol_pct":65.5,"gap_pct":13},{"symbol":"DUOL","implied_vol_pct":79.2,"realized_vol_pct":67.1,"gap_pct":12.1},{"symbol":"GME","implied_vol_pct":48.5,"realized_vol_pct":36.4,"gap_pct":12.1},{"symbol":"KVUE","implied_vol_pct":32.9,"realized_vol_pct":20.8,"gap_pct":12.1}],"shape":"ranking","sql":"WITH\n    split_tickers AS\n    (\n        SELECT DISTINCT ticker\n        FROM global_markets.stocks_splits\n        WHERE execution_date >= '2025-10-01'\n          AND execution_date <  '2026-08-01'\n    ),\n    px AS\n    (\n        SELECT\n            ticker                AS symbol,\n            date                  AS session,\n            max(toFloat64(close)) AS px\n        FROM global_markets.stocks_daily_aggs\n        WHERE date >= '2025-10-01'\n          AND date <  '2026-08-01'\n          AND ticker NOT IN (SELECT ticker FROM split_tickers)\n          AND ticker NOT IN ('SPCX')\n        GROUP BY symbol, session\n    ),\n    iv_rows AS\n    (\n        SELECT\n            g.symbol  AS symbol,\n            g.session AS session,\n            g.iv      AS iv\n        FROM\n        (\n            SELECT\n                underlying_symbol       AS symbol,\n                toDate(date)            AS session,\n                toFloat64(strike_price) AS strike,\n                implied_volatility      AS iv\n            FROM global_markets.options_greeks\n            WHERE date >= '2025-10-01'\n              AND date <  '2026-07-01'\n              AND lower(toString(option_type)) IN ('c', 'call')\n              AND days_to_expiry BETWEEN 20 AND 45\n              AND implied_volatility > 0\n        ) AS g\n        INNER JOIN px AS p ON p.symbol = g.symbol AND p.session = g.session\n        WHERE p.px > 10\n          AND abs(g.strike / p.px - 1) < 0.05\n    ),\n    implied AS\n    (\n        SELECT\n            symbol,\n            round(100 * avg(iv), 1) AS implied_vol_pct\n        FROM iv_rows\n        GROUP BY symbol\n        HAVING countDistinct(session) >= 120\n           AND count() >= 1000\n    ),\n    daily_returns AS\n    (\n        SELECT\n            symbol,\n            arrayJoin(arrayMap((a, b) -> log(tupleElement(a, 2) / tupleElement(b, 2)),\n                               arraySlice(series, 2),\n                               arraySlice(series, 1, length(series) - 1))) AS ret\n        FROM\n        (\n            SELECT\n                symbol,\n                arraySort(groupArray((session, px))) AS series\n            FROM px\n            WHERE session >= '2025-11-01'\n              AND symbol IN (SELECT symbol FROM implied)\n            GROUP BY symbol\n        )\n    ),\n    realized AS\n    (\n        SELECT\n            symbol,\n            round(100 * sqrt(252) * stddevSamp(ret), 1) AS realized_vol_pct\n        FROM daily_returns\n        GROUP BY symbol\n        HAVING count() >= 120\n    )\nSELECT\n    implied.symbol                                                AS symbol,\n    implied.implied_vol_pct                                       AS implied_vol_pct,\n    realized.realized_vol_pct                                     AS realized_vol_pct,\n    round(implied.implied_vol_pct - realized.realized_vol_pct, 1) AS gap_pct\nFROM implied\nINNER JOIN realized ON realized.symbol = implied.symbol\nWHERE implied.implied_vol_pct > realized.realized_vol_pct\nORDER BY gap_pct DESC\nLIMIT 12","computed_at":"2026-10-01T15:31:07.182669+00:00","elapsed":55.325331779}