{"slug":"when-do-mutual-funds-trade","qid":"month_end_close","label":"Month-end sessions vs all other sessions: SPY close concentration, January–June 2026","post_title":"When Do Mutual Funds Trade? NAV Pricing at 4 pm","post_url":"/blog/when-do-mutual-funds-trade#q-month_end_close","columns":["month_end_sessions","other_sessions","month_end_final_half_pct","other_final_half_pct","gap_pp","month_end_final_min_pct","other_final_min_pct"],"rows":[{"month_end_sessions":6,"other_sessions":117,"month_end_final_half_pct":25.1,"other_final_half_pct":18.3,"gap_pp":6.9,"month_end_final_min_pct":5.2,"other_final_min_pct":3.2}],"shape":"scalar","sql":"SELECT\n    countIf(is_month_end) AS month_end_sessions,\n    countIf(NOT is_month_end) AS other_sessions,\n    round(avgIf(final_half_hour_pct, is_month_end), 1) AS month_end_final_half_pct,\n    round(avgIf(final_half_hour_pct, NOT is_month_end), 1) AS other_final_half_pct,\n    round(avgIf(final_half_hour_pct, is_month_end) - avgIf(final_half_hour_pct, NOT is_month_end), 1) AS gap_pp,\n    round(avgIf(final_minute_pct, is_month_end), 1) AS month_end_final_min_pct,\n    round(avgIf(final_minute_pct, NOT is_month_end), 1) AS other_final_min_pct\nFROM (\n    SELECT\n        session_date,\n        final_half_hour_pct,\n        final_minute_pct,\n        session_date = max(session_date) OVER (PARTITION BY toStartOfMonth(session_date)) AS is_month_end\n    FROM (\n        SELECT\n            toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n            100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '15:30') / sum(toFloat64(volume)) AS final_half_hour_pct,\n            100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '15:59') / sum(toFloat64(volume)) AS final_minute_pct\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY'\n          AND toDate(toTimeZone(window_start, 'America/New_York')) >= '2026-01-01'\n          AND toDate(toTimeZone(window_start, 'America/New_York')) < '2026-07-01'\n          AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') BETWEEN '09:30' AND '15:59'\n        GROUP BY session_date\n    )\n)","computed_at":"2026-07-26T06:34:04.864955+00:00","elapsed":0.296333893}