Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-10-09

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.

QueryHow much at-the-money SPY call cost, by days to expiry (June 2026)
dte bucketavg premiumbreakeven move pctdouble move pctdelta move pct
1 day (next session)3.020.410.810.79
2-5 days4.770.641.291.25
6-10 days6.70.91.81.73
11-20 days9.021.222.432.31
21-45 days14.271.923.843.56
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 am yourself

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.

QueryGamma and theta per dollar of premium, by days to expiry (June 2026)
dte bucketgamma per premium dollartheta pct per daygamma ratio vs month outtheta ratio vs month out
1 day (next session)0.029551.831.828.7
2-5 days0.009317109.4
6-10 days0.00476.95.13.9
11-20 days0.00233.92.52.2
21-45 days0.00091.811
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 am yourself

Per 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.

QueryDelta change from 1% SPY move, by distance from the strike (June 2026)
moneynessnext day delta shiftmonth out delta shift
-2%0.0780.071
-1.5%0.1310.077
-1%0.2240.081
-0.5%0.3720.087
0%0.4970.092
+0.5%0.3880.097
+1%0.2110.098
+1.5%0.0940.097
+2%0.0420.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_pct
Run am yourself

For 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.

QueryAt-the-money SPY call: prior close versus value for expiry close, every June 2026 expiry
21 rows (showing 20)
expiry dateexpiry labelpremium prior closevalue at expirypct of premium leftspy move pct
2026-06-01Mon Jun 12.50.58230.12
2026-06-02Tue Jun 22.712.63970.4
2026-06-03Wed Jun 31.6200-1.2
2026-06-04Thu Jun 43.993.56890.53
2026-06-05Fri Jun 52.9800-2.54
2026-06-08Mon Jun 83.953.72940.46
2026-06-09Tue Jun 92.7500-0.41
2026-06-10Wed Jun 103.6100-1.74
2026-06-11Thu Jun 115.4416.483032.3
2026-06-12Fri Jun 123.53.45990.4
2026-06-15Mon Jun 153.4811.913421.54
2026-06-16Tue Jun 162.2200-0.42
2026-06-17Wed Jun 172.2300-0.69
2026-06-18Thu Jun 180.890.941060.18
2026-06-22Mon Jun 223.1500-0.44
2026-06-23Tue Jun 232.7800-1.16
2026-06-24Wed Jun 242.752.2800.3
2026-06-25Thu Jun 252.6800-0.61
2026-06-26Fri Jun 263.6100-0.2
2026-06-29Mon Jun 293.869.762531.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_date
Run am yourself

For 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:

QueryHow the at-the-money call end, June 2026 expiries
outcomeexpiries
1. Finished at or near zero (5% of the premium or less)10
2. Lost more than half1
3. Lost up to half5
4. Gained, less than doubled1
5. Doubled or better4
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 outcome
Run am yourself

Out 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.

#0dte#gamma#theta#spx#risk#beginners