{"slug":"quadruple-witching-vs-triple-witching","qid":"quarterly_volume","label":"SPY volume on quarterly expiration Fridays, against the average ordinary Friday","post_title":"Quadruple Witching vs Triple Witching","post_url":"/blog/quadruple-witching-vs-triple-witching#q-quarterly_volume","columns":["session_date","session_label","spy_volume_millions","vs_ordinary_friday_ratio"],"rows":[{"session_date":"2023-03-17","session_label":"Mar 2023","spy_volume_millions":140.4,"vs_ordinary_friday_ratio":1.87},{"session_date":"2023-06-16","session_label":"Jun 2023","spy_volume_millions":114.2,"vs_ordinary_friday_ratio":1.52},{"session_date":"2023-09-15","session_label":"Sep 2023","spy_volume_millions":111.8,"vs_ordinary_friday_ratio":1.49},{"session_date":"2023-12-15","session_label":"Dec 2023","spy_volume_millions":141.6,"vs_ordinary_friday_ratio":1.89},{"session_date":"2024-03-15","session_label":"Mar 2024","spy_volume_millions":107.6,"vs_ordinary_friday_ratio":1.43},{"session_date":"2024-06-21","session_label":"Jun 2024","spy_volume_millions":63.4,"vs_ordinary_friday_ratio":0.84},{"session_date":"2024-09-20","session_label":"Sep 2024","spy_volume_millions":77.5,"vs_ordinary_friday_ratio":1.03},{"session_date":"2024-12-20","session_label":"Dec 2024","spy_volume_millions":124.7,"vs_ordinary_friday_ratio":1.66},{"session_date":"2025-03-21","session_label":"Mar 2025","spy_volume_millions":83.8,"vs_ordinary_friday_ratio":1.12},{"session_date":"2025-06-20","session_label":"Jun 2025","spy_volume_millions":94.1,"vs_ordinary_friday_ratio":1.25},{"session_date":"2025-09-19","session_label":"Sep 2025","spy_volume_millions":97.9,"vs_ordinary_friday_ratio":1.3},{"session_date":"2025-12-19","session_label":"Dec 2025","spy_volume_millions":103.5,"vs_ordinary_friday_ratio":1.38},{"session_date":"2026-03-20","session_label":"Mar 2026","spy_volume_millions":165.6,"vs_ordinary_friday_ratio":2.21}],"shape":"series","sql":"WITH fridays AS\n(\n    SELECT\n        date,\n        toFloat64(volume) AS vol,\n        (toMonth(date) IN (3, 6, 9, 12) AND toDayOfMonth(date) BETWEEN 15 AND 21) AS is_expiry\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date >= '2023-01-01'\n      AND date <  today()\n      AND toDayOfWeek(date) = 5\n),\nordinary AS\n(\n    SELECT avg(vol) AS avg_ordinary_friday\n    FROM fridays\n    WHERE is_expiry = 0\n)\nSELECT\n    toString(f.date)                         AS session_date,\n    formatDateTime(f.date, '%b %Y')          AS session_label,\n    round(f.vol / 1e6, 1)                    AS spy_volume_millions,\n    round(f.vol / o.avg_ordinary_friday, 2)  AS vs_ordinary_friday_ratio\nFROM fridays AS f\nCROSS JOIN ordinary AS o\nWHERE f.is_expiry = 1\nORDER BY f.date","computed_at":"2026-08-22T04:18:27.416440+00:00","elapsed":0.029636517}