Why Do Stocks Gap Up or Down Overnight?
Overnight gaps by ticker, H1 2026: average absolute gap and the single biggest gapseries ·
2026-07-26 · 6×5
MSFT straddle prices at the close before the gap: Jan 28, 2026, Jan 30 expirytable ·
2026-07-26 · 4×5
MSFT: how the January 29, 2026 gap formed, 30-minute premarket bucketsseries ·
2026-07-26 · 11×8
SPY, H1 2026: average absolute overnight gap vs average absolute intraday movescalar ·
2026-07-26 · 1×4123
What crossed the wire during SPY's biggest overnight gap of H1 2026table ·
2026-07-26 · 2×3
SPY overnight gaps by weekday: every session, January 2024 through June 2026series ·
2026-07-26 · 5×4
SPY's six biggest overnight gaps of H1 2026: and the same day's open-to-close moveseries ·
2026-07-26 · 6×3
Overnight gaps by ticker, H1 2026: average absolute gap and the single biggest gap
Overnight gaps by ticker, H1 2026: average absolute gap and the single biggest gap
| ticker | sessions | avg_abs_gap_pct | biggest_gap_pct | biggest_gap_day |
|---|---|---|---|---|
| SPY | 123 | 0.45 | 2.6 | April 8, 2026 |
| KO | 123 | 0.42 | 5.41 | April 28, 2026 |
| AAPL | 123 | 0.53 | 2.82 | May 1, 2026 |
| MSFT | 123 | 0.89 | -8.66 | January 29, 2026 |
| NVDA | 123 | 0.99 | 3.6 | April 8, 2026 |
| TSLA | 123 | 1.05 | 4.97 | April 8, 2026 |
the exact SQL behind every number
SELECT ticker,
count() AS sessions,
round(avg(abs(gap_pct)), 2) AS avg_abs_gap_pct,
round(argMax(gap_pct, (abs(gap_pct), day)), 2) AS biggest_gap_pct,
concat(monthName(argMax(day, (abs(gap_pct), day))), ' ', toString(toDayOfMonth(argMax(day, (abs(gap_pct), day)))), ', ', toString(toYear(argMax(day, (abs(gap_pct), day))))) AS biggest_gap_day
FROM (
SELECT ticker, day, 100 * (rth_open - prior_close) / prior_close AS gap_pct
FROM (
SELECT ticker, day, rth_open,
lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY day) AS prior_close
FROM (
SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS day,
argMinIf(toFloat64(open), window_start, rth) AS rth_open,
argMaxIf(toFloat64(close), window_start, rth) AS rth_close
FROM (
SELECT ticker, window_start, open, close,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
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
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'TSLA')
AND window_start >= '2025-12-29 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY ticker, day
)
)
WHERE day >= '2026-01-01' AND prior_close > 0 AND isFinite(prior_close)
)
GROUP BY ticker
ORDER BY indexOf(['SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'TSLA'], ticker)
More from this analysisWhy Do Stocks Gap Up or Down Overnight?
MSFT: how the January 29, 2026 gap formed, 30-minute premarket buckets
series 11×8
→
SPY's six biggest overnight gaps of H1 2026: and the same day's open-to-close move
series 6×3
→
SPY overnight gaps by weekday: every session, January 2024 through June 2026
series 5×4
→
MSFT straddle prices at the close before the gap: Jan 28, 2026, Jan 30 expiry
table 4×5
→
See all 2,173 queries →