US stock market hours: wetin time e dey open and close?
Stock market dey open 9:30 a.m. ET, e dey close 4:00 p.m. ET. NYSE and Nasdaq regular hours na Monday to Friday, plus premarket and after-hours trading. Market dey closed for weekends.
US stock market hours dey run from 9:30 a.m. to 4:00 p.m. Eastern Time, Monday through Friday — both NYSE and Nasdaq dey open regular trading by 9:30 a.m. ET and dem dey close am by 4:00 p.m. ET. Around dat regular session, two extended windows dey: premarket trading from 4:00 a.m. ET and after-hours trading wey go reach 8:00 p.m. ET, and markets dey shut for weekends plus roughly ten holidays every year. Every figure for dis page na from real trade records, and di exact query behind each number na just one click away. (For di quick-view version — next closure, most recent session — check if di stock market dey open today.)
Which time stock market dey open and close?
Di regular trading session — na di hours wey dem dey use quote prices, index levels, and wetin evening news dey talk — e dey run from opening bell for 9:30 a.m. ET go reach closing bell for 4:00 p.m. ET: na six and a half hours, five days for one week. Di two major US listing exchanges dey use di same clock, and any standard brokerage order dey work inside dis window by default.
Di full electronic trading day wide pass di bells:
- Premarket: 4:00 a.m. to 9:30 a.m. ET — na electronic trading before di opening bell.
- Regular session: 9:30 a.m. to 4:00 p.m. ET — na where di bulk of di day business dey happen.
- After-hours: 4:00 p.m. to 8:00 p.m. ET — na electronic trading after di closing bell.
Two auctions dey bracket di regular day. One opening auction dey set each stock official opening price for 9:30 a.m., and di closing auction — wey be one big single matched trade small time after 4:00 p.m. — dey set di official closing price wey dem dey quote everywhere dat evening. All times for dis page na Eastern: di same regular session dey run 6:30 a.m. to 1:00 p.m. for di US West Coast.
How stock market hours show for tape?
Definition na one thing; na the tape go show the truth. The panels wey dey below take one recent full-length session from the SPY tape — 2026-07-20, one Monday, the most recent session wey don old reach make im record complete (the data feed dey run one or two days behind) — dem verify am by counting im regular-session minute bars: 390 of dem, one for every minute between the bells. The session first bar print for 04:00 ET and im last one print for 19:59 ET — the tape cover the full extended day, from 4:00 a.m. reach 8:00 p.m.
The exact SQL behind every number
WITH
(
SELECT max(d)
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 21
AND window_start < today() - 2
GROUP BY d
HAVING rth_bars = 390
)
) AS session_day
SELECT
toString(session_day) AS session_date,
formatDateTime(session_day, '%W') AS weekday,
countIf(et_min >= 570 AND et_min < 960) AS regular_session_bars,
min(et_min) AS first_bar_minute_of_day,
max(et_min) AS last_bar_minute_of_day,
formatDateTime(min(et_ts), '%H:%i') AS first_bar_et,
formatDateTime(max(et_ts), '%H:%i') AS last_bar_et,
round(sum(volume) / 1e6, 1) AS total_shares_m,
round(100.0 * sumIf(volume, et_min < 570) / sum(volume), 1) AS premarket_pct,
round(100.0 * sumIf(volume, et_min >= 570 AND et_min < 960) / sum(volume), 1) AS regular_pct,
round(100.0 * sumIf(volume, et_min >= 960 AND et_min < 990) / sum(volume), 1) AS post_close_30min_pct,
round(100.0 * sumIf(volume, et_min >= 990) / sum(volume), 1) AS evening_pct,
round(100.0 * sumIf(volume, et_min >= 570 AND et_min < 600) / sum(volume), 1) AS first_30min_pct,
round(100.0 * sumIf(volume, et_min >= 930 AND et_min < 960) / sum(volume), 1) AS last_30min_pct,
round(100.0 * sumIf(volume, et_min >= 750 AND et_min < 780) / sum(volume), 1) AS midday_half_hour_pct
FROM
(
SELECT
volume,
toTimeZone(window_start, 'America/New_York') AS et_ts,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS et_min
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) = session_day
)The volume split na the lesson. Out of the 48.4 million SPY shares wey trade across that whole sixteen-hour span, the regular session carry 82.7%. The five-and-a-half-hour premarket print 1.9%. The half hour wey follow the closing bell immediately print 14.8% — na window wey dey catch large negotiated trades wey dem report to the tape once the session end — and the remaining three and a half evening hours print 0.6% combined.
Half-hour buckets show the day shape:
The exact SQL behind every number
WITH
(
SELECT max(d)
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 21
AND window_start < today() - 2
GROUP BY d
HAVING rth_bars = 390
)
) AS session_day
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_half_hour,
round(sum(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) = session_day
GROUP BY et_half_hour
ORDER BY et_half_hourFor this session, the closing half hour print 19% of the entire day volume, against 5.8% for the 12:30-to-1:00 lunchtime half hour; the opening half hour print 9.5%. The heavy close get mechanical anchor: index funds, mutual funds, and benchmarked institutions dey transact at official closing prices, and their orders pool into the closing auction. In all, volume land for 32 distinct half-hour buckets across the extended day.
Wetin be premarket and after-hours trading?
Premarket (4:00 a.m. to 9:30 a.m. ET) and after-hours (4:00 p.m. to 8:00 p.m. ET) na trading windows wey dey run only for electronic system, outside regular market hours. E no get many pipo wey dey trade for there, bid-ask spread dey wide well-well, and plenty brokers go only accept limit orders for this sessions. Company news dey heavy for this time: earnings releases dey gada-gada just after the 4:00 p.m. close and for the hours before market open — na the windows wey stock price fit jump far from where e close before. Price wey dem print by 7:00 p.m. no get any guarantee about where the stock go open the next morning.
The share of volume for each session, the measured cost of bid-ask spread, and the exact time wey headlines dey land, all dey inside after-hours and premarket trading, the companion piece to this page. The short version, wey you fit see for the panels up there: extended sessions dey real and you fit trade for there, but dem dey thin well-well compared to the regular day.
Wetin be di hours wey options and futures dey trade?
Options for individual companies dey trade from 9:30 a.m. to 4:00 p.m. ET — no premarket, no after-hours. Options for small list of broad-market ETFs and index products — like SPY, QQQ, IWM, and index options like SPX and VIX — get extra 15 minutes, dem dey trade until 4:15 p.m. ET. Di tape show di split for 2026-07-20, di same session wey dem measure up:
The exact SQL behind every number
WITH
(
SELECT max(d)
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 21
AND window_start < today() - 2
GROUP BY d
HAVING rth_bars = 390
)
) AS session_day
SELECT
if(startsWith(ticker, 'O:SPY'), 'SPY options (ETF)', 'AAPL options (single name)') AS contract,
toString(session_day) AS session_date,
countIf(sip_timestamp >= toDateTime(concat(toString(session_day), ' 15:45:00'), 'America/New_York')
AND sip_timestamp < toDateTime(concat(toString(session_day), ' 16:00:00'), 'America/New_York')) AS trades_345_to_400,
countIf(sip_timestamp >= toDateTime(concat(toString(session_day), ' 16:00:00'), 'America/New_York')
AND sip_timestamp < toDateTime(concat(toString(session_day), ' 16:15:00'), 'America/New_York')) AS trades_400_to_415,
formatDateTime(toTimeZone(max(sip_timestamp), 'America/New_York'), '%H:%i') AS last_trade_et,
toHour(toTimeZone(max(sip_timestamp), 'America/New_York')) * 60
+ toMinute(toTimeZone(max(sip_timestamp), 'America/New_York')) AS last_trade_minute_of_day
FROM global_markets.options_trades
WHERE (startsWith(ticker, 'O:SPY') OR startsWith(ticker, 'O:AAPL'))
AND match(ticker, '^O:(SPY|AAPL)[0-9]{6}[CP][0-9]{8}$')
AND sip_timestamp >= toDateTime(concat(toString(session_day), ' 15:45:00'), 'America/New_York')
AND sip_timestamp < toDateTime(concat(toString(session_day), ' 23:00:00'), 'America/New_York')
GROUP BY contract
ORDER BY contractDi last 15 minutes of di regular session busy for both tapes: 8828 AAPL options trades, 54842 SPY. Di 15 minutes after di bell split dem: AAPL manage 0 stray prints (di last one na for 15:59 ET) while SPY print 25621 trades, di last one na for 16:14 ET. Expiration get im own clock — when 0DTE options dey trade show di map.
Futures get totally different clock: CME equity-index futures dey trade nearly 24 hours, from Sunday 6:00 p.m. ET to Friday 5:00 p.m. ET with one-hour daily pause for 5:00 p.m. — na di overnight tape wey dey behind every headline wey talk say "futures don rise dis morning." Di bond market dey trade over-the-counter based on SIFMA recommended hours, roughly 8:00 a.m. to 5:00 p.m. ET, and e get im own holiday calendar: bonds dey close for Columbus Day and Veterans Day while stocks still dey trade.
When stock market dey close?
US stock markets dey close for weekends, for about ten full-day holidays every year, and dem dey close early — by 1:00 p.m. ET — for some few half days wey dem don schedule. Di calendar wey dey below come straight from di exchange schedule and e dey update itself: each holiday dey comot as e pass and di next one dey move up.
The exact SQL behind every number
SELECT
toString(date) AS holiday_date,
formatDateTime(date, '%a') AS weekday,
any(name) AS holiday,
any(status) AS day_status,
any(if(status = 'early-close',
formatDateTime(toTimeZone(close, 'America/New_York'), '%I:%i %p'),
'')) AS early_close_et,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE date >= today()
GROUP BY date
ORDER BY dateDi next closure wey dem schedule na Labor Day for 2026-09-07, 46 days from now, and di calendar wey don load show 12 closures with dates ahead, each one mark as full closure or early close. For early-close day, di regular session dey end by 1:00 p.m. ET instead of 4:00 p.m. — na three and a half hours of trading instead of six and a half — with di closing auction wey dey print by 1:00 p.m. Dis half days dey gada around Thanksgiving and Christmas. Di weekend make-up rules (if holiday fall for Saturday, di market go close di Friday before; if e fall for Sunday, e go close di Monday after), di full calendar, and how to check past closure from di tape dey inside stock market holidays and early closes.
How half day dey show for tape?
Calendar dey name di early closes; tape dey show how e be. Di most recent half day for SPY tape na 2025-12-24, wey be Wednesday: 210 regular-session minute bars from 9:30 a.m. reach di 1:00 p.m. closing auction.
The exact SQL behind every number
WITH
(
SELECT max(d)
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 400
AND window_start < today() - 2
GROUP BY d
HAVING rth_bars >= 150 AND rth_bars <= 240
)
) AS half_day
SELECT
toString(half_day) AS session_date,
formatDateTime(half_day, '%W') AS weekday,
countIf(et_min >= 570 AND et_min < 780) AS morning_session_bars,
formatDateTime(max(et_ts), '%H:%i') AS last_bar_et,
max(et_min) AS last_bar_minute_of_day,
round(sum(volume) / 1e6, 1) AS total_shares_m,
round(100.0 * sumIf(volume, et_min < 570) / sum(volume), 1) AS premarket_pct,
round(100.0 * sumIf(volume, et_min >= 570 AND et_min < 780) / sum(volume), 1) AS regular_pct,
round(100.0 * sumIf(volume, et_min >= 780 AND et_min < 810) / sum(volume), 1) AS post_close_30min_pct,
round(100.0 * sumIf(volume, et_min >= 810) / sum(volume), 1) AS evening_pct,
round(100.0 * sumIf(volume, et_min >= 570 AND et_min < 600) / sum(volume), 1) AS first_30min_pct,
round(100.0 * sumIf(volume, et_min >= 750 AND et_min < 780) / sum(volume), 1) AS last_30min_pct,
round(100.0 * sumIf(volume, et_min >= 750 AND et_min < 780) / sum(volume)
- 100.0 * sumIf(volume, et_min >= 570 AND et_min < 600) / sum(volume), 1) AS close_minus_open_pct
FROM
(
SELECT
volume,
toTimeZone(window_start, 'America/New_York') AS et_ts,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS et_min
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 400
AND toDate(toTimeZone(window_start, 'America/New_York')) = half_day
)Di shape of full day still dey even as dem squeeze am. Out of di 35.6 million SPY shares wey print, di shortened regular session carry 95.5%, and di final half hour before di 1:00 p.m. close carry 23.8% — e well ahead of di opening half hour own wey be 12.2% — na di same closing-auction gravity like normal day, just say dem pull am forward three hours. Di half hour after di close print 3.1% (na di block-report window again) and di rest of di afternoon just 0.1%. Extended hours sef close early: di day last bar print for 16:59 ET — after-hours dey end around 5:00 p.m. for half days, three hours ahead of di usual 8:00 p.m. Options close early too: 1:00 p.m. for single names, 1:15 p.m. for di extended ETF and index contracts.
The exact SQL behind every number
WITH
(
SELECT max(d)
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 400
AND window_start < today() - 2
GROUP BY d
HAVING rth_bars >= 150 AND rth_bars <= 240
)
) AS half_day
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_half_hour,
round(sum(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 400
AND toDate(toTimeZone(window_start, 'America/New_York')) = half_day
GROUP BY et_half_hour
ORDER BY et_half_hourVolume land for 21 half-hour buckets — di familiar busy-open, heavier-close shape wey dem squeeze into three and a half hours.
How many trading days dey inside one year?
If you comot weekends and holidays from calendar year, you go get roughly 250 trading sessions. When you count am from the tape, you go see the exact number:
The exact SQL behind every number
SELECT
count() AS trading_days,
countIf(rth_bars >= 380) AS full_length_sessions,
countIf(rth_bars <= 240) AS shortened_sessions,
countIf(rth_bars > 240 AND rth_bars < 380) AS irregular_sessions,
countIf(is_weekend) AS weekend_sessions,
toString(min(d)) AS first_session,
toString(max(d)) AS last_session
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toDayOfWeek(toDate(toTimeZone(window_start, 'America/New_York'))) >= 6 AS is_weekend,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960) AS rth_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 370
AND window_start < today() - 2
GROUP BY d, is_weekend
HAVING rth_bars > 0
)Between 2025-07-18 and 2026-07-20, the market hold 252 regular sessions — 250 full-length days plus 2 shortened ones — and exactly 0 weekend sessions, wey be the tape own receipt say no Saturday or Sunday hold any regular session.
Stock market hours for di whole world
US hours na just one part of global rotation wey nearly dey continuous. London Stock Exchange dey trade from 8:00 a.m. to 4:30 p.m. local time; di last part of dia session dey always overlap with di first two hours of US regular session — 9:30 to 11:30 a.m. ET — European markets dey close for mid-morning for New York. Tokyo dey trade from 9:00 a.m. to 3:30 p.m. local time with lunch break, and e dey happen entirely inside US overnight time. For almost any weekday, one major exchange dey open somewhere — but US-listed stock go only print during di US hours wey dem measure for dis page.
Stock Market Hours FAQ
Wetin time stock market dey open?
NYSE and Nasdaq dey open regular trading by 9:30 a.m. Eastern Time, from Monday reach Friday. Electronic premarket trading dey start well earlier, by 4:00 a.m. ET, but na di 9:30 a.m. opening auction dem dey use set each stock im official opening price.
Stock market dey open for weekend?
No. US stock exchanges no dey run any session for Saturday or Sunday — di trailing year of tape data wey dey up so show 0 weekend sessions. After Friday im 4:00 p.m. close and im 8:00 p.m. after-hours cutoff, trading go resume with Monday im 4:00 a.m. premarket, aside holidays.
Wetin be pre-market and after-hours trading?
Na electronic trading wey dey happen outside regular hours: premarket dey run from 4:00 a.m. to 9:30 a.m. ET and after-hours dey run from 4:00 p.m. to 8:00 p.m. ET. Both of dem dey operate with fewer participants and wider bid-ask spreads pass di regular session, and plenty brokers dey only accept limit orders for there.
When market dey close early?
For scheduled half days, regular trading dey end by 1:00 p.m. ET instead of 4:00 p.m. — e typically be di Friday after Thanksgiving, Christmas Eve when e fall for weekday, and July 3 for some years. Di trailing year im tape show 2 shortened sessions.
Wetin dey happen if dem halt one stock for close?
One stock wey still dey halted when di closing bell ring no dey get any delayed closing auction dat day — exchange rules no dey allow reopening auction once di halt don pass roughly 3:50 p.m. ET, so di halt just dey continue through di close. With no auction to set price, di exchange go fall back to di volume-weighted average price of di stock im own trades for di final five minutes before di halt as im official closing price — no be just im last trade. Halts na per stock — di rest of di market dey close by 4:00 p.m. on schedule.
Stock market dey close by 4:00 or 4:30?
US stock exchanges dey close regular trading by 4:00 p.m. ET. Quotes wey still dey move after dat time dey come from di after-hours session, wey dey run reach 8:00 p.m. ET, and some index products dey trade reach 4:15 p.m. ET.
Market hours na schedule; di tape na di receipt. Every panel wey dey up so na stored query wey you fit open, edit, and re-run for di Strasmore terminal — check any session, any ticker, or di next closure wey dey ahead.