{"slug":"buying-puts-vs-buying-calls","qid":"breakeven_by_dte","label":"breakeven_by_dte","post_title":"buying-puts-vs-buying-calls","post_url":"/blog/buying-puts-vs-buying-calls#q-breakeven_by_dte","columns":["dte_band","put_breakeven_move_pct","call_breakeven_move_pct","put_extra_move_pct"],"rows":[{"dte_band":"7 to 14 days","put_breakeven_move_pct":5.03,"call_breakeven_move_pct":4.89,"put_extra_move_pct":0.14},{"dte_band":"15 to 30 days","put_breakeven_move_pct":5.29,"call_breakeven_move_pct":5.02,"put_extra_move_pct":0.27},{"dte_band":"31 to 60 days","put_breakeven_move_pct":5.64,"call_breakeven_move_pct":5.27,"put_extra_move_pct":0.37},{"dte_band":"61 to 90 days","put_breakeven_move_pct":6.19,"call_breakeven_move_pct":5.84,"put_extra_move_pct":0.35}],"shape":"ranking","sql":"SELECT\n    dte_band                                                                      AS dte_band,\n    round(avgIf(breakeven_move_pct, side = 'put'), 2)                             AS put_breakeven_move_pct,\n    round(avgIf(breakeven_move_pct, side = 'call'), 2)                            AS call_breakeven_move_pct,\n    round(avgIf(breakeven_move_pct, side = 'put') - avgIf(breakeven_move_pct, side = 'call'), 2) AS put_extra_move_pct\nFROM\n(\n    SELECT\n        if(lower(option_type) LIKE 'p%', 'put', 'call')                           AS side,\n        multiIf(days_to_expiry <= 14, '7 to 14 days',\n                days_to_expiry <= 30, '15 to 30 days',\n                days_to_expiry <= 60, '31 to 60 days',\n                                      '61 to 90 days')                            AS dte_band,\n        multiIf(days_to_expiry <= 14, 1,\n                days_to_expiry <= 30, 2,\n                days_to_expiry <= 60, 3,\n                                      4)                                          AS band_order,\n        if(lower(option_type) LIKE 'p%',\n           (toFloat64(underlying_close) - toFloat64(strike_price) + toFloat64(option_close)) / toFloat64(underlying_close) * 100,\n           (toFloat64(strike_price) + toFloat64(option_close) - toFloat64(underlying_close)) / toFloat64(underlying_close) * 100) AS breakeven_move_pct\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 volume > 0\n      AND option_close > 0\n      AND days_to_expiry BETWEEN 7 AND 90\n      AND ((lower(option_type) LIKE 'p%'     AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 0.94 AND 0.96)\n        OR (lower(option_type) NOT LIKE 'p%' AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 1.04 AND 1.06))\n)\nGROUP BY dte_band, band_order\nHAVING countIf(side = 'put') > 0 AND countIf(side = 'call') > 0\nORDER BY band_order","computed_at":"2026-09-30T15:04:03.939951+00:00","elapsed":0.005193274}