{"slug":"mutual-fund-frequent-trading-limits","qid":"block_windows","label":"Trading sessions inside common calendar-day block windows","post_title":"Mutual Fund Frequent Trading Limits Explained","post_url":"/blog/mutual-fund-frequent-trading-limits#q-block_windows","columns":["block_window","trading_sessions"],"rows":[{"block_window":"30 calendar days","trading_sessions":20},{"block_window":"60 calendar days","trading_sessions":41},{"block_window":"90 calendar days","trading_sessions":61},{"block_window":"180 calendar days","trading_sessions":124}],"shape":"ranking","sql":"SELECT\n    concat(toString(w.days), ' calendar days') AS block_window,\n    countDistinct(s.d)                         AS trading_sessions\nFROM\n(\n    SELECT arrayJoin([30, 60, 90, 180]) AS days\n) AS w\nCROSS JOIN\n(\n    SELECT DISTINCT toDate(toTimeZone(window_start, 'America/New_York')) AS d\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= today() - 200\n      AND window_start <  today() - 1\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) AS s\nWHERE s.d > today() - w.days\nGROUP BY w.days\nORDER BY w.days","computed_at":"2026-08-22T04:17:30.554696+00:00","elapsed":0.135810031}