{"slug":"do-stocks-move-as-much-as-options-predict","qid":"overshoot_tail","label":"The ten widest overshoots: realized versus implied","post_title":"Do Stocks Move as Much as Options Predict?","post_url":"/blog/do-stocks-move-as-much-as-options-predict#q-overshoot_tail","columns":["event","implied_pct","realized_pct","ratio"],"rows":[{"event":"ORCL September 9, 2025","implied_pct":9.3,"realized_pct":37.68,"ratio":4.05},{"event":"AMZN July 30, 2026","implied_pct":6.97,"realized_pct":19.82,"ratio":2.84},{"event":"AMD May 5, 2026","implied_pct":8.6,"realized_pct":23.38,"ratio":2.72},{"event":"TSLA July 22, 2026","implied_pct":5.92,"realized_pct":15.63,"ratio":2.64},{"event":"AAPL July 30, 2026","implied_pct":3.67,"realized_pct":8.66,"ratio":2.36},{"event":"QCOM April 29, 2026","implied_pct":8.37,"realized_pct":19.72,"ratio":2.36},{"event":"AMD February 3, 2026","implied_pct":8.35,"realized_pct":18.71,"ratio":2.24},{"event":"KO February 11, 2025","implied_pct":2.96,"realized_pct":6.44,"ratio":2.18},{"event":"TSLA April 2, 2026","implied_pct":3.55,"realized_pct":7.46,"ratio":2.1},{"event":"DIS May 7, 2025","implied_pct":6.79,"realized_pct":14.05,"ratio":2.07}],"shape":"ranking","sql":"WITH\nreports AS (\n    SELECT\n        toString(ticker)    AS sym,\n        toDate(filing_date) AS report_date\n    FROM global_markets.stocks_8k_text\n    WHERE ticker IN ('AAPL', 'AMD', 'AMZN', 'AVGO', 'DIS', 'GOOGL', 'JPM', 'KO', 'META', 'MSFT', 'NFLX', 'NVDA', 'ORCL', 'QCOM', 'TSLA', 'WMT')\n      AND filing_date >= '2021-09-01'\n      AND filing_date <  '2026-09-20'\n      AND (items_text ILIKE '%results of operations and financial condition%'\n        OR items_text ILIKE '%item 2.02%')\n    GROUP BY sym, report_date\n),\nsessions AS (\n    SELECT\n        toString(ticker) AS sym,\n        toDate(date)     AS session_date,\n        toFloat64(close) AS px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('AAPL', 'AMD', 'AMZN', 'AVGO', 'DIS', 'GOOGL', 'JPM', 'KO', 'META', 'MSFT', 'NFLX', 'NVDA', 'ORCL', 'QCOM', 'TSLA', 'WMT')\n      AND date >= '2021-08-01'\n      AND date <  '2026-09-27'\n      AND close > 0\n),\nspans AS (\n    SELECT\n        r.sym         AS sym,\n        r.report_date AS report_date,\n        maxIf(s.session_date, s.session_date < r.report_date) AS pre_date,\n        minIf(s.session_date, s.session_date > r.report_date) AS post_date\n    FROM reports AS r\n    INNER JOIN sessions AS s ON s.sym = r.sym\n    WHERE s.session_date >= r.report_date - 8\n      AND s.session_date <= r.report_date + 8\n    GROUP BY r.sym, r.report_date\n    HAVING countIf(s.session_date < r.report_date) > 0\n       AND countIf(s.session_date > r.report_date) > 0\n),\nmoves AS (\n    SELECT\n        sp.sym         AS sym,\n        sp.report_date AS report_date,\n        sp.pre_date    AS pre_date,\n        round(100 * abs(b.px / a.px - 1), 2) AS realized_pct\n    FROM spans AS sp\n    INNER JOIN sessions AS a ON a.sym = sp.sym AND a.session_date = sp.pre_date\n    INNER JOIN sessions AS b ON b.sym = sp.sym AND b.session_date = sp.post_date\n),\ngreeks AS (\n    SELECT\n        toString(underlying_symbol)   AS sym,\n        toDate(date)                  AS pre_date,\n        toDate(expiration_date)       AS expiry,\n        lower(option_type)            AS side,\n        toFloat64(strike_price)       AS strike,\n        toFloat64(option_close)       AS opt_px,\n        toFloat64(underlying_close)   AS spot,\n        toFloat64(implied_volatility) AS iv,\n        toUInt16(days_to_expiry)      AS dte\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol IN ('AAPL', 'AMD', 'AMZN', 'AVGO', 'DIS', 'GOOGL', 'JPM', 'KO', 'META', 'MSFT', 'NFLX', 'NVDA', 'ORCL', 'QCOM', 'TSLA', 'WMT')\n      AND date >= '2021-09-01'\n      AND date <  '2026-09-20'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 1 AND 45\n      AND underlying_close > 0\n      AND option_close > 0\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05\n),\nchain AS (\n    SELECT\n        g.sym      AS sym,\n        g.pre_date AS pre_date,\n        g.expiry   AS expiry,\n        g.side     AS side,\n        g.strike   AS strike,\n        g.opt_px   AS opt_px,\n        g.spot     AS spot,\n        g.iv       AS iv,\n        g.dte      AS dte\n    FROM greeks AS g\n    INNER JOIN moves AS m ON m.sym = g.sym AND m.pre_date = g.pre_date\n    WHERE g.expiry > m.report_date\n),\nfront AS (\n    SELECT sym, pre_date, min(expiry) AS expiry\n    FROM chain\n    GROUP BY sym, pre_date\n),\nstraddles AS (\n    SELECT\n        c.sym       AS sym,\n        c.pre_date  AS pre_date,\n        c.strike    AS strike,\n        any(c.spot) AS spot,\n        max(c.dte)  AS dte,\n        avgIf(c.opt_px, c.side IN ('call', 'c')) AS call_px,\n        avgIf(c.opt_px, c.side IN ('put', 'p'))  AS put_px,\n        avg(c.iv)   AS atm_iv\n    FROM chain AS c\n    INNER JOIN front AS f\n        ON f.sym = c.sym AND f.pre_date = c.pre_date AND f.expiry = c.expiry\n    GROUP BY c.sym, c.pre_date, c.strike\n    HAVING countIf(c.side IN ('call', 'c')) > 0\n       AND countIf(c.side IN ('put', 'p')) > 0\n),\nimplied AS (\n    SELECT\n        sym,\n        pre_date,\n        argMin(round(100 * (call_px + put_px) / spot, 2), abs(strike / spot - 1)) AS straddle_pct,\n        argMin(round(100 * atm_iv * sqrt(dte / 365), 2), abs(strike / spot - 1))  AS iv_root_t_pct\n    FROM straddles\n    GROUP BY sym, pre_date\n)\nSELECT\n    concat(m.sym, ' ', monthName(m.report_date), ' ', toString(toDayOfMonth(m.report_date)), ', ', toString(toYear(m.report_date))) AS event,\n    i.straddle_pct                            AS implied_pct,\n    m.realized_pct                            AS realized_pct,\n    round(m.realized_pct / i.straddle_pct, 2) AS ratio\nFROM moves AS m\nINNER JOIN implied AS i ON i.sym = m.sym AND i.pre_date = m.pre_date\nWHERE i.straddle_pct > 0\nORDER BY m.realized_pct / i.straddle_pct DESC\nLIMIT 10","computed_at":"2026-09-27T16:03:10.952866+00:00","elapsed":0.007454752}