{"slug":"options-volume-vs-open-interest","qid":"tape_total","label":"One day of the US options tape: Monday, July 6, 2026","post_title":"Options Volume vs. Open Interest, Explained","post_url":"/blog/options-volume-vs-open-interest#q-tape_total","columns":["contracts_m","trades_m","distinct_contracts","distinct_roots","call_contracts_m","put_contracts_m","put_call_ratio","same_day_expiry_pct"],"rows":[{"contracts_m":60.6,"trades_m":10.5,"distinct_contracts":340203,"distinct_roots":4654,"call_contracts_m":35.5,"put_contracts_m":25.1,"put_call_ratio":0.71,"same_day_expiry_pct":38.8}],"shape":"scalar","sql":"SELECT\n    round(sum(volume) / 1e6, 1) AS contracts_m,\n    round(sum(transactions) / 1e6, 1) AS trades_m,\n    uniqExact(ticker) AS distinct_contracts,\n    uniqExact(substring(ticker, 3, length(ticker) - 17)) AS distinct_roots,\n    round(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'C') / 1e6, 1) AS call_contracts_m,\n    round(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'P') / 1e6, 1) AS put_contracts_m,\n    round(toFloat64(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'P')) / toFloat64(sumIf(volume, substring(ticker, length(ticker) - 8, 1) = 'C')), 2) AS put_call_ratio,\n    round(100 * toFloat64(sumIf(volume, substring(ticker, length(ticker) - 14, 6) = '260706')) / toFloat64(sum(volume)), 1) AS same_day_expiry_pct\nFROM global_markets.options_minute_aggs\nWHERE window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'","computed_at":"2026-08-12T14:10:09.872945+00:00","elapsed":0.003548265}