{"slug":"triple-witching-2026-dates","qid":"witching_premium","label":"Every quarterly witching session since September 2024: market-wide regular-hours dollar volume vs. the month's other sessions","post_title":"Triple Witching 2026 Dates and Volume Data","post_url":"/blog/triple-witching-2026-dates#q-witching_premium","columns":["witching_session","witching_dollars_t","other_days_median_t","times_median"],"rows":[{"witching_session":"2024-09-20","witching_dollars_t":0.57,"other_days_median_t":0.45,"times_median":1.26},{"witching_session":"2024-12-20","witching_dollars_t":0.75,"other_days_median_t":0.51,"times_median":1.47},{"witching_session":"2025-03-21","witching_dollars_t":0.62,"other_days_median_t":0.6,"times_median":1.03},{"witching_session":"2025-06-20","witching_dollars_t":0.72,"other_days_median_t":0.62,"times_median":1.16},{"witching_session":"2025-09-19","witching_dollars_t":0.86,"other_days_median_t":0.72,"times_median":1.19},{"witching_session":"2025-12-19","witching_dollars_t":0.87,"other_days_median_t":0.7,"times_median":1.24},{"witching_session":"2026-03-20","witching_dollars_t":1.05,"other_days_median_t":0.87,"times_median":1.21},{"witching_session":"2026-06-18","witching_dollars_t":1.12,"other_days_median_t":0.95,"times_median":1.17}],"shape":"series","sql":"WITH daily AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,\n           sum(toFloat64(close) * toFloat64(volume)) / 1e12 AS dollars_t\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE window_start >= '2024-09-01 04:00:00'\n      AND window_start < '2026-07-01 04:00:00'\n      AND toMonth(toTimeZone(window_start, 'America/New_York')) IN (3, 6, 9, 12)\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY day\n),\nwitching AS (\n    SELECT toStartOfMonth(day) AS m,\n           maxIf(day, day <= addDays(toStartOfMonth(day),\n                 ((5 - toDayOfWeek(toStartOfMonth(day)) + 7) % 7) + 14)) AS witching_day\n    FROM daily\n    GROUP BY m\n)\nSELECT toString(w.witching_day) AS witching_session,\n       round(anyIf(d.dollars_t, d.day = w.witching_day), 2) AS witching_dollars_t,\n       round(quantileDeterministicIf(0.5)(d.dollars_t, cityHash64(toString(d.day)), d.day != w.witching_day), 2) AS other_days_median_t,\n       round(anyIf(d.dollars_t, d.day = w.witching_day)\n             / quantileDeterministicIf(0.5)(d.dollars_t, cityHash64(toString(d.day)), d.day != w.witching_day), 2) AS times_median\nFROM daily AS d\nINNER JOIN witching AS w ON toStartOfMonth(d.day) = w.m\nGROUP BY w.witching_day\nHAVING countIf(d.day != w.witching_day) > 0\nORDER BY w.witching_day","computed_at":"2026-08-14T14:24:22.526092+00:00","elapsed":0.004654958}