{"slug":"why-do-stocks-gap-overnight","qid":"dow_gaps","label":"SPY overnight gaps by weekday: every session, January 2024 through June 2026","post_title":"Why Do Stocks Gap Up or Down Overnight?","post_url":"/blog/why-do-stocks-gap-overnight#q-dow_gaps","columns":["weekday","sessions","avg_abs_gap_pct","p90_abs_gap_pct"],"rows":[{"weekday":"Monday","sessions":119,"avg_abs_gap_pct":0.52,"p90_abs_gap_pct":1.11},{"weekday":"Tuesday","sessions":131,"avg_abs_gap_pct":0.36,"p90_abs_gap_pct":0.73},{"weekday":"Wednesday","sessions":127,"avg_abs_gap_pct":0.39,"p90_abs_gap_pct":0.92},{"weekday":"Thursday","sessions":123,"avg_abs_gap_pct":0.45,"p90_abs_gap_pct":0.91},{"weekday":"Friday","sessions":125,"avg_abs_gap_pct":0.39,"p90_abs_gap_pct":0.88}],"shape":"series","sql":"SELECT ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'][dow] AS weekday,\n       count() AS sessions,\n       round(avg(abs(gap_pct)), 2) AS avg_abs_gap_pct,\n       round(quantileDeterministic(0.9)(abs(gap_pct), toUInt64(toYYYYMMDD(day))), 2) AS p90_abs_gap_pct\nFROM (\n    SELECT day, toDayOfWeek(day) AS dow,\n           100 * (rth_open - prior_close) / prior_close AS gap_pct\n    FROM (\n        SELECT day, rth_open, 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 >= '2023-12-28 04:00:00'\n                  AND window_start < '2026-07-01 08:00:00'\n            )\n            GROUP BY day\n        )\n    )\n    WHERE day >= '2024-01-01' AND prior_close > 0 AND isFinite(prior_close)\n)\nWHERE dow <= 5\nGROUP BY dow\nORDER BY dow","computed_at":"2026-07-26T06:36:47.006739+00:00","elapsed":1.212079539}