{"slug":"how-the-put-call-ratio-is-calculated","qid":"pcr_monthly","label":"Monthly median put/call ratio: broad market ETFs against single stocks","post_title":"How the Put/Call Ratio Is Calculated","post_url":"/blog/how-the-put-call-ratio-is-calculated#q-pcr_monthly","columns":["month","month_label","etf_median_ratio","stock_median_ratio"],"rows":[{"month":"2025-08-01","month_label":"Aug 2025","etf_median_ratio":1.52,"stock_median_ratio":0.6},{"month":"2025-09-01","month_label":"Sep 2025","etf_median_ratio":1.66,"stock_median_ratio":0.52},{"month":"2025-10-01","month_label":"Oct 2025","etf_median_ratio":1.63,"stock_median_ratio":0.55},{"month":"2025-11-01","month_label":"Nov 2025","etf_median_ratio":1.51,"stock_median_ratio":0.59},{"month":"2025-12-01","month_label":"Dec 2025","etf_median_ratio":1.21,"stock_median_ratio":0.58},{"month":"2026-01-01","month_label":"Jan 2026","etf_median_ratio":1.5,"stock_median_ratio":0.6},{"month":"2026-02-01","month_label":"Feb 2026","etf_median_ratio":1.58,"stock_median_ratio":0.66},{"month":"2026-03-01","month_label":"Mar 2026","etf_median_ratio":1.57,"stock_median_ratio":0.76},{"month":"2026-04-01","month_label":"Apr 2026","etf_median_ratio":1.71,"stock_median_ratio":0.54},{"month":"2026-05-01","month_label":"May 2026","etf_median_ratio":1.55,"stock_median_ratio":0.43},{"month":"2026-06-01","month_label":"Jun 2026","etf_median_ratio":1.47,"stock_median_ratio":0.55},{"month":"2026-07-01","month_label":"Jul 2026","etf_median_ratio":1.49,"stock_median_ratio":0.56}],"shape":"series","sql":"WITH\n    daily AS\n    (\n        SELECT\n            d,\n            toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))\n                / toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')))     AS etf_ratio,\n            toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))\n                / toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio\n        FROM\n        (\n            SELECT\n                date                                     AS d,\n                underlying_symbol                        AS sym,\n                volume,\n                substring(ticker, length(ticker) - 8, 1) AS right_letter\n            FROM global_markets.options_greeks\n            WHERE date >= '2025-08-01'\n              AND date <  '2026-08-01'\n              AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')\n              AND volume > 0\n        )\n        GROUP BY d\n        HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0\n           AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0\n    )\nSELECT\n    toString(toStartOfMonth(d))                AS month,\n    formatDateTime(toStartOfMonth(d), '%b %Y') AS month_label,\n    round(quantileExact(0.5)(etf_ratio), 2)    AS etf_median_ratio,\n    round(quantileExact(0.5)(stock_ratio), 2)  AS stock_median_ratio\nFROM daily\nGROUP BY month, month_label\nORDER BY month","computed_at":"2026-08-06T14:38:58.611741+00:00","elapsed":0.005967146}