{"slug":"tsx-trading-hours-and-holidays","qid":"after_hours_drift","label":"How far Shopify's US price wanders after the 4 p.m. close, May to July 2026","post_title":"TSX Trading Hours and Holidays vs NYSE","post_url":"/blog/tsx-trading-hours-and-holidays#q-after_hours_drift","columns":["et_time","avg_abs_move_pct","session_count"],"rows":[{"et_time":"16:00","avg_abs_move_pct":0.224,"session_count":63},{"et_time":"16:15","avg_abs_move_pct":0.256,"session_count":59},{"et_time":"16:30","avg_abs_move_pct":0.33,"session_count":57},{"et_time":"16:45","avg_abs_move_pct":0.299,"session_count":53},{"et_time":"17:00","avg_abs_move_pct":0.37,"session_count":47},{"et_time":"17:15","avg_abs_move_pct":0.386,"session_count":46},{"et_time":"17:30","avg_abs_move_pct":0.349,"session_count":48},{"et_time":"17:45","avg_abs_move_pct":0.418,"session_count":48},{"et_time":"18:00","avg_abs_move_pct":0.415,"session_count":46},{"et_time":"18:15","avg_abs_move_pct":0.424,"session_count":52},{"et_time":"18:30","avg_abs_move_pct":0.523,"session_count":43},{"et_time":"18:45","avg_abs_move_pct":0.438,"session_count":49},{"et_time":"19:00","avg_abs_move_pct":0.408,"session_count":49},{"et_time":"19:15","avg_abs_move_pct":0.425,"session_count":46},{"et_time":"19:30","avg_abs_move_pct":0.422,"session_count":50},{"et_time":"19:45","avg_abs_move_pct":0.404,"session_count":53}],"shape":"series","sql":"SELECT\n    formatDateTime(b.bucket, '%H:%i')                                     AS et_time,\n    round(avg(abs(toFloat64(b.px) / toFloat64(c.close_px) - 1)) * 100, 3) AS avg_abs_move_pct,\n    count()                                                               AS session_count\nFROM\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York'))                               AS d,\n        toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 MINUTE) AS bucket,\n        argMax(close, window_start)                                                        AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SHOP'\n      AND window_start >= '2026-05-01 04:00:00'\n      AND window_start <  '2026-08-01 04:00:00'\n      AND volume > 0\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 960\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) <  1200\n    GROUP BY d, bucket\n) AS b\nINNER JOIN\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n        argMax(close, window_start)                          AS close_px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SHOP'\n      AND window_start >= '2026-05-01 04:00:00'\n      AND window_start <  '2026-08-01 04:00:00'\n      AND volume > 0\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960\n    GROUP BY d\n) AS c ON c.d = b.d\nGROUP BY et_time\nHAVING count() >= 10\nORDER BY et_time","computed_at":"2026-08-19T16:12:29.963468+00:00","elapsed":0.004204576}