Strasmore Research
Learn Matt ConnorBy Matt Connor · data as of October 2, 2026 · refreshed weekly

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.

QueryWhere US after-hours volume lands in interlisted Canadian names, 15-minute buckets
et_timevolume_millionspct_of_post_closecumulative_pct
16:0011.6154.5154.5
16:150.823.8458.3
16:301.064.9863.3
16:452.1710.1873.5
17:003.415.9889.5
17:151.376.4595.9
17:300.130.696.5
17:450.130.6397.2
18:000.080.3897.5
18:150.060.2797.8
18:300.090.498.2
18:450.060.2698.5
19:000.050.2598.7
19:150.080.499.1
19:300.090.4499.6
19:450.090.44100
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_time
Run this yourself

The 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.

QueryShare of each name's US tape printed outside the regular session
symbolafter_hours_pctpremarket_pct
CNQ2.80.23
SHOP1.922.05
ENB1.860.46
BNS1.720.05
TD0.950.08
CP0.890.03
BMO0.850.09
RY0.820.06
AEM0.621.13
SU0.610.33
TRP0.540.03
MFC0.360.06
CNI0.270.01
The exact SQL behind every number
SELECT
    ticker                                               AS symbol,
    round(100 * sumIf(vol, et_min >= 960) / sum(vol), 2) AS after_hours_pct,
    round(100 * sumIf(vol, et_min <  570) / sum(vol), 2) AS premarket_pct
FROM
(
    SELECT
        ticker,
        toFloat64(volume) AS vol,
        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 IN ('RY', 'TD', 'BNS', 'BMO', 'ENB', 'TRP', 'CNQ', 'SU', 'CP', 'CNI', 'SHOP', 'MFC', 'AEM')
      AND window_start >= today() - 60
      AND window_start <  today() - 1
)
WHERE et_min >= 240 AND et_min < 1200
GROUP BY symbol
HAVING sum(vol) > 0
ORDER BY after_hours_pct DESC
Run this yourself

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.

QueryInterlisted US volume on five days the Toronto market sat closed
labelbasket_volume_millionspct_of_typical_session
Thanksgiving CA, Oct 13 202522.766
Boxing Day, Dec 26 20259.829
Victoria Day, May 18 202626.277
Canada Day, Jul 1 202621.663
Civic Holiday, Aug 3 202624.572
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.d
Run this yourself

On 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.

QueryUpcoming US market closures and early closes
holiday_dateweekdayclosure_labelholidayday_statusdays_away
2026-11-26ThuNov 26Thanksgivingclosed55
2026-11-27FriNov 27Thanksgivingearly-close56
2026-12-24ThuDec 24Christmasearly-close83
2026-12-25FriDec 25Christmasclosed84
2027-01-01FriJan 1New Years Dayclosed91
2027-01-18MonJan 18Martin Luther King, Jr. Dayclosed108
2027-02-15MonFeb 15Washington's Birthdayclosed136
2027-03-26FriMar 26Good Fridayclosed175
2027-05-31MonMay 31Memorial Dayclosed241
2027-06-18FriJun 18Juneteenthclosed259
2027-07-05MonJul 5Independence Dayclosed276
2027-09-06MonSep 6Labor Dayclosed339
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 date
Run this yourself

The 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.