0DTE Options Risk: Wetin Greeks Dey Talk
0DTE options dey high risk? See how gamma and theta per dollar of premium compare for same-day SPY contract versus one-month tenor, plus move wey fit double am.
Are 0DTE options high risk? Mechanically, yes: contract wey expire that same day carry gamma and theta of option wey get one-month tenor, but dem dey compress everything into one trading session. Premium fit double or go zero if SPY make move wey ordinary week fit bring. But the instrument itself rarely na wetin empty retail account. Na position size dey do am. The numbers below come from real SPY contracts wey traders execute for June 2026.
What make 0DTE option riskier pass longer-dated one?
0DTE option na contract wey dey on im final trading day (DTE mean days to expiry; primer on wetin 0DTE options be dey explain the basics). Three things dey change when contract get hours left instead of weeks.
Time no dey to recover. 30-day contract fit absorb move wey go against am and wait; same-day contract no fit. Every dollar of at-the-money 0DTE premium na time value wey go reach zero when market close.
Gamma dey concentrated. Delta na how sensitive option be to $1 move for the underlying; gamma na rate wey delta dey change as underlying dey move. As expiry dey near, gamma dey gather around the strike, and small SPY move fit swing contract delta from near 0 reach near 1 (how option gamma dey work explain the mechanics).
Theta huge compared with the premium. Theta na value wey option lose per day from time alone; for same-day contract, na the whole premium by definition (option theta cover the curve through contract life).
The first panel price this matter. E take every at-the-money SPY call (strike wey dey within quarter of a percent of SPY close) for every June 2026 session, group the contracts by days to expiry, then average wetin dem cost and how far SPY need move before the premium pay back.
Contract wey get one calendar day left cost $3.02 on average, 0.41% of SPY price, compared with $14.27 (1.92%) for contract wey get 21 to 45 days left. The breakeven_move_pct column show how far above the strike SPY need close at expiry before the call go worth wetin e cost, while double_move_pct na twice that amount. The delta_move_pct column na the first-order version for today: the SPY move where the contract current delta alone go earn or lose the whole premium. For next-day contract, na 0.79%; for contract wey get one month left, na 3.56%. Compare both with the daily SPY moves inside the expiry-day panel further down.
How far SPY need move to make 0DTE premium double or reach zero?
Per dollar of premium na the fair comparison. Cheap contract wey get large greeks and expensive one wey get small greeks fit still carry the same dollar exposure. The next panel divide gamma and theta by the premium for the same June 2026 contracts. E show each rung as multiple of the 21-to-45-day rung.
| 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 |
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_loPer dollar of premium, the next-day contract carry 0.0295 of gamma, compared with 0.0009 for the month-out contract. That be ratio of 31.8 to 1. Theta take 51.8% of the premium per day for the next-day contract, and 1.8% for the month-out one. That be 28.7 to 1.
The doubling and zeroing calculation at the close come from the payoff alone. Call worth SPY close minus the strike, or nothing. If person buy am at the money, e go worth double when SPY close two premiums above the strike (0.81% of SPY price for the next-day contract). E go worth zero when SPY close at or below the strike. Flat price dey enough. The month-out contract need 3.84% finish above the strike to double at expiry. SPY get weeks to reach there, and the option fit sell along the way. Same payoff, different clock. Na the greeks show wetin the clock dey do to the price in between.
Why gamma dey concentrate for strike
Gamma dey peak for where the underlying dey, then e dey reduce for both sides. The nearer expiry be, the sharper the peak go be. The panel show gamma as the change for delta from one percent SPY move (gamma multiplied by SPY price, divided by 100). E average the result for every half-percent step from the money across June 2026. E use out-of-the-money calls above spot price and out-of-the-money puts below am. Both get the same gamma for the same strike.
| 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 |
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_pctFor the strike, one percent move shift the next-day contract delta by 0.497 and the month-out contract delta by 0.092. Two percent above the money, the figures na 0.042 and 0.095. One line na spike, the other na plateau. Same-day contract near the strike get directional exposure wey SPY movement of just a few dollars fit rewrite every time. Na this concentration dey create pin risk for expiration.
Wetin one month of same-day SPY calls really do
The greeks dey describe price movement for small area. To see the full outcome, the next panel follow one contract for each expiry. For every June 2026 SPY expiration, e pick the call wey strike dey closest to SPY close for the session before expiry. E record that evening closing price, wey na the price for screen when market open next day, before any gap. Then e value the contract at expiry close: SPY closing price minus the strike, or zero if SPY finish at or below the strike. Na so much call worth when time don finish.
| expiry date | expiry label | premium prior close | value at expiry | pct of premium left | spy move pct |
|---|---|---|---|---|---|
| 2026-06-01 | Mon Jun 1 | 2.5 | 0.58 | 23 | 0.12 |
| 2026-06-02 | Tue Jun 2 | 2.71 | 2.63 | 97 | 0.4 |
| 2026-06-03 | Wed Jun 3 | 1.62 | 0 | 0 | -1.2 |
| 2026-06-04 | Thu Jun 4 | 3.99 | 3.56 | 89 | 0.53 |
| 2026-06-05 | Fri Jun 5 | 2.98 | 0 | 0 | -2.54 |
| 2026-06-08 | Mon Jun 8 | 3.95 | 3.72 | 94 | 0.46 |
| 2026-06-09 | Tue Jun 9 | 2.75 | 0 | 0 | -0.41 |
| 2026-06-10 | Wed Jun 10 | 3.61 | 0 | 0 | -1.74 |
| 2026-06-11 | Thu Jun 11 | 5.44 | 16.48 | 303 | 2.3 |
| 2026-06-12 | Fri Jun 12 | 3.5 | 3.45 | 99 | 0.4 |
| 2026-06-15 | Mon Jun 15 | 3.48 | 11.91 | 342 | 1.54 |
| 2026-06-16 | Tue Jun 16 | 2.22 | 0 | 0 | -0.42 |
| 2026-06-17 | Wed Jun 17 | 2.23 | 0 | 0 | -0.69 |
| 2026-06-18 | Thu Jun 18 | 0.89 | 0.94 | 106 | 0.18 |
| 2026-06-22 | Mon Jun 22 | 3.15 | 0 | 0 | -0.44 |
| 2026-06-23 | Tue Jun 23 | 2.78 | 0 | 0 | -1.16 |
| 2026-06-24 | Wed Jun 24 | 2.75 | 2.2 | 80 | 0.3 |
| 2026-06-25 | Thu Jun 25 | 2.68 | 0 | 0 | -0.61 |
| 2026-06-26 | Fri Jun 26 | 3.61 | 0 | 0 | -0.2 |
| 2026-06-29 | Mon Jun 29 | 3.86 | 9.76 | 253 | 1.31 |
The exact SQL behind every number
WITH spy_by_day AS
(
SELECT
toDate(date) AS d,
medianExact(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 underlying_close > 0
GROUP BY d
),
last_sessions AS
(
SELECT
toDate(expiration_date) AS exp_date,
max(toDate(date)) AS prior_session
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date >= toDate('2026-06-01')
AND expiration_date < toDate('2026-07-01')
AND date >= toDate('2026-05-22')
AND date < expiration_date
AND volume > 0
GROUP BY exp_date
),
atm AS
(
SELECT
toDate(g.expiration_date) AS exp_date,
argMin(toFloat64(g.strike_price), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close))) AS strike,
argMin(toFloat64(g.option_close), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close))) AS premium_before,
argMin(toFloat64(g.underlying_close), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close))) AS spy_before
FROM global_markets.options_greeks AS g
INNER JOIN last_sessions AS ls
ON ls.exp_date = toDate(g.expiration_date) AND ls.prior_session = toDate(g.date)
WHERE g.underlying_symbol = 'SPY'
AND lower(toString(g.option_type)) IN ('call', 'c')
AND g.date >= toDate('2026-05-22')
AND g.date < toDate('2026-07-01')
AND g.volume > 0
AND g.option_close > 0
GROUP BY exp_date
)
SELECT
toString(a.exp_date) AS expiry_date,
concat(formatDateTime(a.exp_date, '%a %b '), toString(toDayOfMonth(a.exp_date))) AS expiry_label,
round(a.premium_before, 2) AS premium_prior_close,
round(greatest(s.spot - a.strike, 0.0), 2) AS value_at_expiry,
round(greatest(s.spot - a.strike, 0.0) / a.premium_before * 100, 0) AS pct_of_premium_left,
round((s.spot / a.spy_before - 1) * 100, 2) AS spy_move_pct
FROM atm AS a
INNER JOIN spy_by_day AS s
ON s.d = a.exp_date
ORDER BY a.exp_dateFor Mon Jun 1, the contract close the evening before at $2.5 and worth $0.58 at expiry close, 23% of the premium. SPY move 0.12% between the two closes. The last row, Tue Jun 30, move from $2.31 to $5.3 as SPY move 0.75%. Sorted by outcome:
| outcome | expiries |
|---|---|
| 1. Finished at or near zero (5% of the premium or less) | 10 |
| 2. Lost more than half | 1 |
| 3. Lost up to half | 5 |
| 4. Gained, less than doubled | 1 |
| 5. Doubled or better | 4 |
The exact SQL behind every number
WITH spy_by_day AS
(
SELECT
toDate(date) AS d,
medianExact(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 underlying_close > 0
GROUP BY d
),
last_sessions AS
(
SELECT
toDate(expiration_date) AS exp_date,
max(toDate(date)) AS prior_session
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date >= toDate('2026-06-01')
AND expiration_date < toDate('2026-07-01')
AND date >= toDate('2026-05-22')
AND date < expiration_date
AND volume > 0
GROUP BY exp_date
),
atm AS
(
SELECT
toDate(g.expiration_date) AS exp_date,
argMin(toFloat64(g.strike_price), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close))) AS strike,
argMin(toFloat64(g.option_close), abs(toFloat64(g.strike_price) - toFloat64(g.underlying_close))) AS premium_before
FROM global_markets.options_greeks AS g
INNER JOIN last_sessions AS ls
ON ls.exp_date = toDate(g.expiration_date) AND ls.prior_session = toDate(g.date)
WHERE g.underlying_symbol = 'SPY'
AND lower(toString(g.option_type)) IN ('call', 'c')
AND g.date >= toDate('2026-05-22')
AND g.date < toDate('2026-07-01')
AND g.volume > 0
AND g.option_close > 0
GROUP BY exp_date
),
outcomes AS
(
SELECT
a.exp_date AS exp_date,
greatest(s.spot - a.strike, 0.0) / a.premium_before AS premium_ratio
FROM atm AS a
INNER JOIN spy_by_day AS s
ON s.d = a.exp_date
)
SELECT
tupleElement(b, 1) AS outcome,
countIf(o.premium_ratio >= tupleElement(b, 2) AND o.premium_ratio < tupleElement(b, 3)) AS expiries
FROM
(
SELECT arrayJoin([
('1. Finished at or near zero (5% of the premium or less)', -1.0, 0.05),
('2. Lost more than half', 0.05, 0.5),
('3. Lost up to half', 0.5, 1.0),
('4. Gained, less than doubled', 1.0, 2.0),
('5. Doubled or better', 2.0, 1000000.0)
]) AS b
) AS buckets
CROSS JOIN outcomes AS o
GROUP BY outcome
ORDER BY outcomeOut of 21 expiries, 10 finish at or near zero, 1 lose more than half, 5 lose up to half, 1 gain without doubling, and 4 double or do better. Nobody dey trade exactly like this; most 0DTE positions open and close inside the session. And this count no talk anything about profitability. Wetin e show na dispersion: premium of a few dollars turn to a fraction or multiple of itself inside one session, expiry after expiry.
Why far strikes dey cost pass as e look
Same-day contract wey dey two or three percent away from the money fit trade for few cents, and the market for am often get spread of some cents. Make we use hypothetical $0.08 bid and $0.12 ask: the $0.04 spread na 40% of the $0.10 midpoint, and you don lose that amount before SPY even move. At-the-money contract wey quote $2.48 to $2.50 cost less than 1% to cross. Far strike still get small delta, so e need big move before e fit pay anything, and the low price dey encourage bigger position size. Cheap for dollar terms fit cost plenty for spread and for probability of success.
SPX versus SPY: cash settlement, assignment and the 5:30 p.m. cut-off
SPX index options na cash-settled and European-style. When e reach expiry, contract go pay the difference between settlement value and strike for cash. No shares dey change hand, and no assignment dey happen. SPY and QQQ options na American-style with physical delivery. SPY call wey finish one cent in the money go turn to 100 shares per contract. Put go turn to 100 short shares. Holder fit submit exercise instruction until OCC 5:30 p.m. ET cut-off on expiry day. This one na well after the 4:00 p.m. close, though brokers dey set earlier deadlines.
SPY still dey trade after the bell. Contract wey close some cents out of the money fit move in the money and get exercised against seller wey think say e don expire. Short-option 0DTE traders for SPY usually dey close before the bell because of this reason. Many index traders prefer SPX too, together with the tax treatment wey SPX versus SPY options cover.
Monthly SPX contracts dey settle for morning open, while weeklies dey settle for the close. AM versus PM settled options explain the difference.
Risk na the instrument, or na the position size?
Same-day contracts don turn to majority of index option trading. Cboe report say 0DTE make up 56% of SPX options volume for February 2025, na record that time, and 57% of SPX average daily volume for the third quarter of 2025. Most of this volume, traders dey hold am for minutes to hours, and dem size am as fraction of account. The mechanics wey we explain above na the same for dem and for anybody else.
The difference for accounts wey blow up na sizing. One contract outcome distribution dey fixed by the greeks and the payoff. The account outcome na that distribution multiply by number of contracts. $2 contract fit look cheap. But ten of dem na $2,000 wey fit turn zero by 4:00 p.m. That one mean 20% drawdown on $10,000 account from one afternoon. To recover 20% loss, you need 25% gain. The maximum drawdown guide explain that arithmetic, and how risky options trading is apply the same lens to longer-dated contracts.
Wetin defined-risk 0DTE trade dey look like
Defined risk mean say you know the maximum loss and you pay am when you enter the trade. Two structures fit work for beginner:
- Long call or put. The maximum wey e fit lose na the premium. The panels above show how that premium dey move during one session.
- Debit vertical spread: buy one strike and sell another strike wey dey farther away, for the same expiry. The maximum loss na the net debit. The maximum gain na the distance between the strikes minus that debit. The sold leg reduce the cost and cap both the gain and the gamma.
Credit spread too get defined maximum loss. Na the strike width minus the credit. But e collect theta while e still carry concentrated gamma. For SPY, the short leg fit get assigned. Naked short options no get defined loss at all (margin for naked options explain why). The 0DTE strategies guide show how traders dey use each structure.
Everything else for this page — gamma, theta, the spread and the settlement rules — na property of the contract, and trader no fit dial dem down. Number of contracts na the one input wey trader dey set. Common convention among traders wey publish sizing rules na to keep the premium of one 0DTE position at small fixed fraction of the account. 1% na figure wey people cite often. For that size, total loss na normal bad day, instead of drawdown wey go need many months to recover.
FAQ
0DTE options dey risk pass regular options?
For each dollar of premium, yes. For June 2026, at-the-money SPY call wey get one day remain carry 31.8 times the gamma and 28.7 times the daily theta of contract wey get 21-to-45 days, and e no get time to recover from move against am. Dollar risk for bought contract still cap at the premium; na position size dey increase the risk.
Person fit lose pass wetin e pay for 0DTE option?
If you buy am, no. Long call or put fit lose only the premium at most. If person sell uncovered options, e fit lose far pass the credit wey e receive. For SPY or QQQ, short option wey finish in the money go assign 100 shares per contract. Defined-risk spreads cap the loss at strike width minus the credit.
Wetin go happen if 0DTE SPY option expire in the money?
Dem go exercise am automatically if e finish $0.01 or more in the money. Call go become 100 shares of SPY per contract, while put go become 100 short shares, with settlement the next business day. Holders still fit submit or reject exercise until OCC's 5:30 p.m. ET cut-off, but brokers fit set earlier deadlines. SPX options settle for cash instead, so no shares dey involved.
0DTE options get higher gamma?
Yes, and e dey concentrate around the strike. For June 2026, 1% move in SPY shift the delta of at-the-money next-day contract by 0.497, compared with 0.092 for contract wey get 21-to-45 days. When price dey two percent away from the money, the next-day figure fall to 0.042.
Wetin be defined-risk 0DTE trade?
Na trade wey maximum loss don fix when person open am: long call or put, wey fit lose premium at most, or debit spread, wey fit lose net debit at most. Structure dey set the maximum loss; number of contracts decide whether person fit survive that maximum loss.
Every panel above come with the SQL wey produce am. To run the same ladder on QQQ, or use another month, open any query for the Strasmore terminal and change the symbol or the dates.