Does Canada Have After-Hours Trading?
Does Canada have after-hours trading? The TSX runs a 4:15 to 5:00 p.m. ET last sale session, with no price discovery. Here is how it differs from the US.
Does Canada have after-hours trading? Yes, though not in the form a US trader pictures. The Toronto Stock Exchange runs an Extended Trading session from 4:15 p.m. to 5:00 p.m. ET in which orders execute only at the day's last sale price, while the US after-hours session quotes and trades continuously from 4:00 p.m. to 8:00 p.m. ET on many venues. Canada's post-close window moves shares at a price that is already fixed. The US window keeps setting a new one. Our after-hours and premarket trading guide covers the US session in detail; this page is about what Canada does instead, and what the gap means for a company listed in both countries.
Canada's session structure, start to finish
The exchange publishes its own session clock, and as of October 2026 a Toronto trading day runs like this.
- Pre-open, 7:00 a.m. to 9:30 a.m. ET. Orders queue and a calculated opening price updates continuously. Nothing executes.
- Continuous trading, 9:30 a.m. to 4:00 p.m. ET. The order book works the way a US regular session does, matching on price and time.
- Market on Close, 3:50 p.m. to 4:00 p.m. ET. An order imbalance is published at 3:50 p.m., amendments freeze at 3:56 p.m., and the single closing print lands at 4:00 p.m.
- Price Movement Extension, 4:00 p.m. to 4:10 p.m. ET. This runs only when the calculated closing price breaches the exchange's movement parameters.
- Post-market cancel, 4:10 p.m. to 4:15 p.m. ET. Dealers may cancel resting orders. No executions happen.
- Extended Trading, 4:15 p.m. to 5:00 p.m. ET. Board lots, odd lots and crosses print at the last sale price.
That final 45 minutes is the whole of Canada's listed-market after-hours trading, and its defining feature is the price. The last sale price is the official close set by the Market on Close auction, or the last independent trade from the continuous book when no closing auction prints. Where the close sits on a half tick, a rounded equivalent is used, so a $5.815 close becomes $5.82. Resting orders priced at or better than that level carry forward from the continuous book and are repriced to it. Nothing trades above or below.
Canada's alternative marketplaces stretch the clock a little without changing the logic. The Nasdaq CXC and CX2 books in Canada run from 8:00 a.m. to 5:00 p.m. ET, so a Canadian-listed name can trade ahead of Toronto's open and past its close on another venue, with 5:00 p.m. ET as the practical outer edge in either direction. The TSX trading hours and holidays breakdown has the calendar detail, and stock market hours sets out the US clock the comparison rests on.
What four hours of post-close discovery looks like
Several of Canada's largest companies are interlisted, meaning the same shares trade in Toronto and on a US exchange. Those US lines keep quoting after 4:00 p.m. ET, which gives a clean read on what continuous post-close activity actually looks like in Canadian names.
| et_time | volume_millions | pct_of_post_close | cumulative_pct |
|---|---|---|---|
| 16:00 | 11.61 | 54.51 | 54.5 |
| 16:15 | 0.82 | 3.84 | 58.3 |
| 16:30 | 1.06 | 4.98 | 63.3 |
| 16:45 | 2.17 | 10.18 | 73.5 |
| 17:00 | 3.4 | 15.98 | 89.5 |
| 17:15 | 1.37 | 6.45 | 95.9 |
| 17:30 | 0.13 | 0.6 | 96.5 |
| 17:45 | 0.13 | 0.63 | 97.2 |
| 18:00 | 0.08 | 0.38 | 97.5 |
| 18:15 | 0.06 | 0.27 | 97.8 |
| 18:30 | 0.09 | 0.4 | 98.2 |
| 18:45 | 0.06 | 0.26 | 98.5 |
| 19:00 | 0.05 | 0.25 | 98.7 |
| 19:15 | 0.08 | 0.4 | 99.1 |
| 19:30 | 0.09 | 0.44 | 99.6 |
| 19:45 | 0.09 | 0.44 | 100 |
The exact SQL behind every number
SELECT
et_time,
round(vol / 1e6, 2) AS volume_millions,
round(100 * vol / sum(vol) OVER (), 2) AS pct_of_post_close,
round(100 * sum(vol) OVER (ORDER BY et_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
/ sum(vol) OVER (), 1) AS cumulative_pct
FROM
(
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 minute), '%H:%i') AS et_time,
sum(toFloat64(volume)) AS vol
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('RY', 'TD', 'BNS', 'BMO', 'ENB', 'TRP', 'CNQ', 'SU', 'CP', 'CNI', 'SHOP', 'MFC', 'AEM')
AND window_start >= today() - 60
AND window_start < today() - 1
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 960
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 1200
GROUP BY et_time
)
ORDER BY et_timeThe basket holds thirteen Canadian companies with US listings, measured over the last 60 calendar days of the US tape. The bucket beginning 16:00 ET carries 54.51% of all post-close volume in those names, and the curve keeps printing in every fifteen-minute bucket out to the 8:00 p.m. ET finish. Through the end of the bucket beginning 16:45 ET, the last one that overlaps Toronto's 4:15 p.m. window, 73.5% of the post-close total is done. The rest arrives during the three hours Canada's calendar does not cover, and even the final bucket of the night printed 0.09 million shares.
Interlisted names are where the mismatch costs money
An interlisted holder owns one economic interest priced on two clocks. The Toronto line stops repricing at 4:00 p.m. ET and its extended session is capped at the close. The US line keeps trading for four more hours, which is where overnight news in a Canadian company first shows up in a price.
The after-hours share of the tape is thin in absolute terms and uneven across names. Over the same window, CNQ printed 2.8% of its 4:00 a.m. to 8:00 p.m. ET volume after the 4:00 p.m. close, the largest share in the basket, against 0.27% for the smallest. Premarket trading in the same name ran at 0.23% of its volume. Those small percentages still set the opening reference the Toronto book has to meet the next morning at 9:30 a.m. ET, which is the practical cost of the mismatch: a Canadian investor watching a 6:30 p.m. ET price move in an interlisted name has no Canadian venue to act on it, and the Toronto pre-open simply queues orders until the auction.
When one country takes the day off
The TSX observes six statutory closures the US market does not keep, and the US market keeps several Canada does not. Five Toronto closures from the past year fell on days the US market held a full session, so the interlisted US line traded alone.
| label | basket_volume_millions | pct_of_typical_session |
|---|---|---|
| Thanksgiving CA, Oct 13 2025 | 22.7 | 66 |
| Boxing Day, Dec 26 2025 | 9.8 | 29 |
| Victoria Day, May 18 2026 | 26.2 | 77 |
| Canada Day, Jul 1 2026 | 21.6 | 63 |
| Civic Holiday, Aug 3 2026 | 24.5 | 72 |
The exact SQL behind every number
SELECT
h.label AS label,
round(h.day_volume / 1e6, 1) AS basket_volume_millions,
round(100 * h.day_volume / b.typical_volume, 0) AS pct_of_typical_session
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
multiIf(d = toDate('2025-10-13'), 'Thanksgiving CA, Oct 13 2025',
d = toDate('2025-12-26'), 'Boxing Day, Dec 26 2025',
d = toDate('2026-05-18'), 'Victoria Day, May 18 2026',
d = toDate('2026-07-01'), 'Canada Day, Jul 1 2026',
'Civic Holiday, Aug 3 2026') AS label,
sum(toFloat64(volume)) AS day_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('RY', 'TD', 'BNS', 'BMO', 'ENB', 'TRP', 'CNQ', 'SU', 'CP', 'CNI', 'SHOP', 'MFC', 'AEM')
AND window_start >= '2025-10-12 00:00:00'
AND window_start < '2026-08-05 00:00:00'
AND toDate(toTimeZone(window_start, 'America/New_York')) IN
(toDate('2025-10-13'), toDate('2025-12-26'), toDate('2026-05-18'), toDate('2026-07-01'), toDate('2026-08-03'))
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 d, label
) AS h
CROSS JOIN
(
SELECT quantileDeterministic(0.5)(dv, dk) AS typical_volume
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d2,
toUInt32(toYYYYMMDD(toDate(toTimeZone(window_start, 'America/New_York')))) AS dk,
sum(toFloat64(volume)) AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('RY', 'TD', 'BNS', 'BMO', 'ENB', 'TRP', 'CNQ', 'SU', 'CP', 'CNI', 'SHOP', 'MFC', 'AEM')
AND window_start >= today() - 400
AND window_start < today() - 1
AND toDate(toTimeZone(window_start, 'America/New_York')) NOT IN
(toDate('2025-10-13'), toDate('2025-12-26'), toDate('2026-05-18'), toDate('2026-07-01'), toDate('2026-08-03'))
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 d2, dk
HAVING dv > 0
)
) AS b
ORDER BY h.dOn Thanksgiving CA, Oct 13 2025 the basket traded 22.7 million shares during US regular hours, or 66% of a typical session in the same names. On Boxing Day, Dec 26 2025 it ran at 29%. All five days printed under a normal session, which is the shape to expect when the home book is dark and interlisted flow has one side to work with. The US after-hours window on those days is thinner still.
| holiday_date | weekday | closure_label | holiday | day_status | days_away |
|---|---|---|---|---|---|
| 2026-11-26 | Thu | Nov 26 | Thanksgiving | closed | 55 |
| 2026-11-27 | Fri | Nov 27 | Thanksgiving | early-close | 56 |
| 2026-12-24 | Thu | Dec 24 | Christmas | early-close | 83 |
| 2026-12-25 | Fri | Dec 25 | Christmas | closed | 84 |
| 2027-01-01 | Fri | Jan 1 | New Years Day | closed | 91 |
| 2027-01-18 | Mon | Jan 18 | Martin Luther King, Jr. Day | closed | 108 |
| 2027-02-15 | Mon | Feb 15 | Washington's Birthday | closed | 136 |
| 2027-03-26 | Fri | Mar 26 | Good Friday | closed | 175 |
| 2027-05-31 | Mon | May 31 | Memorial Day | closed | 241 |
| 2027-06-18 | Fri | Jun 18 | Juneteenth | closed | 259 |
| 2027-07-05 | Mon | Jul 5 | Independence Day | closed | 276 |
| 2027-09-06 | Mon | Sep 6 | Labor Day | closed | 339 |
The exact SQL behind every number
SELECT
toString(date) AS holiday_date,
formatDateTime(date, '%a') AS weekday,
formatDateTime(date, '%b %e') AS closure_label,
any(name) AS holiday,
any(status) AS day_status,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE date >= today()
GROUP BY date
ORDER BY dateThe reverse case runs off the US calendar, which lists 12 dated closures ahead, starting with Thanksgiving on Nov 26, 55 days from today. Toronto trades through several of them: US Thanksgiving falls on the fourth Thursday of November while Canada's is the second Monday of October, and Washington's Birthday, Juneteenth, Independence Day and the Friday half-day after US Thanksgiving have no Canadian counterpart. On those dates an interlisted name has a live Toronto book and a dark US one, with no US after-hours session at all. The two calendars agree on New Year's Day, Good Friday, Labour Day and Christmas. After-hours trading on holidays and weekends covers the half-day and weekend variants.
Order types in a last-sale session
A fixed execution price changes what an order type can do.
- A market order has nothing to seek in Toronto's Extended Trading session, since every fill prints at the last sale price.
- A limit order at or better than the last sale price is what participates. One priced away from it sits unfilled.
- Stop orders and anything that triggers off a moving quote have no trigger in a frozen-price window.
- Day orders expire at 5:00 p.m. ET, and what remains starts the next morning in the 7:00 a.m. pre-open queue.
The US session imposes a different constraint. Brokers there generally accept limit orders only, routed to a single venue rather than into a consolidated auction, and partial fills are the norm at thin sizes. Overnight trading order types walks through the handling rules once the clock runs past 8:00 p.m. ET.
FAQ
Does the TSX have after-hours trading?
Yes, one 45-minute session. Toronto's Extended Trading session runs from 4:15 p.m. to 5:00 p.m. ET, and every trade in it prints at the day's last sale price. There is no continuous quoting after 4:00 p.m. ET of the kind the US market offers until 8:00 p.m. ET.
Can I trade Canadian stocks after 5 p.m. ET?
Not on the Canadian listing. Toronto's extended session ends at 5:00 p.m. ET and the Canadian alternative marketplaces stop at the same hour. For an interlisted company the US line keeps trading until 8:00 p.m. ET, and access depends on whether the broker offers extended hours on US-listed securities.
What is the last sale price on the TSX?
It is the official closing price from the Market on Close auction, or the last independent trade from the continuous session when no closing auction prints. It is the only price at which the 4:15 p.m. session executes, rounded up to the nearest valid tick when the close lands on a half tick.
How does Canadian after-hours trading differ from the US session?
Price discovery. The US window quotes and trades for four hours past the close, so prices keep moving. Canada's window moves shares at a price already set, which leaves the post-close book with nothing to reprice.
Is the Toronto market open on US holidays?
Often. The two calendars share New Year's Day, Good Friday, Labour Day and Christmas. Toronto trades on Washington's Birthday, Juneteenth, Independence Day and US Thanksgiving, and closes for Family Day, Victoria Day, Canada Day, the August civic holiday, Canadian Thanksgiving and Boxing Day.
Every panel here carries the exact SQL beneath it, so the bucketing is open to inspection. To ask where a specific interlisted name's volume lands after 4:00 p.m. ET, put the question in plain English on the Strasmore terminal.