{"slug":"mutual-fund-cutoffs-on-early-close-days","qid":"session_shape","label":"Minute bars and volume per session: early closes against full sessions, Nov-Dec 2025","post_title":"Mutual Fund Cutoffs on Early-Close Days","post_url":"/blog/mutual-fund-cutoffs-on-early-close-days#q-session_shape","columns":["category","sessions","avg_minute_bars","avg_volume_millions"],"rows":[{"category":"Early close 1 p.m.","sessions":2,"avg_minute_bars":211,"avg_volume_millions":37.1},{"category":"Full session 4 p.m.","sessions":27,"avg_minute_bars":390,"avg_volume_millions":69.8}],"shape":"ranking","sql":"WITH day_totals AS\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n        count()                                              AS regular_bars,\n        sum(volume)                                          AS regular_volume\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= '2025-11-20 00:00:00'\n      AND window_start <  '2026-01-03 06:00:00'\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 et_date\n)\nSELECT\n    if(regular_bars < 300, 'Early close 1 p.m.', 'Full session 4 p.m.') AS category,\n    count()                                                            AS sessions,\n    round(avg(regular_bars))                                           AS avg_minute_bars,\n    round(avg(regular_volume) / 1e6, 1)                                AS avg_volume_millions\nFROM day_totals\nGROUP BY category\nORDER BY avg_minute_bars","computed_at":"2026-09-27T15:02:18.100533+00:00","elapsed":0.003286198}