{"slug":"stocks-with-the-biggest-iv-rv-gap","qid":"worst_gaps","label":"worst_gaps","post_title":"stocks-with-the-biggest-iv-rv-gap","post_url":"/blog/stocks-with-the-biggest-iv-rv-gap#q-worst_gaps","columns":["label","implied_vol_pct","realized_vol_pct","gap_pct"],"rows":[{"label":"SOXL Jun 2026","implied_vol_pct":136.9,"realized_vol_pct":243.2,"gap_pct":-106.3},{"label":"SLV Jan 2026","implied_vol_pct":47.8,"realized_vol_pct":139.7,"gap_pct":-91.9},{"label":"APP Feb 2026","implied_vol_pct":72.2,"realized_vol_pct":137.6,"gap_pct":-65.4},{"label":"SNDK Jul 2026","implied_vol_pct":104.6,"realized_vol_pct":159.7,"gap_pct":-55.1},{"label":"DELL Feb 2026","implied_vol_pct":46.3,"realized_vol_pct":92.2,"gap_pct":-45.9},{"label":"HOOD Feb 2026","implied_vol_pct":59.6,"realized_vol_pct":102.1,"gap_pct":-42.5},{"label":"IBIT Feb 2026","implied_vol_pct":40.2,"realized_vol_pct":81.8,"gap_pct":-41.6},{"label":"CRWV Feb 2026","implied_vol_pct":93.4,"realized_vol_pct":130.8,"gap_pct":-37.4},{"label":"MU Jun 2026","implied_vol_pct":89.1,"realized_vol_pct":126.4,"gap_pct":-37.3},{"label":"SOXX Jun 2026","implied_vol_pct":45.1,"realized_vol_pct":82.1,"gap_pct":-37}],"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            iv_month,\n            addMonths(iv_month, 1) AS forward_month,\n            implied_vol_pct\n        FROM\n        (\n            SELECT\n                symbol,\n                toStartOfMonth(session) AS iv_month,\n                round(100 * avg(iv), 1) AS implied_vol_pct\n            FROM iv_rows\n            GROUP BY symbol, iv_month\n            HAVING countDistinct(session) >= 18\n               AND count() >= 500\n        )\n    ),\n    daily_returns AS\n    (\n        SELECT\n            symbol,\n            arrayJoin(arrayMap((a, b) -> (tupleElement(a, 1), 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 symbol IN (SELECT symbol FROM implied)\n            GROUP BY symbol\n        )\n    ),\n    realized AS\n    (\n        SELECT\n            symbol,\n            toStartOfMonth(tupleElement(ret, 1))                         AS rv_month,\n            round(100 * sqrt(252) * stddevSamp(tupleElement(ret, 2)), 1) AS realized_vol_pct\n        FROM daily_returns\n        GROUP BY symbol, rv_month\n        HAVING count() >= 15\n    )\nSELECT\n    concat(implied.symbol, ' ', formatDateTime(implied.forward_month, '%b %Y')) AS label,\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\n                   AND realized.rv_month = implied.forward_month\nWHERE realized.realized_vol_pct > implied.implied_vol_pct\nORDER BY gap_pct ASC\nLIMIT 10","computed_at":"2026-10-01T15:32:52.478260+00:00","elapsed":48.344088929}