decay_curve
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-25, from when-to-adjust-a-short-straddle.
| dte_label | straddle_theta_per_day | straddle_delta_per_move |
|---|---|---|
| 10 DTE | 0.624 | 0.391 |
| 9 DTE | 0.671 | 0.407 |
| 8 DTE | 0.696 | 0.443 |
| 7 DTE | 0.729 | 0.486 |
| 6 DTE | 0.766 | 0.544 |
| 5 DTE | 0.793 | 0.634 |
| 4 DTE | 0.864 | 0.712 |
| 3 DTE | 1.094 | 0.762 |
| 2 DTE | 1.541 | 0.785 |
| 1 DTE | 2.167 | 1.062 |
- Rows × columns
- 10 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
dte_label |
text | 10 distinct values (1 DTE, 10 DTE, 2 DTE…) | |
straddle_theta_per_day |
number | 0.624 to 2.167 | |
straddle_delta_per_move |
number | 0.391 to 1.062 |
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
concat(toString(dte), ' DTE') AS dte_label,
round(-1 * (avgIf(theta, opt LIKE 'c%') + avgIf(theta, opt LIKE 'p%')), 3) AS straddle_theta_per_day,
round((avgIf(gamma, opt LIKE 'c%') + avgIf(gamma, opt LIKE 'p%'))
* avg(spot) * 0.01, 3) AS straddle_delta_per_move
FROM
(
SELECT
days_to_expiry AS dte,
lower(option_type) AS opt,
theta,
gamma,
toFloat64(underlying_close) AS spot
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= today() - 120
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 10
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.005
)
GROUP BY dte
HAVING countIf(opt LIKE 'c%') > 0 AND countIf(opt LIKE 'p%') > 0
ORDER BY dte DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.