STRASMORE/EXPLORE 2,830 QUERIES

breakeven_by_dte

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-30, from buying-puts-vs-buying-calls.

as of ranking 4×4read in context →
breakeven_by_dte — 4 rows by 4 columns, computed from US exchange, SIP and OPRA data.
dte_bandput_breakeven_move_pctcall_breakeven_move_pctput_extra_move_pct
7 to 14 days5.034.890.14
15 to 30 days5.295.020.27
31 to 60 days5.645.270.37
61 to 90 days6.195.840.35
Rows × columns
4 × 4
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for breakeven_by_dte, derived from the stored result.
ColumnTypeRangeNotes
dte_band text 4 distinct values
put_breakeven_move_pct number 5.03 to 6.19 percent
call_breakeven_move_pct number 4.89 to 5.84 percent
put_extra_move_pct number 0.14 to 0.37 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

SELECT
    dte_band                                                                      AS dte_band,
    round(avgIf(breakeven_move_pct, side = 'put'), 2)                             AS put_breakeven_move_pct,
    round(avgIf(breakeven_move_pct, side = 'call'), 2)                            AS call_breakeven_move_pct,
    round(avgIf(breakeven_move_pct, side = 'put') - avgIf(breakeven_move_pct, side = 'call'), 2) AS put_extra_move_pct
FROM
(
    SELECT
        if(lower(option_type) LIKE 'p%', 'put', 'call')                           AS side,
        multiIf(days_to_expiry <= 14, '7 to 14 days',
                days_to_expiry <= 30, '15 to 30 days',
                days_to_expiry <= 60, '31 to 60 days',
                                      '61 to 90 days')                            AS dte_band,
        multiIf(days_to_expiry <= 14, 1,
                days_to_expiry <= 30, 2,
                days_to_expiry <= 60, 3,
                                      4)                                          AS band_order,
        if(lower(option_type) LIKE 'p%',
           (toFloat64(underlying_close) - toFloat64(strike_price) + toFloat64(option_close)) / toFloat64(underlying_close) * 100,
           (toFloat64(strike_price) + toFloat64(option_close) - toFloat64(underlying_close)) / toFloat64(underlying_close) * 100) AS breakeven_move_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= '2026-06-01'
      AND date <  '2026-09-01'
      AND volume > 0
      AND option_close > 0
      AND days_to_expiry BETWEEN 7 AND 90
      AND ((lower(option_type) LIKE 'p%'     AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 0.94 AND 0.96)
        OR (lower(option_type) NOT LIKE 'p%' AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 1.04 AND 1.06))
)
GROUP BY dte_band, band_order
HAVING countIf(side = 'put') > 0 AND countIf(side = 'call') > 0
ORDER BY band_order
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisbuying-puts-vs-buying-calls
skew_curve ranking 6×4 → parity_ladder ranking 6×4 → realised_vol_by_month ranking 4×3 → skew_persistence series 24×4 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → See all 2,830 queries →