{"slug":"stock-market-hours","qid":"half_day_profile","label":"SPY volume by half hour on the early-close session, premarket through the shortened after-hours (ET clock)","post_title":"Stock Market Hours: Open 9:30, Close 4:00 ET","post_url":"/blog/stock-market-hours#q-half_day_profile","columns":["et_half_hour","shares_m"],"rows":[{"et_half_hour":"04:00","shares_m":0.03},{"et_half_hour":"04:30","shares_m":0},{"et_half_hour":"05:00","shares_m":0.01},{"et_half_hour":"05:30","shares_m":0},{"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.05},{"et_half_hour":"07:30","shares_m":0.03},{"et_half_hour":"08:00","shares_m":0.1},{"et_half_hour":"08:30","shares_m":0.11},{"et_half_hour":"09:00","shares_m":0.13},{"et_half_hour":"09:30","shares_m":4.35},{"et_half_hour":"10:00","shares_m":3.84},{"et_half_hour":"10:30","shares_m":3.24},{"et_half_hour":"11:00","shares_m":4.98},{"et_half_hour":"11:30","shares_m":3.48},{"et_half_hour":"12:00","shares_m":5.61},{"et_half_hour":"12:30","shares_m":8.49},{"et_half_hour":"13:00","shares_m":1.09},{"et_half_hour":"16:00","shares_m":0.02},{"et_half_hour":"16:30","shares_m":0.02}],"shape":"ranking","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() - 400\n          AND window_start < today() - 2\n        GROUP BY d\n        HAVING rth_bars >= 150 AND rth_bars <= 240\n    )\n) AS half_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 window_start >= today() - 400\n  AND toDate(toTimeZone(window_start, 'America/New_York')) = half_day\nGROUP BY et_half_hour\nORDER BY et_half_hour","computed_at":"2026-08-22T04:22:19.227461+00:00","elapsed":0.418069665}