Why Do Stocks Gap Up or Down Overnight?
Stocks gap when the open lands away from the prior close — 17.5 closed hours of news settle at one auction price. SPY data shows how big normal gaps run.
A gap is the distance between where a stock closed one session and where it opened the next — a jump in the price chart with no trades printed in between, at least during regular hours. Stocks gap overnight for a structural reason: the exchanges run a 6.5-hour session, and the other 17.5 hours of the day still produce earnings releases, news, global market moves, and thin after-hours trading. All of it lands on the next morning's opening price at once. This page measures how big overnight gaps actually are, using every SPY session of the first half of 2026.
What is a gap up or gap down?
Gap up: today's opening price above yesterday's regular-session close. Gap down: below it. The open in question is the regular 9:30 AM ET open — set by the opening auction, which collects the whole overnight backlog of orders and clears them at a single price. Between the prior close and that auction, after-hours and premarket trading does print real trades, but at a fraction of regular-session volume — so the official open is where the market's full weight first speaks, and that is where the gap is conventionally measured.
Where does the new opening price come from, if nothing traded through the night? Price discovery never fully stops: stock index futures trade nearly around the clock, overseas markets set levels while New York sleeps, and the premarket session runs from 4:00 AM ET. By 9:30 the opening auction is not guessing — it is ratifying, at full market weight, a level the overnight venues have already sketched out. For an individual stock the sketch is rougher: a company announcement at 7:00 AM can reset the price on a few thousand premarket shares, and the auction is where the real size finally votes. Weekends stretch the same mechanics across 65 hours instead of 17.5, which is one reason Monday opens carry a reputation.
How big is a normal overnight gap?
Here is the measurement across every session of H1 2026 for SPY, the S&P 500 ETF — each day split into its overnight component (prior close to open) and its intraday component (open to close):
The exact SQL behind every number
SELECT count() AS sessions,
round(avg(abs(100 * (rth_open - prior_close) / prior_close)), 2) AS avg_abs_overnight_gap_pct,
round(avg(abs(100 * (rth_close - rth_open) / rth_open)), 2) AS avg_abs_intraday_move_pct,
countIf(abs(100 * (rth_open - prior_close) / prior_close) >= 0.5) AS gaps_of_half_pct_or_more
FROM (SELECT day, rth_open, rth_close, lagInFrame(rth_close) OVER (ORDER BY day) AS prior_close
FROM (
SELECT 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 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 = 'SPY'
AND window_start >= '2025-12-29 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY day
))
WHERE day >= '2026-01-01' AND prior_close > 0Across 123 sessions, SPY's average absolute overnight gap was 0.45% — against an average absolute open-to-close move of 0.53%. Sit with that: the untradeable overnight jump is nearly the same size, on average, as the entire tradeable day that follows. And gaps of half a percent or more happened 41 times in the half — roughly one session in three.
The biggest gaps of H1 2026
The tail is where gaps get expensive. The six largest SPY overnight gaps of the half, with what the rest of each day did:
The exact SQL behind every number
SELECT toString(day) AS session,
round(100 * (rth_open - prior_close) / prior_close, 2) AS overnight_gap_pct,
round(100 * (rth_close - rth_open) / rth_open, 2) AS rest_of_day_pct
FROM (SELECT day, rth_open, rth_close, lagInFrame(rth_close) OVER (ORDER BY day) AS prior_close
FROM (
SELECT 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 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 = 'SPY'
AND window_start >= '2025-12-29 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY day
))
WHERE day >= '2026-01-01' AND prior_close > 0
ORDER BY abs(overnight_gap_pct) DESC
LIMIT 6The largest of the half came on 2026-04-08: SPY opened 2.6% away from the prior close, and then moved just -0.08% from open to close. Essentially the entire day's repricing happened before the first regular-hours trade — anyone waiting for the open to act was already looking at the new price. That pattern is the practical lesson of gaps: they are the market repricing without you.
Gaps, day by day
A typical stretch shows the rhythm — June 2026, every session's overnight and intraday components side by side:
The exact SQL behind every number
SELECT day,
round(100 * (rth_open - prior_close) / prior_close, 2) AS overnight_gap_pct,
round(100 * (rth_close - rth_open) / rth_open, 2) AS intraday_move_pct
FROM (SELECT day, rth_open, rth_close, lagInFrame(rth_close) OVER (ORDER BY day) AS prior_close
FROM (
SELECT 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 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 = 'SPY'
AND window_start >= '2025-12-29 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY day
))
WHERE day >= '2026-06-01' AND day <= '2026-06-30' AND prior_close > 0
ORDER BY dayNotice how often the two bars disagree — a gap up followed by an intraday fade, a gap down followed by a flat day. The overnight and intraday sessions are, statistically, different markets: different participants, different volume, different information arriving. Which is why return conventions matter — how monthly returns are measured shows how the same month reads differently depending on whether the overnight jumps are counted.
What gaps mean for orders
Two mechanical consequences worth knowing, both flowing from the fact that no regular-hours trading happens inside the gap:
- Stop orders do not stop the loss at the stop price. A stop becomes a market order when the stock trades at or through the trigger. If a stock closes at $50 and opens at $44, a $48 stop-loss triggers at the open and fills near $44 — the gap jumped clean over the stop. The stop guarantees the attempt, not the level.
- "Gap fill" is a description, not a schedule. Traders say a gap "fills" when price returns to the prior close. It is a popular observation and a real pattern some days — the June panel above shows both fades and follow-throughs — but nothing obligates a gap to fill on any timeframe.
Gap up and gap down FAQ
What makes a stock gap up or down overnight?
The market is closed for 17.5 of every 24 hours, and information does not stop: earnings land after the close, news breaks before the open, and overseas markets trade all night. The opening auction aggregates the accumulated orders into one clearing price, and the distance from the prior close is the gap.
How common are overnight gaps?
Ubiquitous — in H1 2026, SPY's average absolute overnight gap was 0.45%, and 41 of 123 sessions opened at least half a percent away from the prior close. Individual stocks gap harder than a diversified ETF like SPY, especially around their earnings dates.
Do gaps always get filled?
No. "The gap always fills" is trading folklore; some gaps fill within hours, others never revisit the prior close. Treat any fill statistic you meet as a pattern description, not a rule.
Can I trade during a gap?
Not during regular hours — the gap is precisely the space where no regular-session trades occur. Extended-hours sessions do trade, with real fills at thinner volume and wider spreads, and they are where part of the overnight repricing actually happens.
Every measurement above is a stored query on the minute-by-minute tape — expand the SQL under any panel, or split any ticker's month into overnight and intraday moves on the Strasmore terminal.