{"slug":"mutual-fund-cutoffs-on-early-close-days","qid":"half_day_tape","label":"SPY volume by half hour: a 1:00 p.m. half day against an ordinary Friday","post_title":"Mutual Fund Cutoffs on Early-Close Days","post_url":"/blog/mutual-fund-cutoffs-on-early-close-days#q-half_day_tape","columns":["et_time","half_day_volume_m","regular_day_volume_m"],"rows":[{"et_time":"09:30","half_day_volume_m":4.86,"regular_day_volume_m":7.45},{"et_time":"10:00","half_day_volume_m":4.03,"regular_day_volume_m":5.53},{"et_time":"10:30","half_day_volume_m":3.83,"regular_day_volume_m":4.71},{"et_time":"11:00","half_day_volume_m":4.53,"regular_day_volume_m":4.09},{"et_time":"11:30","half_day_volume_m":5.48,"regular_day_volume_m":3.97},{"et_time":"12:00","half_day_volume_m":4.14,"regular_day_volume_m":2.37},{"et_time":"12:30","half_day_volume_m":9.99,"regular_day_volume_m":3},{"et_time":"13:00","half_day_volume_m":2.36,"regular_day_volume_m":2.63},{"et_time":"13:30","half_day_volume_m":0,"regular_day_volume_m":2.27},{"et_time":"14:00","half_day_volume_m":0,"regular_day_volume_m":2.37},{"et_time":"14:30","half_day_volume_m":0,"regular_day_volume_m":2.77},{"et_time":"15:00","half_day_volume_m":0,"regular_day_volume_m":3.29},{"et_time":"15:30","half_day_volume_m":0,"regular_day_volume_m":10.47}],"shape":"series","sql":"SELECT\n    formatDateTime(\n        toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),\n        '%H:%i')                                                AS et_time,\n    round(sumIf(volume, toDate(toTimeZone(window_start, 'America/New_York')) = '2025-11-28') / 1e6, 2) AS half_day_volume_m,\n    round(sumIf(volume, toDate(toTimeZone(window_start, 'America/New_York')) = '2025-12-05') / 1e6, 2) AS regular_day_volume_m\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND window_start >= '2025-11-28 00:00:00'\n  AND window_start <  '2025-12-06 06:00:00'\n  AND toDate(toTimeZone(window_start, 'America/New_York')) IN ('2025-11-28', '2025-12-05')\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\nGROUP BY et_time\nORDER BY et_time","computed_at":"2026-09-27T15:02:18.002080+00:00","elapsed":0.004152725}