{"slug":"0dte-strategies-how-people-trade-them","qid":"expiry_outcome","label":"How July 10's same-day SPY contracts finished: expired at zero vs. settled with value","post_title":"0DTE Options Strategies: How They Trade","post_url":"/blog/0dte-strategies-how-people-trade-them#q-expiry_outcome","columns":["at_the_bell","strikes","contracts_m","pct_of_spy_same_day_volume"],"rows":[{"at_the_bell":"Expired at zero (out of the money)","strikes":110,"contracts_m":4.68,"pct_of_spy_same_day_volume":57.5},{"at_the_bell":"Settled with value (in the money)","strikes":138,"contracts_m":3.45,"pct_of_spy_same_day_volume":42.5}],"shape":"ranking","sql":"WITH (\n    SELECT round(argMax(close, window_start), 2)\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2026-07-10 09:30:00', 'America/New_York')\n      AND window_start < toDateTime('2026-07-10 16:01:00', 'America/New_York')\n) AS spy_close\nSELECT if(expired_at_zero, 'Expired at zero (out of the money)',\n                           'Settled with value (in the money)') AS at_the_bell,\n       count() AS strikes,\n       round(sum(vol) / 1e6, 2) AS contracts_m,\n       round(100.0 * sum(vol) / sum(sum(vol)) OVER (), 1) AS pct_of_spy_same_day_volume\nFROM (\n    SELECT substring(ticker, length(ticker) - 8, 1) AS opt_type,\n           toFloat64(substring(ticker, length(ticker) - 7, 8)) / 1000 AS strike,\n           (opt_type = 'C' AND strike > spy_close) OR (opt_type = 'P' AND strike < spy_close) AS expired_at_zero,\n           sum(toFloat64(volume)) AS vol\n    FROM global_markets.options_minute_aggs\n    WHERE window_start >= toDateTime('2026-07-10 08:00:00')\n      AND window_start < toDateTime('2026-07-11 04:00:00')\n      AND startsWith(ticker, 'O:SPY260710')\n    GROUP BY ticker, opt_type, strike, expired_at_zero\n)\nGROUP BY expired_at_zero\nORDER BY expired_at_zero DESC","computed_at":"2026-07-31T03:12:29.205785+00:00","elapsed":0.003476491}