{"slug":"buying-puts-vs-buying-calls","qid":"skew_curve","label":"skew_curve","post_title":"buying-puts-vs-buying-calls","post_url":"/blog/buying-puts-vs-buying-calls#q-skew_curve","columns":["otm_distance","put_iv_pct","call_iv_pct","put_minus_call_pct"],"rows":[{"otm_distance":"0%","put_iv_pct":14.73,"call_iv_pct":13.37,"put_minus_call_pct":1.35},{"otm_distance":"2%","put_iv_pct":15.99,"call_iv_pct":12.34,"put_minus_call_pct":3.65},{"otm_distance":"4%","put_iv_pct":17.82,"call_iv_pct":11.38,"put_minus_call_pct":6.43},{"otm_distance":"6%","put_iv_pct":19.65,"call_iv_pct":11.21,"put_minus_call_pct":8.44},{"otm_distance":"8%","put_iv_pct":21.77,"call_iv_pct":11.89,"put_minus_call_pct":9.88},{"otm_distance":"10%","put_iv_pct":23.51,"call_iv_pct":12.85,"put_minus_call_pct":10.66}],"shape":"ranking","sql":"SELECT\n    concat(toString(otm_bin), '%')                                       AS otm_distance,\n    round(avgIf(iv, side = 'put') * 100, 2)                              AS put_iv_pct,\n    round(avgIf(iv, side = 'call') * 100, 2)                             AS call_iv_pct,\n    round((avgIf(iv, side = 'put') - avgIf(iv, side = 'call')) * 100, 2) AS put_minus_call_pct\nFROM\n(\n    SELECT\n        if(lower(option_type) LIKE 'p%', 'put', 'call')                  AS side,\n        toFloat64(implied_volatility)                                    AS iv,\n        toInt32(round(abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 50) * 2) AS otm_bin\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date >= '2026-06-01'\n      AND date <  '2026-09-01'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 20 AND 45\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.10\n      AND ((lower(option_type) LIKE 'p%'     AND toFloat64(strike_price) <= toFloat64(underlying_close))\n        OR (lower(option_type) NOT LIKE 'p%' AND toFloat64(strike_price) >= toFloat64(underlying_close)))\n)\nGROUP BY otm_bin\nHAVING countIf(side = 'put') > 0 AND countIf(side = 'call') > 0\nORDER BY otm_bin","computed_at":"2026-09-30T15:04:03.845923+00:00","elapsed":0.004681067}