{"slug":"what-is-the-put-call-ratio","qid":"by_expiration","label":"Put-call ratio by days to expiration: every listed US option, June 2026","post_title":"What Is the Put-Call Ratio? A Data Guide","post_url":"/blog/what-is-the-put-call-ratio#q-by_expiration","columns":["expiry_bucket","put_call_ratio","contracts_mm","pct_of_volume"],"rows":[{"expiry_bucket":"0DTE (expires today)","put_call_ratio":0.957,"contracts_mm":506.3,"pct_of_volume":34.3},{"expiry_bucket":"1-7 days","put_call_ratio":0.756,"contracts_mm":406,"pct_of_volume":27.5},{"expiry_bucket":"8-30 days","put_call_ratio":0.717,"contracts_mm":261.2,"pct_of_volume":17.7},{"expiry_bucket":"31-90 days","put_call_ratio":0.634,"contracts_mm":164.3,"pct_of_volume":11.1},{"expiry_bucket":"91+ days","put_call_ratio":0.564,"contracts_mm":140,"pct_of_volume":9.5}],"shape":"ranking","sql":"WITH toDate(toTimeZone(window_start, 'America/New_York')) AS trade_day,\n     toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-',\n                   substring(ticker, length(ticker) - 12, 2), '-',\n                   substring(ticker, length(ticker) - 10, 2))) AS expiry,\n     dateDiff('day', trade_day, expiry) AS dte\nSELECT multiIf(dte <= 0, '0DTE (expires today)', dte <= 7, '1-7 days', dte <= 30, '8-30 days',\n               dte <= 90, '31-90 days', '91+ days') AS expiry_bucket,\n       round(sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')\n             / sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C'), 3) AS put_call_ratio,\n       round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,\n       round(100 * sum(toFloat64(volume)) / sum(sum(toFloat64(volume))) OVER (), 1) AS pct_of_volume\nFROM global_markets.options_minute_aggs\nWHERE window_start >= '2026-06-01 04:00:00'\n  AND window_start < '2026-07-01 04:00:00'\nGROUP BY expiry_bucket\nORDER BY min(dte)","computed_at":"2026-08-11T14:21:17.553367+00:00","elapsed":0.003623967}