Premarket and After-Hours Trading Hours ET
Premarket na 4-9:30 a.m. ET, after-hours na 4-8 p.m. See volume share, wider spreads and when news dey move prices, so you fit trade with better timing.
After-hours trading na buying and selling of stocks between 4:00 p.m. and 8:00 p.m. ET, after regular US session don end. Premarket trading na the same activity between 4:00 a.m. and 9:30 a.m. Together, both sessions surround the regular 9:30-to-4:00 trading day and form extended-hours trading. Most brokers support both, almost always through limit orders. This page measure wetin really change when closing bell ring: volume, spreads and when headlines land. E use the tape directly, wey be the consolidated public record of every trade. Every number get the exact query wey produce am attached.
Premarket na what time, and after-hours trading na what time?
Normal US trading day get three sessions: 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.). Instead make you just believe that schedule, you fit read am from the tape. The panel below scan every SPY minute bar for the last two weeks and report the earliest and latest bar for each completed session, based on Eastern Time clock. (SPY, the most heavily traded S&P 500 ETF, dey trade anytime any market open.)
| first bar ET | last bar ET | first bar minute for day | last bar minute for day | sessions wey don complete | first session | last session |
|---|---|---|---|---|---|---|
| 04:00 | 19:59 | 240 | 1199 | 10 | 2026-08-24 | 2026-09-04 |
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'))
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 240 AND 1199Across the 10 completed sessions from 2026-08-24 to 2026-09-04, the earliest bar for any day print at 04:00 ET, while the last bar for any day open at 19:59. That na a sixteen-hour envelope, and regular hours take six and a half hours inside am. The session count include only days wey actually trade: holidays no get bars, while early closes cut the envelope short. Regular session end at 1:00 p.m. ET, and after-hours close early too. Market holidays and early closes show how to verify session from the calendar and the tape before you trust the numbers for any day.
You fit buy stocks after-hours?
Yes, most major brokers dey accept both premarket and after-hours orders, but three conditions dey almost everywhere:
- Na limit orders only: you go name the exact price wey you gree accept. The order go fill for that price or better, or e no go fill at all. Dem normally reject market orders or queue dem for the next regular session.
- Orders dey route go electronic venues, electronic communication networks (ECNs), wey be computerized systems wey match buyers and sellers directly. Dem fit also route go the exchanges’ own extended-hours sessions. These sessions no get the opening and closing auctions or the market makers’ quoting obligations wey apply during regular trading day.
- Nobody fit guarantee say order go fill: fewer participants dey the other side. So, limit order wey for fill immediately by 2:00 p.m. fit remain untouched by 6:00 p.m.
Cut-off times and eligible order types dey differ from broker to broker. The standard 4:00 a.m.-8:00 p.m. clock na the trading venues set am, no be your broker. But some brokers don start to offer separate overnight session, roughly 8:00 p.m.-4:00 a.m., for off-exchange venues. Na separate market be that, and e no dey show for the minute bars wey this page measure.
How much volume dey trade for premarket and after hours?
The two extended sessions together na nine and a half hours every day, three hours pass the regular session. But dem no carry anything close to that share of trading. The table below divide the last month’s share volume for 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 wey end for 1:00 p.m. — no dey inside. A day count only when the tape reach evening, so each clock window label remain correct for every day measured.
| ticker | premarket % | regular % | post-close 30min % | evening % |
|---|---|---|---|---|
| SPY | 2.5 | 84.1 | 11.4 | 2 |
| AAPL | 4.2 | 90.9 | 3.6 | 1.4 |
| NVDA | 3.5 | 89.3 | 3.6 | 3.5 |
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)
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 240 AND 1199
)
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], ticker)Regular hours carry 84.1% of SPY share volume, 90.9% of Apple own, and 89.3% of Nvidia own. The premarket, wey last five and a half hours, carry 4.2% for Apple and 3.5% for Nvidia. Real evening trading, from 4:30 p.m. to the 8:00 p.m. cutoff, measure 1.4% for Apple, 3.5% for Nvidia, and 2% for SPY.
The column wey need explanation na the first half hour after the bell, where 11.4% of SPY’s monthly volume print. This no be evening speculation. The closing auction, the big end-of-day matching process wey set each stock official closing price, release its prints at 4:00 p.m. and just after am. End-of-day trade reports also settle onto the tape within those same minutes. By clock time, those prints na “after hours”; economically, dem belong to the close. For quarter-end and index-rebalance days, the print fit become especially large. For an ETF like SPY, e fit push this column pass the whole premarket. Any volume-based statistic — relative volume, VWAP, or most-active screen — get different meaning depending on which of these windows e count.
Shares per minute make the difference clearer. The chart below track Apple median minute volume in half-hour buckets across the full sixteen-hour day, using the same month of complete sessions. One caution dey inside the measurement: minute wey no get trades no print any bar at all. Each bucket median describe only the minutes wey Apple actually trade. The second series, wey show the share of clock minutes with any trade, show how much of each bucket that represents.
| ET time | median minute volume | % minutes wey dem trade |
|---|---|---|
| 04:00 | 858 | 85.6 |
| 04:30 | 422 | 73.3 |
| 05:00 | 495 | 67.8 |
| 05:30 | 446 | 66.8 |
| 06:00 | 432 | 68.6 |
| 06:30 | 416 | 71.9 |
| 07:00 | 998 | 92.9 |
| 07:30 | 953 | 93.8 |
| 08:00 | 1201 | 97.9 |
| 08:30 | 1565 | 97.9 |
| 09:00 | 2622 | 99.4 |
| 09:30 | 108409 | 100 |
| 10:00 | 78801 | 100 |
| 10:30 | 59715 | 100 |
| 11:00 | 56653 | 100 |
| 11:30 | 46077 | 100 |
| 12:00 | 41689 | 100 |
| 12:30 | 36250 | 100 |
| 13:00 | 34114 | 100 |
| 13:30 | 32961 | 100 |
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)
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 240 AND 1199
GROUP BY et_time
ORDER BY et_timeFor the 09:30 bucket, the first half hour of regular trading, Apple median minute trade 108409 shares, and 100% of clock minutes get a trade print. The 15:30 bucket, the last half hour before the bell, run 81640 shares per minute. One bucket later, for 16:00, the median traded minute carry 1316 shares. Market no dey fade gently for the close; e step off a ledge. By the 17:30 bucket, the median traded minute don fall to 323 shares, and only 73.2% of clock minutes get any trade. The premarket get different pattern: the 04:00 bucket, the first prints of the day, when overnight queued orders become eligible, record median of 858 shares per minute. The 05:30 bucket run 446, with 66.8% of its minutes trading. The pace then rise to 2622 by 09:00, the half hour before the opening bell.
Wetin dey happen to spreads after hours?
Fewer participants dey show for bid-ask spread too. Na the gap between the best price wey buyers go pay and the best price wey sellers go accept. Na this gap be the built-in cost of trading immediately. Professional market makers get obligation to quote during regular hours. After the bell, posting quotes na voluntary, and fewer firms dey do am. The panel below measure Apple median quoted spread across the past week of tick-level quote updates. E split the data by session, use only full sessions, exclude early-close days, and keep the 9:30-to-4:00 label correct for every quote wey dem count.
| trading session | median spread cents | median spread bps |
|---|---|---|
| extended hours (premarket + after-hours) | 14 | 4.3 |
| regular session (9:30 am - 4:00 pm ET) | 3 | 0.9 |
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 median quoted spread measure 3¢, or 0.9 basis points. Basis points na hundredths of a percent of the share price. For extended hours, the median reach 14¢, or 4.3 bps. Round trip — buy first, then sell — pay that gap once. For this period, the extended-hours toll dey clearly higher than the regular-hours one. The bid-ask spread post show the same pattern throughout the day: pennies around midday, but wide gap for both edges.
Wetin be the risks of trading after hours?
The two wey fit measure don dey this page already. Cost: Apple median quoted spread na 14¢ for extended hours, compared with 3¢ for regular session. This mean say gap wey you need cross bigger when you enter, and again when you comot. Depth: median traded minute after bell carry 1316 Apple shares, down from 81640 for the half hour before am. For thin book, each order fit push price farther. The remaining risks na mechanical ones: na limit orders only, fills no dey guaranteed, and any price wey prints for evening still go face next morning opening auction. For that auction, much bigger crowd go set the level. Extended-hours trading na the same market, but participants dey fewer and built-in costs dey higher. The numbers above na the price of admission.
Why stocks dey move after hours?
Two observations fit explain most evening moves. First, companies dey time corporate news around the trading sessions. Traditionally, dem dey publish earnings and other material announcements outside regular hours, most times few minutes after the 4:00 p.m. close, or during the hours before market open. Second, the tape wey those headlines land on dey thin, as we don measure above.
The panel below count every item for one consolidated stock-news feed from the past 30 completed days, based on the Eastern Time hour wey dem publish am. E include all seven days of the week.
| ET hour | articles | % of items |
|---|---|---|
| 0 | 55 | 1.3 |
| 1 | 56 | 1.3 |
| 2 | 67 | 1.6 |
| 3 | 73 | 1.7 |
| 4 | 117 | 2.7 |
| 5 | 146 | 3.4 |
| 6 | 253 | 5.9 |
| 7 | 216 | 5.1 |
| 8 | 316 | 7.4 |
| 9 | 356 | 8.4 |
| 10 | 223 | 5.2 |
| 11 | 493 | 11.6 |
| 12 | 309 | 7.3 |
| 13 | 196 | 4.6 |
| 14 | 199 | 4.7 |
| 15 | 170 | 4 |
| 16 | 201 | 4.7 |
| 17 | 257 | 6 |
| 18 | 144 | 3.4 |
| 19 | 134 | 3.1 |
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 land for every one of the 24 clock hours. Inside this window, the noon hour carry 309 items (7.3% of the 30-day total), the 8 a.m. hour carry 316, and the first hour after close carry 201 (4.7% of the 30-day total). Even the 3 a.m. hour carry 73 items. Overnight for New York na morning for Europe, and the news wires no dey stop completely.
Put the two measurements together: announcements still dey land after the bell, and dem dey land for market wey the median traded minute carry 606 Apple shares inside the 16:30 bucket, compared with 34114 inside the 13:00 bucket. After-hours price na real information, but na small crowd set the price. The next morning opening auction go re-price am with much bigger crowd.
FAQ
What time premarket trading dey start?
Premarket trading dey start for 4:00 a.m. ET on electronic networks. For the two-week period wey we measure above, the earliest SPY bar print na for 04:00 ET. Many brokers dey open premarket access later; 7:00 or 8:00 a.m. common. The practical start time na whenever your broker support.
After-hours trades dey change the official closing price?
No. Closing auction for 4:00 p.m. set the official closing price, and e remain so for that day. Index funds, options settlement and your account statement all dey reference am. After-hours prints dey update the “last” price wey your app show, but the official close no dey change.
Why stocks dey move so much after earnings?
Earnings releases traditionally dey come out minutes after market close or before market open, outside regular trading hours. Tape dey thin at that time. Apple median traded minute for the 16:30 ET bucket carry 606 shares during the month wey dem measure, compared with 34114 for the 13:00 bucket. Spreads too dey wider. When fewer shares dey rest for the book each minute, each order fit move price farther.
You fit trade after hours on an early-close day?
Yes, but the clock dey shift. On exchange early-close days, regular session dey end for 1:00 p.m. ET, and after-hours trading normally run from 1:00 to 5:00 p.m. Full holidays no get any session. Na exchange calendar, no be habit, be the correct source. na here you fit verify market holiday or early close
After-hours trading risky?
The measurable frictions all dey show for this page. Most brokers dey accept limit orders only, and fill no dey guaranteed when fewer firms dey quote the other side. Quoted spreads dey wider. Apple median extended-hours spread na 14¢, compared with 3¢ for regular session. The book dey thinner too, so each order fit move price farther. Any price wey print for evening still face overnight gap before next morning opening auction re-price am with bigger crowd.
Every number wey dey above come from stored query wey you fit inspect. Expand the SQL under any panel to audit am. If you wan profile after-hours behavior of ticker wey you own, ask the same questions for plain English on the Strasmore terminal.