{"slug":"why-do-stocks-gap-overnight","qid":"biggest_gaps","label":"SPY's six biggest overnight gaps of H1 2026: and the same day's open-to-close move","post_title":"Why Do Stocks Gap Up or Down Overnight?","post_url":"/blog/why-do-stocks-gap-overnight#q-biggest_gaps","columns":["session","overnight_gap_pct","rest_of_day_pct"],"rows":[{"session":"April 8, 2026","overnight_gap_pct":2.6,"rest_of_day_pct":-0.08},{"session":"March 3, 2026","overnight_gap_pct":-1.65,"rest_of_day_pct":0.77},{"session":"March 23, 2026","overnight_gap_pct":1.47,"rest_of_day_pct":-0.41},{"session":"January 20, 2026","overnight_gap_pct":-1.46,"rest_of_day_pct":-0.57},{"session":"June 23, 2026","overnight_gap_pct":-1.42,"rest_of_day_pct":-0.02},{"session":"June 15, 2026","overnight_gap_pct":1.38,"rest_of_day_pct":0.37}],"shape":"series","sql":"SELECT concat(monthName(day), ' ', toString(toDayOfMonth(day)), ', ', toString(toYear(day))) AS session,\n       round(100 * (rth_open - prior_close) / prior_close, 2) AS overnight_gap_pct,\n       round(100 * (rth_close - rth_open) / rth_open, 2) AS rest_of_day_pct\nFROM (SELECT day, rth_open, rth_close, lagInFrame(rth_close) OVER (ORDER BY day) AS prior_close\n    FROM (\n        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,\n               argMinIf(toFloat64(open), window_start, rth) AS rth_open,\n               argMaxIf(toFloat64(close), window_start, rth) AS rth_close\n        FROM (\n            SELECT window_start, open, close,\n                   toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')\n                   AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York') AS rth\n            FROM global_markets.delayed_stocks_minute_aggs\n            WHERE ticker = 'SPY'\n              AND window_start >= '2025-12-29 04:00:00'\n              AND window_start < '2026-07-01 08:00:00'\n        )\n        GROUP BY day\n    ))\nWHERE day >= '2026-01-01' AND prior_close > 0 AND isFinite(prior_close)\nORDER BY abs(overnight_gap_pct) DESC, day\nLIMIT 6","computed_at":"2026-07-26T06:36:47.231384+00:00","elapsed":0.135679941}