After-Hours and Premarket Trading: What the Data Shows
After-hours trading runs 4-8 p.m. ET, premarket 4-9:30 a.m. See what the tape shows: session volume shares, spread costs, and when headlines actually land.
After-hours trading is the buying and selling of stocks between 4:00 p.m. and 8:00 p.m. ET, after the regular US session ends; premarket trading is the same activity between 4:00 a.m. and 9:30 a.m. Together the two sessions make up extended-hours trading, and most brokers support both — almost always with limit orders. This page measures what actually changes when the closing bell rings — volume, spreads, and headline timing — straight from the tape (the consolidated public record of every trade), with the exact query behind every number attached.
What are the premarket and after-hours trading hours?
A normal US trading day has three sessions: the premarket (4:00-9:30 a.m. ET), regular hours (9:30 a.m.-4:00 p.m.), and after-hours (4:00-8:00 p.m.). Rather than take that schedule on faith, you can read it off the tape. The panel below scans every SPY minute bar from the past two weeks and reports each completed session's earliest and latest bar by Eastern Time clock. (SPY, the most heavily traded S&P 500 ETF, trades whenever anything is open.)
The exact SQL behind every number
SELECT
min(formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i')) AS first_bar_et,
max(formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i')) AS last_bar_et,
min(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) AS first_bar_minute_of_day,
max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) AS last_bar_minute_of_day,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS completed_sessions,
toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 14 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))Across the 8 completed sessions from 2026-06-23 to 2026-07-02, the earliest bar of any day printed at 04:00 ET and the last bar of any day opened at 19:59 — a sixteen-hour envelope, of which regular hours make up six and a half. The session count includes only days that actually traded: holidays leave no bars, and early closes cut the envelope short — the regular session ends at 1:00 p.m. ET and after-hours wraps up early as well. Market holidays and early closes shows how to verify a session from the calendar and the tape before trusting any day's numbers.
Can you buy stocks after hours?
Yes — most major brokers accept both premarket and after-hours orders, with three near-universal conditions. First, limit orders only: you name the exact price you will accept, and the order fills at that price or better, or not at all. Market orders are typically rejected or queued for the next regular session. Second, orders route to electronic venues — electronic communication networks (ECNs), computerized systems that match buyers and sellers directly, plus the exchanges' own extended-hours sessions — without the opening and closing auctions and the market makers' quoting obligations of the regular day. Third, a fill is never guaranteed: with fewer participants on the other side, a limit order that would fill instantly at 2:00 p.m. can sit untouched at 6:00 p.m. Cut-off times and eligible order types vary broker to broker; the standard 4:00 a.m.-8:00 p.m. clock is set by the trading venues, not your broker — though a few brokers now offer a separate overnight session (roughly 8:00 p.m.-4:00 a.m.) on off-exchange venues, a distinct market that does not appear in the minute bars measured on this page.
How much volume trades in premarket and after hours?
The two extended sessions add up to nine and a half hours a day — three more than the regular session. They carry nothing like that share of the trading. The table below splits the last month of share volume in SPY, AAPL, and NVDA into four clock windows: premarket, regular hours, the first half hour after the 4:00 p.m. bell, and the rest of the evening. Early-close days — holiday-shortened sessions that end at 1:00 p.m. — are excluded (a day counts only when its tape runs into the evening), keeping each clock window's label true on every day measured.
The exact SQL behind every number
WITH full_sessions AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY session_date
HAVING max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 1140
)
SELECT ticker,
round(100 * sumIf(volume, m < 570) / sum(volume), 1) AS premarket_pct,
round(100 * sumIf(volume, m >= 570 AND m < 960) / sum(volume), 1) AS regular_pct,
round(100 * sumIf(volume, m >= 960 AND m < 990) / sum(volume), 1) AS post_close_30min_pct,
round(100 * sumIf(volume, m >= 990) / sum(volume), 1) AS evening_pct
FROM (
SELECT ticker, volume,
toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) AS m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'NVDA')
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT session_date FROM full_sessions)
)
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], ticker)Regular hours carried 81.4% of SPY's share volume, 93.7% of Apple's, and 91.6% of Nvidia's. The premarket — five and a half hours long — carried 1.2% and 3.7% for Apple and Nvidia. Genuine evening trading, from 4:30 p.m. to the 8:00 p.m. cutoff, measured 0.7% for Apple, 1.9% for Nvidia, and 2.1% for SPY.
The column that needs explaining is the first half hour after the bell, where 14.5% of SPY's month of volume printed. That is not evening speculation. The closing auction — the giant end-of-day match that sets each stock's official closing price — disseminates its prints at and just after 4:00 p.m., and end-of-day trade reports settle onto the tape in the same minutes. By the clock those prints are "after hours"; economically they belong to the close. On quarter-end and index-rebalance days that print runs especially large — for an ETF like SPY it can swell this column past the whole premarket. Any volume-based statistic — relative volume, VWAP, a most-active screen — changes meaning depending on which of these windows it counts.
Shares per minute make the contrast sharper. The chart below tracks Apple's median minute volume in half-hour buckets across the full sixteen-hour day, over the same month of full sessions. One caveat is built into the measurement: a minute with no trades prints no bar at all, and each bucket's median describes only the minutes Apple actually traded — the second series, the share of clock minutes with any trade, shows how much of each bucket that is.
The exact SQL behind every number
WITH full_sessions AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY session_date
HAVING max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 1140
)
SELECT formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(window_start))) AS median_minute_volume,
round(100 * count() / (30 * max(uniqExact(toDate(toTimeZone(window_start, 'America/New_York')))) OVER ()), 1) AS pct_minutes_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT session_date FROM full_sessions)
GROUP BY et_time
ORDER BY et_timeIn the 09:30 bucket — the first half hour of regular trading — Apple's median minute traded 155780 shares, and 100% of clock minutes printed a trade. The 15:30 bucket, the last half hour before the bell, ran 145108 shares a minute. One bucket later, at 16:00, the median traded minute carried 2566 shares. The market does not fade politely at the close — it steps off a ledge, and by the 17:30 bucket the median traded minute was down to 480 shares, with only 72.6% of clock minutes trading at all. The premarket runs a different shape: the 04:00 bucket — the first prints of the day, when orders queued overnight become eligible — measured a median of 1009 shares a minute, the 05:30 bucket ran 316 with 59.1% of its minutes trading, and the pace climbed to 2154 by 09:00, the half hour before the opening bell.
What happens to spreads after hours?
Fewer participants also show up in the bid-ask spread — the gap between the best price buyers will pay and the best price sellers will accept, which is the built-in cost of trading immediately. Professional market makers carry quoting obligations during regular hours; after the bell, posting quotes is voluntary, and fewer firms do it. The panel below measures Apple's median quoted spread across the past week of tick-level quote updates, split by session — full sessions only, with early-close days excluded, keeping the 9:30-to-4:00 label true for every quote counted.
The exact SQL behind every number
WITH full_sessions AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
AND window_start >= now() - INTERVAL 7 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY session_date
HAVING max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 1140
)
SELECT trading_session,
round(quantileDeterministic(0.5)(spread_usd, tsk) * 100, 1) AS median_spread_cents,
round(quantileDeterministic(0.5)(spread_bps, tsk), 1) AS median_spread_bps
FROM (
SELECT if(m BETWEEN 570 AND 959, 'regular session (9:30 am - 4:00 pm ET)', 'extended hours (premarket + after-hours)') AS trading_session,
toFloat64(ask_price - bid_price) AS spread_usd,
toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2) * 10000 AS spread_bps,
toUInt64(sip_timestamp) AS tsk,
toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS m
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= now() - INTERVAL 7 DAY
AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) IN (SELECT session_date FROM full_sessions)
AND bid_price > 0
AND ask_price > bid_price
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 240 AND 1199
)
GROUP BY trading_session
ORDER BY trading_sessionDuring regular hours, Apple's median quoted spread measured 4¢ — 1.4 basis points, hundredths of a percent of the share price. In extended hours the median ran 23¢, or 7.8 bps. A round trip — buy, then sell — pays that gap once, and in this window the extended-hours toll sat markedly above the regular-hours one. The bid-ask spread post charts the same pattern across the whole day: pennies midday, a wide gap at both edges.
What are the risks of trading after hours?
The two measurable ones are already on this page. Cost: Apple's median quoted spread ran 23¢ in extended hours against 4¢ in the regular session — a wider gap to cross on the way in, and again on the way out. Depth: the median traded minute after the bell carried 2566 Apple shares, down from 145108 in the half hour before it, and on a thin book each order moves the price farther. The rest are mechanical: limit orders only, fills never guaranteed, and whatever price prints in the evening still faces the next morning's opening auction, where a far larger crowd sets the level. Extended-hours trading is the same market with fewer participants and higher built-in costs; the numbers above are the price of admission.
Why do stocks move after hours?
Two observations cover most evening moves. First, corporate news is timed around the sessions: companies traditionally publish earnings and other material announcements outside regular hours — most often minutes after the 4:00 p.m. close, or in the hours before the open. Second, the tape those headlines land on is thin, as measured above.
The panel below counts every item in a consolidated stock-news feed from the past 30 completed days by the Eastern Time hour it was published — all seven days of the week included.
The exact SQL behind every number
SELECT toHour(toTimeZone(published_utc, 'America/New_York')) AS et_hour,
count() AS articles,
round(100 * count() / sum(count()) OVER (), 1) AS pct_of_items
FROM global_markets.stocks_news
WHERE published_utc >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(published_utc, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY et_hour
ORDER BY et_hourHeadlines landed in every one of the 24 clock hours. In this window the noon hour carried 394 items (7.7% of the 30-day total), the 8 a.m. hour 329, and the first hour after the close 314 (6.1% of the 30-day total). Even the 3 a.m. hour carried 131 items; overnight in New York is morning in Europe, and the wires never fully stop.
Put the two measurements together: announcements keep landing after the bell, and they land on a market where the median traded minute carried 963 Apple shares in the 16:30 bucket, against 57623 in the 13:00 bucket. An after-hours price is real information — it is also a price set by a small crowd, and the next morning's opening auction re-prices it with a much larger one.
FAQ
What time does premarket trading start?
Premarket trading starts at 4:00 a.m. ET on the electronic networks — in the two-week window measured above, the earliest SPY bar printed at 04:00 ET. Many brokers open premarket access later (7:00 or 8:00 a.m. is common); the practical start time is whatever your broker supports.
Do after-hours trades change the official closing price?
No. The official closing price is set by the closing auction at 4:00 p.m. and stands for the day — index funds, options settlement, and your account statement all reference it. After-hours prints update the "last" price shown in your app; the official close stays put.
Why do stocks move so much after earnings?
Earnings releases traditionally land minutes after the close or before the open, outside regular hours. The tape at that moment is thin — Apple's median traded minute in the 16:30 ET bucket carried 963 shares in the measured month, against 57623 in the 13:00 bucket — and spreads run wider. Fewer resting shares per minute means each order moves the price farther.
Can you trade after hours on an early-close day?
Yes, but the clock shifts: on exchange early-close days the regular session ends at 1:00 p.m. ET and after-hours trading typically runs 1:00-5:00 p.m. Full holidays have no sessions at all. The exchange calendar, not habit, is the source of truth — here is how to verify a market holiday or early close.
Every number above renders from a stored, inspectable query — expand the SQL under any panel to audit it. To profile the after-hours behavior of a ticker you own, ask the same questions in plain English on the Strasmore terminal.