canada_holiday_sessions
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-02, from canada-after-hours-trading.
| 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 |
- Rows × columns
- 5 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
label |
text | 5 distinct values | |
basket_volume_millions |
number | 9.8 to 26.2 | count |
pct_of_typical_session |
number | 29 to 77 | percent |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
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
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.