strike_gamma
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.
| moneyness | next_day_delta_shift | month_out_delta_shift |
|---|---|---|
| -2% | 0.078 | 0.071 |
| -1.5% | 0.131 | 0.077 |
| -1% | 0.224 | 0.081 |
| -0.5% | 0.372 | 0.087 |
| 0% | 0.497 | 0.092 |
| +0.5% | 0.388 | 0.097 |
| +1% | 0.211 | 0.098 |
| +1.5% | 0.094 | 0.097 |
| +2% | 0.042 | 0.095 |
- Rows × columns
- 9 × 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 |
|---|---|---|---|
moneyness |
text | 9 distinct values (+0.5%, +1%, +1.5%…) | |
next_day_delta_shift |
number | 0.042 to 0.497 | |
month_out_delta_shift |
number | 0.071 to 0.098 |
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
SELECT
concat(if(half_pct > 0, '+', ''), toString(half_pct / 2), '%') AS moneyness,
round(avgIf(gma * spot / 100, dte <= 1), 3) AS next_day_delta_shift,
round(avgIf(gma * spot / 100, dte BETWEEN 21 AND 45), 3) AS month_out_delta_shift
FROM
(
SELECT
toInt32(round((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 200)) AS half_pct,
days_to_expiry AS dte,
toFloat64(gamma) AS gma,
toFloat64(underlying_close) AS spot
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= toDate('2026-06-01')
AND date < toDate('2026-07-01')
AND ((days_to_expiry > 0 AND days_to_expiry <= 1) OR days_to_expiry BETWEEN 21 AND 45)
AND iv_converged = 1
AND volume > 0
AND option_close > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.0225
AND ((lower(toString(option_type)) IN ('call', 'c') AND strike_price >= underlying_close)
OR (lower(toString(option_type)) IN ('put', 'p') AND strike_price < underlying_close))
)
GROUP BY half_pct
HAVING countIf(dte <= 1) > 0 AND countIf(dte BETWEEN 21 AND 45) > 0
ORDER BY half_pct
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.
More from this analysisare-0dte-options-high-risk
expiry_outcomes
ranking 5×2
→
expiry_day
series 21×6
→
premium_ladder
table 5×5
→
greeks_ladder
series 5×5
→
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,358 queries →