greeks_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 | gamma_per_premium_dollar | theta_pct_per_day | gamma_ratio_vs_month_out | theta_ratio_vs_month_out |
|---|---|---|---|---|
| 1 day (next session) | 0.0295 | 51.8 | 31.8 | 28.7 |
| 2-5 days | 0.0093 | 17 | 10 | 9.4 |
| 6-10 days | 0.0047 | 6.9 | 5.1 | 3.9 |
| 11-20 days | 0.0023 | 3.9 | 2.5 | 2.2 |
| 21-45 days | 0.0009 | 1.8 | 1 | 1 |
- 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 | |
gamma_per_premium_dollar |
number | 0.0009 to 0.0295 | US dollars |
theta_pct_per_day |
number | 1.8 to 51.8 | percent |
gamma_ratio_vs_month_out |
number | 1 to 31.8 | ratio or rate |
theta_ratio_vs_month_out |
number | 1 to 28.7 | ratio or rate |
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(gamma) AS gma,
toFloat64(theta) AS tht
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
),
ladder AS
(
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,
min(dte) AS dte_lo,
avg(gma / premium) AS gamma_raw,
avg(abs(tht) / premium) * 100 AS theta_raw
FROM atm_calls
GROUP BY dte_bucket
)
SELECT
dte_bucket,
round(gamma_raw, 4) AS gamma_per_premium_dollar,
round(theta_raw, 1) AS theta_pct_per_day,
round(gamma_raw / (SELECT gamma_raw FROM ladder WHERE dte_bucket = '21-45 days'), 1) AS gamma_ratio_vs_month_out,
round(theta_raw / (SELECT theta_raw FROM ladder WHERE dte_bucket = '21-45 days'), 1) AS theta_ratio_vs_month_out
FROM ladder
ORDER BY dte_lo
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.