US Stocks 23/5 Trading: The December 2026 Plan
US stocks are set to trade 23/5 from December 6, 2026 if the feeds are ready. What overnight trading does to trade dates, daily bars, volume and LULD bands.
US stocks 23/5 trading is planned to start on Sunday, December 6, 2026, when the two consolidated data feeds behind every US stock quote, the CTA and UTP SIPs, are scheduled to begin running from 9 p.m. ET Sunday to 8 p.m. ET Friday with a one-hour maintenance pause each evening. That adds a new overnight session, 9 p.m. to 4 a.m. ET, in front of pre-market. The mechanics matter more than the headline: every print between 9 p.m. and the next day's 8 p.m. carries one trade date, overnight volume folds into the daily bar, the official open and close stay where they are, and price bands work differently after dark. Every date on this page is a plan that holds only if the SIPs are ready on time.
When does 23/5 trading start for US stocks?
The schedule rests on two documents. SEC order 34-106061 approved the amendments to the CTA and UTP plans that extend the SIPs' operating hours, and UTP Vendor Alert #2026-24 set the target: Sunday, December 6, 2026, first prints at 9 p.m. ET. A SIP, a Securities Information Processor, is the utility that merges every exchange's trades and quotes into one official tape. CTA carries NYSE-listed names and UTP carries Nasdaq-listed ones. From that evening the plan is for both to run 23 hours a day, five days a week:
- 9:00 p.m. to 4:00 a.m. ET: the new overnight session
- 4:00 a.m. to 9:30 a.m. ET: pre-market, unchanged
- 9:30 a.m. to 4:00 p.m. ET: the regular session, unchanged
- 4:00 p.m. to 8:00 p.m. ET: after-hours, unchanged
- 8:00 p.m. to 9:00 p.m. ET: the SIP maintenance pause, no consolidated prints
The week opens at 9 p.m. Sunday and ends at 8 p.m. Friday. Weekends stay dark. The exchanges expected in the first cohort, as of September 2026, are Cboe EDGX, NYSE Arca, 24X National and Nasdaq. Each venue files its own rule change and picks its own start, so read that list as expected rather than settled. The SIPs' readiness is the gating item: if the feeds slip, the whole timeline moves with them. For what you can do tonight, see what you can do today. This page covers what changes on the tape once the SIPs extend.
What does the tape look like today?
Today the consolidated tape runs 4 a.m. to 8 p.m. ET, 16 hours. The panel below groups a month of SPY minute bars by ET clock hour. It assumes no session times and simply reports where prints exist.
| et_hour | volume_millions | share_pct | minute_bars |
|---|---|---|---|
| 04:00 | 1.9 | 0.27 | 907 |
| 05:00 | 0.6 | 0.08 | 816 |
| 06:00 | 0.8 | 0.12 | 831 |
| 07:00 | 3.4 | 0.49 | 1079 |
| 08:00 | 8.8 | 1.28 | 1131 |
| 09:00 | 76.6 | 11.2 | 1139 |
| 10:00 | 91.1 | 13.31 | 1140 |
| 11:00 | 74.4 | 10.87 | 1140 |
| 12:00 | 55.9 | 8.16 | 1140 |
| 13:00 | 50 | 7.3 | 1140 |
| 14:00 | 62.7 | 9.16 | 1140 |
| 15:00 | 173.8 | 25.39 | 1140 |
| 16:00 | 75.5 | 11.04 | 1118 |
| 17:00 | 6.8 | 0.99 | 858 |
| 18:00 | 1.7 | 0.24 | 846 |
| 19:00 | 0.7 | 0.1 | 782 |
The exact SQL behind every number
WITH
(
SELECT sum(volume)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 30
AND window_start < today() - 2
) AS month_volume
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:00') AS et_hour,
round(toFloat64(sum(volume)) / 1e6, 1) AS volume_millions,
round(100 * toFloat64(sum(volume)) / toFloat64(month_volume), 2) AS share_pct,
count() AS minute_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 30
AND window_start < today() - 2
GROUP BY et_hour
HAVING count() >= 5
ORDER BY et_hourThe tape covers 16 clock hours, from 04:00 to 19:00 ET, and prints nothing between 8 p.m. and 4 a.m. That empty stretch is exactly where the plan puts the overnight session, seven hours from 9 p.m. to 4 a.m., plus the maintenance hour before it. The distribution is lopsided: the 04:00 hour carried 0.27% of SPY's volume over the month and the 19:00 hour 0.1%, next to a regular session that takes nearly everything. Overnight volume joins that curve at the thin end of the clock, and our pre-market and after-hours guide describes how a thin book behaves at those hours.
What trade date does an overnight print carry?
Under the plan, the whole 9 p.m. to 8 p.m. window is one trading day, named for the calendar day its regular session falls on. A print at 9:30 p.m. on Sunday, December 6 carries Monday, December 7 as its trade date. A print at 11 p.m. Monday belongs to Tuesday. The 8 p.m. to 9 p.m. pause is the seam between two trade dates.
Note what that does to a calendar. The wall-clock date of that Sunday 9:30 p.m. print is Sunday; its trade date is Monday. Any logic that groups prints by ET calendar date, including the SQL under every panel on this page, is correct today for one reason: nothing prints after 8 p.m. Once the extension is live, prints after 9 p.m. ET roll into the next trade date, and "group by ET date" has to become "group by ET date, shifted forward after 9 p.m."
The timestamps behind each panel are stored in UTC and converted to New York time before a date is assigned. In December, Eastern time is UTC minus five, so a print stamped 02:30 UTC on Monday is a 9:30 p.m. ET Sunday print with a Monday trade date. The market data timestamps guide walks through the conversion.
What happens to the daily OHLCV bar?
A daily OHLCV bar (open, high, low, close, volume) is built from the consolidated tape by rule. Consolidated daily volume counts every eligible print with that trade date, whichever session it occurred in. Today that already means pre-market and after-hours volume sits inside the daily bar. After the extension, overnight volume joins it. The official open stays the 9:30 a.m. opening auction and the official close stays the 4:00 p.m. closing auction. Neither moves. The first print at 9 p.m. is not the open, and the last print before 8 p.m. is not the close.
| session_date | session_label | daily_bar_millions | regular_session_millions | outside_regular_pct |
|---|---|---|---|---|
| 2026-08-17 | Aug 17 | 34.4 | 28.4 | 17.44 |
| 2026-08-18 | Aug 18 | 43.9 | 34.4 | 21.62 |
| 2026-08-19 | Aug 19 | 40.3 | 31 | 23.11 |
| 2026-08-20 | Aug 20 | 45.5 | 38 | 16.61 |
| 2026-08-21 | Aug 21 | 39.2 | 33.7 | 14.06 |
| 2026-08-24 | Aug 24 | 32.4 | 27.2 | 16.01 |
| 2026-08-25 | Aug 25 | 27.4 | 24 | 12.45 |
| 2026-08-26 | Aug 26 | 28.8 | 22.9 | 20.41 |
| 2026-08-27 | Aug 27 | 34.6 | 28.8 | 16.74 |
| 2026-08-28 | Aug 28 | 36.7 | 31.6 | 13.96 |
| 2026-08-31 | Aug 31 | 38.8 | 29.8 | 23.25 |
| 2026-09-01 | Sep 1 | 41.1 | 32.2 | 21.78 |
| 2026-09-02 | Sep 2 | 29.6 | 22.4 | 24.22 |
| 2026-09-03 | Sep 3 | 43.5 | 35.5 | 18.41 |
| 2026-09-04 | Sep 4 | 34.1 | 26.8 | 21.39 |
| 2026-09-08 | Sep 8 | 44.7 | 31.8 | 28.85 |
| 2026-09-09 | Sep 9 | 32.8 | 27.5 | 16.23 |
| 2026-09-10 | Sep 10 | 42.7 | 37.3 | 12.82 |
| 2026-09-11 | Sep 11 | 45.5 | 36.9 | 18.93 |
The exact SQL behind every number
SELECT
toString(daily.date) AS session_date,
concat(formatDateTime(daily.date, '%b'), ' ', toString(toDayOfMonth(daily.date))) AS session_label,
round(toFloat64(daily.day_volume) / 1e6, 1) AS daily_bar_millions,
round(toFloat64(intraday.regular_volume) / 1e6, 1) AS regular_session_millions,
round(100 * (toFloat64(daily.day_volume) - toFloat64(intraday.regular_volume))
/ toFloat64(daily.day_volume), 2) AS outside_regular_pct
FROM
(
SELECT
date,
max(volume) AS day_volume
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= today() - 30
AND date < today() - 2
GROUP BY date
) AS daily
INNER JOIN
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(volume) AS regular_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 30
AND window_start < today() - 2
AND (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
GROUP BY et_date
) AS intraday ON intraday.et_date = daily.date
ORDER BY daily.dateOn Sep 11, SPY's daily bar carried 45.5 million shares, of which 36.9 million traded inside the 9:30 to 4:00 clock window, leaving 18.93% of the day outside the regular session. That gap is today's extended-hours share, and it is the line that steps up once the tape adds seven more hours. How OHLCV bars are built covers the auction-based open and close in detail.
Prints outside the regular session carry the Form T sale condition, and Form T prints never update the last-sale price or the session high and low. They do update consolidated volume. Under the plan the overnight session inherits the same treatment: a 2 a.m. print adds to volume and leaves last sale untouched. The codes involved are already defined on the tape.
| id | condition_name | meaning |
|---|---|---|
| 12 | Form T/Extended Hours | |
| 13 | Extended Hours (Sold Out Of Sequence) | |
| 248 | Extended Hours Trade | Transaction represents a trade that was executed outside of regular market hours. Trades do not update Open, High, Low, and Closing Prices. |
The exact SQL behind every number
SELECT
id,
any(name) AS condition_name,
any(description) AS meaning
FROM global_markets.stocks_condition_codes
WHERE name ILIKE '%form t%'
OR name ILIKE '%extended%hours%'
GROUP BY id
ORDER BY idThe tape defines 3 extended-hours sale conditions, the first of them Form T/Extended Hours. Trade condition codes explained decodes the full list, including which codes are allowed to move last sale.
How do I compare volume across the December boundary?
If the plan holds, a January 2027 daily volume set against a November 2026 one compares a 23-hour trade date with a 16-hour one. The fix is to compare like with like: slice the tape by ET clock time and hold the slice fixed on both sides of the boundary. The regular-session slice, 9:30 to 4:00, is untouched by the extension and makes the cleanest baseline. The panel below measures how large the outside-regular share already is for seven household names. It is the share a naive before-and-after comparison would silently inflate.
| ticker | premarket_pct | after_hours_pct | outside_regular_pct |
|---|---|---|---|
| SPY | 2.89 | 12.37 | 15.26 |
| NVDA | 3.8 | 7.86 | 11.65 |
| MSFT | 4.81 | 4.84 | 9.65 |
| AAPL | 2.74 | 4.48 | 7.22 |
| KO | 0.72 | 5.64 | 6.36 |
| AMZN | 2.48 | 3.21 | 5.7 |
| TSLA | 2.75 | 2.06 | 4.81 |
The exact SQL behind every number
SELECT
ticker,
round(100 * toFloat64(sumIf(volume, minute_of_day < 570)) / toFloat64(sum(volume)), 2) AS premarket_pct,
round(100 * toFloat64(sumIf(volume, minute_of_day >= 960)) / toFloat64(sum(volume)), 2) AS after_hours_pct,
round(100 * toFloat64(sumIf(volume, minute_of_day < 570 OR minute_of_day >= 960))
/ toFloat64(sum(volume)), 2) AS outside_regular_pct
FROM
(
SELECT
ticker,
volume,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS minute_of_day
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'AMZN', 'KO')
AND window_start >= today() - 30
AND window_start < today() - 2
)
GROUP BY ticker
HAVING sum(volume) > 0
ORDER BY outside_regular_pct DESCOver the trailing month, SPY printed 15.26% of its volume outside the regular session, the largest share of the seven, split 2.89% pre-market and 12.37% after-hours. TSLA sat at the other end at 4.81%. A ranking of names by total volume can reorder after the extension purely on who trades overnight, with the regular-session slice unchanged. Keep a regular-session volume series next to the consolidated one, as the panel above does, and compare December to November on that series.
How do LULD bands work overnight?
Limit Up-Limit Down (LULD) is the price-band mechanism that limits, then pauses, a stock moving outside a band around a reference price. In the regular session the reference price rolls: it is recomputed from the prior five minutes of trading, and the bands move with it. The overnight plan is different. Bands are static: published once at 9 p.m. ET off the reference price available then and held for the whole overnight session. The quote feed's LULD price-band indicator gains two values, G and H, set aside for the overnight regime, so a data consumer can tell an overnight band from a daytime one. A static band never re-centers, so a stock that moves a long way after 9 p.m. sits against it until the daytime machinery restarts. Why stocks halt under Limit Up-Limit Down covers the daytime regime.
What if the SIPs are not ready?
Two pieces of the plumbing are already ahead of the tape. NSCC, the clearinghouse that nets and guarantees US equity trades, has run 24/5 since June 29, 2026 (as of September 2026), so an overnight trade already has a clearing path and settles T+1 from its trade date like any daytime trade. And 24X National holds SEC exemptive relief that takes effect January 24, 2027. That relief is the stated fallback: if the SIPs' December date slips, 24X's overnight session can open under it ahead of the consolidated feeds. Either way the launch keys off the SIPs' readiness, and every date on this page reads as "planned for" rather than "happening on". The SIP vs direct exchange feeds guide explains why the consolidated feed is the thing that has to be ready.
FAQ
When does 23/5 stock trading start?
The plan is Sunday, December 6, 2026 at 9 p.m. ET, when the CTA and UTP SIPs are scheduled to begin 23-hour operation under SEC order 34-106061 and UTP Vendor Alert #2026-24. The date holds only if the SIPs are ready. If they slip, the exchanges' overnight sessions move with them.
What trade date does a Sunday night stock trade have?
Monday. Under the plan the trading day runs from 9 p.m. ET to 8 p.m. ET the next evening, so a print at 9:30 p.m. Sunday carries Monday's trade date and counts toward Monday's consolidated volume.
Does overnight trading change the official open and close?
No. The official open remains the 9:30 a.m. ET opening auction and the official close remains the 4:00 p.m. ET closing auction. Overnight prints carry the Form T condition: they add to volume and never update the last-sale price.
Do LULD price bands apply during the overnight session?
Yes, in a static form. Under the plan the bands are published once at 9 p.m. ET for the whole overnight session, rather than rolling as they do in the regular session, and the quote feed marks them with the new indicator values G and H.
Every panel above carries its SQL. Expand it to see exactly how a session slice was cut, or run the same clock-hour breakdown on any ticker from the Strasmore terminal.