premium_ladder
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-18, from are-0dte-options-high-risk.
| dte_bucket | avg_premium | breakeven_move_pct | double_move_pct | delta_move_pct |
|---|---|---|---|---|
| 1 day (next session) | 3.02 | 0.41 | 0.81 | 0.79 |
| 2-5 days | 4.77 | 0.64 | 1.29 | 1.25 |
| 6-10 days | 6.7 | 0.9 | 1.8 | 1.73 |
| 11-20 days | 9.02 | 1.22 | 2.43 | 2.31 |
| 21-45 days | 14.27 | 1.92 | 3.84 | 3.56 |
- Rows × columns
- 5 × 5
- 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_bucket |
text | 5 distinct values | |
avg_premium |
number | 3.02 to 14.27 | US dollars |
breakeven_move_pct |
number | 0.41 to 1.92 | percent |
double_move_pct |
number | 0.81 to 3.84 | percent |
delta_move_pct |
number | 0.79 to 3.56 | 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.
the exact SQL behind every number
WITH atm_calls AS
(
SELECT
days_to_expiry AS dte,
toFloat64(option_close) AS premium,
toFloat64(underlying_close) AS spot,
toFloat64(delta) AS dlt
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND lower(toString(option_type)) IN ('call', 'c')
AND date >= toDate('2026-06-01')
AND date < toDate('2026-07-01')
AND days_to_expiry > 0
AND days_to_expiry <= 45
AND iv_converged = 1
AND volume > 0
AND option_close > 0
AND toFloat64(delta) BETWEEN 0.2 AND 0.8
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.0025
)
SELECT
multiIf(dte <= 1, '1 day (next session)',
dte <= 5, '2-5 days',
dte <= 10, '6-10 days',
dte <= 20, '11-20 days',
'21-45 days') AS dte_bucket,
round(avg(premium), 2) AS avg_premium,
round(avg(premium / spot) * 100, 2) AS breakeven_move_pct,
round(avg(premium / spot) * 200, 2) AS double_move_pct,
round(avg(premium / (dlt * spot)) * 100, 2) AS delta_move_pct
FROM atm_calls
GROUP BY dte_bucket
ORDER BY min(dte)
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.