{"slug":"best-time-of-day-to-sell-mutual-funds","qid":"intraday_gap","label":"How far SPY trades from its own open and close, by time of day","post_title":"Best Time of Day to Sell a Mutual Fund","post_url":"/blog/best-time-of-day-to-sell-mutual-funds#q-intraday_gap","columns":["et_time","avg_gap_to_close_pct","avg_gap_to_open_pct"],"rows":[{"et_time":"09:30","avg_gap_to_close_pct":0.455,"avg_gap_to_open_pct":0.135},{"et_time":"10:00","avg_gap_to_close_pct":0.41,"avg_gap_to_open_pct":0.236},{"et_time":"10:30","avg_gap_to_close_pct":0.372,"avg_gap_to_open_pct":0.286},{"et_time":"11:00","avg_gap_to_close_pct":0.331,"avg_gap_to_open_pct":0.326},{"et_time":"11:30","avg_gap_to_close_pct":0.309,"avg_gap_to_open_pct":0.361},{"et_time":"12:00","avg_gap_to_close_pct":0.277,"avg_gap_to_open_pct":0.385},{"et_time":"12:30","avg_gap_to_close_pct":0.26,"avg_gap_to_open_pct":0.406},{"et_time":"13:00","avg_gap_to_close_pct":0.243,"avg_gap_to_open_pct":0.424},{"et_time":"13:30","avg_gap_to_close_pct":0.216,"avg_gap_to_open_pct":0.441},{"et_time":"14:00","avg_gap_to_close_pct":0.195,"avg_gap_to_open_pct":0.445},{"et_time":"14:30","avg_gap_to_close_pct":0.174,"avg_gap_to_open_pct":0.457},{"et_time":"15:00","avg_gap_to_close_pct":0.144,"avg_gap_to_open_pct":0.481},{"et_time":"15:30","avg_gap_to_close_pct":0.09,"avg_gap_to_open_pct":0.493}],"shape":"series","sql":"WITH bars AS\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York'))  AS session_day,\n        toTimeZone(window_start, 'America/New_York')          AS et,\n        toFloat64(close)                                      AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= today() - 370\n      AND window_start <  today() - 2\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),\nanchors AS\n(\n    SELECT\n        session_day,\n        argMin(px, et) AS open_px,\n        argMax(px, et) AS close_px\n    FROM bars\n    GROUP BY session_day\n)\nSELECT\n    formatDateTime(toStartOfInterval(b.et, INTERVAL 30 MINUTE), '%H:%i') AS et_time,\n    round(avg(abs(b.px / a.close_px - 1)) * 100, 3)                      AS avg_gap_to_close_pct,\n    round(avg(abs(b.px / a.open_px  - 1)) * 100, 3)                      AS avg_gap_to_open_pct\nFROM bars AS b\nINNER JOIN anchors AS a ON a.session_day = b.session_day\nGROUP BY et_time\nORDER BY et_time","computed_at":"2026-08-22T04:01:39.172046+00:00","elapsed":0.966410421}