{"slug":"put-call-parity-explained","qid":"term_structure","label":"Call and put implied volatility near the money across AAPL monthly expirations, June 16 2026","post_title":"Put-Call Parity Explained, With Real Numbers","post_url":"/blog/put-call-parity-explained#q-term_structure","columns":["expiry_date","days_out","atm_strike_used","call_iv_pct","put_iv_pct","iv_gap_pct"],"rows":[{"expiry_date":"2026-07-17","days_out":31,"atm_strike_used":"$300","call_iv_pct":21.9,"put_iv_pct":20.5,"iv_gap_pct":1.4},{"expiry_date":"2026-08-21","days_out":66,"atm_strike_used":"$300","call_iv_pct":25.1,"put_iv_pct":24.3,"iv_gap_pct":0.8},{"expiry_date":"2026-09-18","days_out":94,"atm_strike_used":"$300","call_iv_pct":25.2,"put_iv_pct":24.5,"iv_gap_pct":0.7},{"expiry_date":"2026-10-16","days_out":122,"atm_strike_used":"$300","call_iv_pct":25.2,"put_iv_pct":24.3,"iv_gap_pct":0.9},{"expiry_date":"2026-11-20","days_out":157,"atm_strike_used":"$295","call_iv_pct":26.8,"put_iv_pct":26.3,"iv_gap_pct":0.5},{"expiry_date":"2026-12-18","days_out":185,"atm_strike_used":"$300","call_iv_pct":26,"put_iv_pct":26.2,"iv_gap_pct":-0.2},{"expiry_date":"2027-01-15","days_out":213,"atm_strike_used":"$300","call_iv_pct":26.4,"put_iv_pct":26.2,"iv_gap_pct":0.3}],"shape":"series","sql":"SELECT\n    expiry_date,\n    days_out,\n    concat('$', toString(argMin(strike, atm_gap)))                        AS atm_strike_used,\n    round(100 * argMin(call_iv, atm_gap), 1)                              AS call_iv_pct,\n    round(100 * argMin(put_iv, atm_gap), 1)                               AS put_iv_pct,\n    round(100 * (argMin(call_iv, atm_gap) - argMin(put_iv, atm_gap)), 1)  AS iv_gap_pct\nFROM\n(\n    SELECT\n        expiry_date,\n        days_out,\n        strike,\n        call_iv,\n        put_iv,\n        abs(strike / spot_close - 1) AS atm_gap\n    FROM\n    (\n        SELECT\n            toString(expiration_date)                                    AS expiry_date,\n            max(dateDiff('day', toDate(date), toDate(expiration_date)))  AS days_out,\n            round(toFloat64(strike_price), 2)                            AS strike,\n            maxIf(toFloat64(implied_volatility), leg = 'C')              AS call_iv,\n            maxIf(toFloat64(implied_volatility), leg = 'P')              AS put_iv,\n            max(toFloat64(underlying_close))                             AS spot_close\n        FROM\n        (\n            SELECT\n                date,\n                expiration_date,\n                strike_price,\n                implied_volatility,\n                underlying_close,\n                upper(substring(ticker, length(ticker) - 8, 1)) AS leg\n            FROM global_markets.options_greeks\n            WHERE underlying_symbol = 'AAPL'\n              AND date = '2026-06-16'\n              AND expiration_date BETWEEN '2026-07-01' AND '2027-01-31'\n              AND toDayOfWeek(toDate(expiration_date)) = 5\n              AND toDayOfMonth(toDate(expiration_date)) BETWEEN 15 AND 21\n              AND iv_converged = 1\n              AND volume > 0\n              AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.03\n        )\n        GROUP BY expiry_date, strike\n        HAVING countIf(leg = 'C') > 0\n           AND countIf(leg = 'P') > 0\n    )\n)\nGROUP BY expiry_date, days_out\nORDER BY expiry_date","computed_at":"2026-08-05T14:24:23.336779+00:00","elapsed":0.005092326}