{"slug":"when-do-options-expire","qid":"dte_mix","label":"June 2026 SPY options volume by days-to-expiry at the time of the trade","post_title":"When Do Options Expire? Friday 4 PM ET & Daily","post_url":"/blog/when-do-options-expire#q-dte_mix","columns":["dte_bucket","contracts_mm","pct_of_month"],"rows":[{"dte_bucket":"0 days (expiry day)","contracts_mm":182.9,"pct_of_month":69.5},{"dte_bucket":"1 day left","contracts_mm":24.6,"pct_of_month":9.3},{"dte_bucket":"2-5 days left","contracts_mm":20.9,"pct_of_month":7.9},{"dte_bucket":"6+ days left","contracts_mm":34.9,"pct_of_month":13.2}],"shape":"series","sql":"SELECT dte_bucket,\n       round(sum(vol) / 1e6, 1) AS contracts_mm,\n       round(100.0 * sum(vol) / (sum(sum(vol)) OVER ()), 1) AS pct_of_month\nFROM (\n    SELECT multiIf(dte = 0, '0 days (expiry day)', dte = 1, '1 day left', dte <= 5, '2-5 days left', '6+ days left') AS dte_bucket,\n           dte, vol\n    FROM (\n        SELECT dateDiff('day', toDate(toTimeZone(window_start, 'America/New_York')),\n                        toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) AS dte,\n               toFloat64(volume) AS vol\n        FROM global_markets.options_minute_aggs\n        WHERE window_start >= '2026-06-01 04:00:00'\n          AND window_start < '2026-07-01 04:00:00'\n          AND ticker LIKE 'O:SPY2%'\n    )\n    WHERE dte >= 0\n)\nGROUP BY dte_bucket\nORDER BY min(dte)","computed_at":"2026-08-10T14:10:46.406227+00:00","elapsed":0.002660356}