{"slug":"options-volume-vs-open-interest","qid":"dte_buckets","label":"July 6, 2026 volume by time to expiration: the tape is short-dated, the listed universe is not","post_title":"Options Volume vs. Open Interest, Explained","post_url":"/blog/options-volume-vs-open-interest#q-dte_buckets","columns":["expires_in","contracts_m","pct_of_volume","distinct_contracts_k","pct_of_contracts"],"rows":[{"expires_in":"same day (0DTE)","contracts_m":23.5,"pct_of_volume":38.8,"distinct_contracts_k":3,"pct_of_contracts":0.9},{"expires_in":"1-7 days","contracts_m":15.3,"pct_of_volume":25.3,"distinct_contracts_k":47.1,"pct_of_contracts":13.8},{"expires_in":"8-31 days","contracts_m":10.5,"pct_of_volume":17.3,"distinct_contracts_k":97.8,"pct_of_contracts":28.7},{"expires_in":"32-365 days","contracts_m":10.5,"pct_of_volume":17.3,"distinct_contracts_k":168.8,"pct_of_contracts":49.6},{"expires_in":"over a year","contracts_m":0.8,"pct_of_volume":1.3,"distinct_contracts_k":23.6,"pct_of_contracts":6.9}],"shape":"table","sql":"WITH dateDiff('day', toDate('2026-07-06'), toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-', substring(ticker, length(ticker) - 12, 2), '-', substring(ticker, length(ticker) - 10, 2)))) AS dte\nSELECT\n    multiIf(dte = 0, 'same day (0DTE)', dte <= 7, '1-7 days', dte <= 31, '8-31 days', dte <= 365, '32-365 days', 'over a year') AS expires_in,\n    round(sum(volume) / 1e6, 1) AS contracts_m,\n    round(100 * toFloat64(sum(volume)) / (SELECT toFloat64(sum(volume)) FROM global_markets.options_minute_aggs WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'), 1) AS pct_of_volume,\n    round(uniqExact(ticker) / 1e3, 1) AS distinct_contracts_k,\n    round(100 * toFloat64(uniqExact(ticker)) / (SELECT toFloat64(uniqExact(ticker)) FROM global_markets.options_minute_aggs WHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'), 1) AS pct_of_contracts\nFROM global_markets.options_minute_aggs\nWHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'\n  AND dte >= 0\nGROUP BY expires_in\nORDER BY min(dte)","computed_at":"2026-08-12T14:10:10.232555+00:00","elapsed":0.00366139}