{"slug":"stock-market-hours","qid":"clock_profile","label":"SPY volume by half hour, premarket through after-hours (same session, ET clock)","post_title":"Stock Market Hours: Open 9:30, Close 4:00 ET","post_url":"/blog/stock-market-hours#q-clock_profile","columns":["et_half_hour","shares_m"],"rows":[{"et_half_hour":"04:00","shares_m":0.08},{"et_half_hour":"04:30","shares_m":0.01},{"et_half_hour":"05:00","shares_m":0.01},{"et_half_hour":"05:30","shares_m":0.02},{"et_half_hour":"06:00","shares_m":0.01},{"et_half_hour":"06:30","shares_m":0.01},{"et_half_hour":"07:00","shares_m":0.04},{"et_half_hour":"07:30","shares_m":0.02},{"et_half_hour":"08:00","shares_m":0.08},{"et_half_hour":"08:30","shares_m":1.02},{"et_half_hour":"09:00","shares_m":0.32},{"et_half_hour":"09:30","shares_m":3.95},{"et_half_hour":"10:00","shares_m":2.15},{"et_half_hour":"10:30","shares_m":2.28},{"et_half_hour":"11:00","shares_m":1.63},{"et_half_hour":"11:30","shares_m":1.92},{"et_half_hour":"12:00","shares_m":1.19},{"et_half_hour":"12:30","shares_m":2.03},{"et_half_hour":"13:00","shares_m":1.42},{"et_half_hour":"13:30","shares_m":1.14},{"et_half_hour":"14:00","shares_m":1.67},{"et_half_hour":"14:30","shares_m":1.39},{"et_half_hour":"15:00","shares_m":2.43},{"et_half_hour":"15:30","shares_m":7.79},{"et_half_hour":"16:00","shares_m":6.08},{"et_half_hour":"16:30","shares_m":0.13},{"et_half_hour":"17:00","shares_m":0.04},{"et_half_hour":"17:30","shares_m":0.01},{"et_half_hour":"18:00","shares_m":0.04},{"et_half_hour":"18:30","shares_m":0.02},{"et_half_hour":"19:00","shares_m":0.02},{"et_half_hour":"19:30","shares_m":0.02}],"shape":"table","sql":"WITH\n(\n    SELECT max(d)\n    FROM\n    (\n        SELECT\n            toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n            countIf((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) AS rth_bars\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY'\n          AND window_start >= today() - 21\n          AND window_start < today() - 2\n        GROUP BY d\n        HAVING rth_bars = 390\n    )\n) AS session_day\nSELECT\n    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_half_hour,\n    round(sum(volume) / 1e6, 2) AS shares_m\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND toDate(toTimeZone(window_start, 'America/New_York')) = session_day\nGROUP BY et_half_hour\nORDER BY et_half_hour","computed_at":"2026-08-22T04:22:17.785280+00:00","elapsed":0.107036985}