{"slug":"finra-margin-debt-statistics","qid":"release_gap","label":"What the market does between the month-end as-of date and a third-week release","post_title":"FINRA Margin Debt Statistics, Explained","post_url":"/blog/finra-margin-debt-statistics#q-release_gap","columns":["month","as_of_label","release_label","sessions_count","spy_change_pct"],"rows":[{"month":"2024-11","as_of_label":"Nov 29","release_label":"Dec 20","sessions_count":15,"spy_change_pct":-1.94},{"month":"2024-12","as_of_label":"Dec 31","release_label":"Jan 20","sessions_count":11,"spy_change_pct":1.97},{"month":"2025-01","as_of_label":"Jan 31","release_label":"Feb 20","sessions_count":13,"spy_change_pct":1.43},{"month":"2025-02","as_of_label":"Feb 28","release_label":"Mar 20","sessions_count":14,"spy_change_pct":-4.78},{"month":"2025-03","as_of_label":"Mar 31","release_label":"Apr 20","sessions_count":13,"spy_change_pct":-5.86},{"month":"2025-04","as_of_label":"Apr 30","release_label":"May 20","sessions_count":14,"spy_change_pct":6.94},{"month":"2025-05","as_of_label":"May 30","release_label":"Jun 20","sessions_count":14,"spy_change_pct":0.81},{"month":"2025-06","as_of_label":"Jun 30","release_label":"Jul 20","sessions_count":13,"spy_change_pct":1.57},{"month":"2025-07","as_of_label":"Jul 31","release_label":"Aug 20","sessions_count":14,"spy_change_pct":0.96},{"month":"2025-08","as_of_label":"Aug 29","release_label":"Sep 20","sessions_count":14,"spy_change_pct":2.88},{"month":"2025-09","as_of_label":"Sep 30","release_label":"Oct 20","sessions_count":14,"spy_change_pct":0.77},{"month":"2025-10","as_of_label":"Oct 31","release_label":"Nov 20","sessions_count":14,"spy_change_pct":-4.32},{"month":"2025-11","as_of_label":"Nov 28","release_label":"Dec 20","sessions_count":15,"spy_change_pct":-0.41},{"month":"2025-12","as_of_label":"Dec 31","release_label":"Jan 20","sessions_count":12,"spy_change_pct":-0.62},{"month":"2026-01","as_of_label":"Jan 30","release_label":"Feb 20","sessions_count":14,"spy_change_pct":-0.36},{"month":"2026-02","as_of_label":"Feb 27","release_label":"Mar 20","sessions_count":15,"spy_change_pct":-5.49},{"month":"2026-03","as_of_label":"Mar 31","release_label":"Apr 20","sessions_count":13,"spy_change_pct":8.99},{"month":"2026-04","as_of_label":"Apr 30","release_label":"May 20","sessions_count":14,"spy_change_pct":3.18},{"month":"2026-05","as_of_label":"May 29","release_label":"Jun 20","sessions_count":14,"spy_change_pct":-1.3},{"month":"2026-06","as_of_label":"Jun 30","release_label":"Jul 20","sessions_count":13,"spy_change_pct":-0.57},{"month":"2026-07","as_of_label":"Jul 31","release_label":"Aug 20","sessions_count":14,"spy_change_pct":2.15}],"shape":"series","sql":"WITH daily AS\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n        argMax(close, window_start)                          AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2024-11-01 00: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 d\n),\nreference_month AS\n(\n    SELECT\n        toStartOfMonth(d) AS m,\n        max(d)            AS as_of,\n        argMax(px, d)     AS as_of_close\n    FROM daily\n    GROUP BY m\n),\nrelease AS\n(\n    SELECT\n        m,\n        as_of,\n        as_of_close,\n        addDays(toStartOfMonth(addMonths(m, 1)), 19) AS release_day\n    FROM reference_month\n)\nSELECT\n    formatDateTime(r.m, '%Y-%m')                    AS month,\n    any(formatDateTime(r.as_of, '%b %e'))           AS as_of_label,\n    any(formatDateTime(r.release_day, '%b %e'))     AS release_label,\n    count()                                         AS sessions_count,\n    round(100 * (toFloat64(argMax(d.px, d.d))\n                 / toFloat64(any(r.as_of_close)) - 1), 2) AS spy_change_pct\nFROM release AS r\nCROSS JOIN daily AS d\nWHERE d.d > r.as_of\n  AND d.d <= r.release_day\n  AND r.release_day < today()\nGROUP BY r.m\nORDER BY r.m","computed_at":"2026-08-22T04:05:45.553299+00:00","elapsed":1.600316887}