What a 0DTE straddle round trip costs
Friction at 15, 30 and 60 minutes — and the leg that costs 3.5 times more
A short-horizon prediction can be real and still be unmonetisable, and the cost everyone models first is the bid-ask spread. So price it: what a round trip in an ATM 0DTE SPX straddle actually costs, filled at the honest touch, at three horizons — and then what took the edge that the spread did not. The friction turns out to be 7.8% to 21.8% of the average move in the position. The trade still dies. It dies on a leg 3.5 times larger than the spread, which a delta hedge does not remove and which most intraday option backtests do not carry at all.
The signal is real — that is why the friction is worth pricing
The state is the trailing realised move over the last k minutes divided by the option
market's implied move over the same k, trlk / impk — the
scale-free form a trader would actually look at. Regressed on realised/implied over the
next H minutes, at k = 30, H = 30: coefficient +0.486, day-clustered
t +12.84, 95% CI [+0.412, +0.560], n = 3,721 on 61 sessions. Consecutive
5-minute entries share up to 55 of their 60 outcome minutes, so the design effect is 6.84 and
the effective n is 544, not 3,721. With time-of-day dummies the coefficient
is +0.352 at t +6.05.
Sorted into deciles of trl30/imp30, the outcome runs
monotonically from 0.697 in the quietest decile to 1.352 in
the busiest at H = 30, 372–373 rows per decile. Day-clustered t against 1.0 is −11.01 at the
bottom and +9.08 at the top, and realised exceeds implied in 9% of bottom-decile windows
against 85% of top-decile ones. Nothing below is a story about a weak
forecast.
The trade, and what it costs to do
Buy (or sell) the ATM-forward 0DTE straddle at the entry snapshot at the honest touch — pay the ask on both legs, or hit the bid on both legs — and close H minutes later at the honest touch at the same strike. Re-picking the ATM at the exit would be a roll, not a close, and would quietly launder the spread. $1.25 per contract per leg is charged on all four leg-events of the round trip, so $5.00. Entries sit on the 5-minute quote grid; exits are capped at 15:30 ET so the option still has at least 30 minutes of life at the exit and is a vol instrument rather than a lottery ticket.
| horizon | mean spread cost | median | fees | total friction | mean |mid-to-mid P&L| | friction / mean move | friction / premium |
|---|---|---|---|---|---|---|---|
| 15 minutes | $29.72 | $30.00 | $5.00 | $34.72 | $159.42 | 21.8% | 1.52% |
| 30 minutes | $30.14 | $30.00 | $5.00 | $35.14 | $268.07 | 13.1% | 1.51% |
| 60 minutes | $31.30 | $30.00 | $5.00 | $36.30 | $466.86 | 7.8% | 1.50% |
Per 1-lot straddle (one call plus one put), both sides of the round trip. "Premium" is the entry straddle mid, $2,260–$2,440 across the sample.
The measured half-spread of the ATM 0DTE straddle, both legs summed, is 0.146 index points mean and 0.150 median; entry and exit together are the $29.72 of spread in the table above. At 60 minutes that is a rounding error against the average move; at 15 minutes it is a fifth of it, which is the real reason short horizons are hard. Neither number is large enough to be the story.
One exclusion matters and is stated rather than buried: the 09:30 snapshot is dropped everywhere. Its mean half-spread is 2.317 index points against 0.146 for all entries from 09:35 on, and all 27 rows in the sample with an entry spread wider than 25% of mid are 09:30 entries — the widest is 63% of mid. That is the opening rotation, not a two-sided market, and its mid is not a price. Including it makes every number in this post slightly worse, never better.
Free fills do not rescue it
Both sides of the unhedged round trip lose at every horizon: long −$34.21 / −$30.79 / −$21.26 and short −$35.24 / −$39.48 / −$51.33 at H = 15 / 30 / 60. Now remove the spread entirely and charge only the $5.00 of fees:
| horizon, side | mid fills | t | honest touch | t |
|---|---|---|---|---|
| 15m long | −$4.48 | −0.52 | −$34.21 | −4.18 |
| 15m short | −$5.52 | −0.64 | −$35.24 | −3.89 |
| 30m long | −$0.66 | −0.04 | −$30.79 | −1.89 |
| 30m short | −$9.34 | −0.56 | −$39.48 | −2.30 |
| 60m long | +$10.03 | +0.23 | −$21.26 | −0.49 |
| 60m short | −$20.03 | −0.46 | −$51.33 | −1.15 |
With costless fills the largest |t| anywhere in that table is 0.64. The spread converts "no edge" into a reliable loss; it does not destroy an edge that was there. Whatever is wrong with this trade, better execution does not fix it.
What actually takes it: the IV path
Split the mid-to-mid change into two terms that add up exactly. Reprice the same strike at the exit forward and the shorter remaining life, holding implied vol at its entry value: that is the underlying path, what the position earns from the market moving, net of decay. Everything left over is what the vol surface did in between: the IV path. The two are verified additive to 1.8e-12. Unconditionally:
| horizon | underlying path + decay | t | IV path | t | total mid-to-mid | t |
|---|---|---|---|---|---|---|
| 15 minutes | +$13.13 | +1.96 | −$12.61 | −3.69 | +$0.52 | +0.06 |
| 30 minutes | +$28.22 | +2.09 | −$23.88 | −3.83 | +$4.34 | +0.26 |
| 60 minutes | +$56.58 | +1.38 | −$41.54 | −3.69 | +$15.03 | +0.34 |
The IV path removes 96% / 85% / 73% of the underlying leg, and it is the only term in the table significantly different from zero. Conditional on the signal it is worse, because it is monotone in the signal with the opposite sign. At H = 60, bottom decile against top:
| decile of trl30/imp30, H = 60m | realised/implied | underlying path | IV path | total | friction |
|---|---|---|---|---|---|
| 1 (quietest) | 0.73 | −$212.9 (t −4.7) | +$115.5 (t +2.3) | −$97.5 | ~$33 |
| 10 (busiest) | 1.29 | +$324.3 (t +1.7) | −$130.3 (t −5.6) | +$194.0 | ~$41 |
Read the top decile as a ledger for the long side: the market moves as predicted and that is worth +$324; implied vol falls back and that costs −$130; the spread costs −$35 and the fees −$5; what is left is +$152 with a standard error of roughly $211. The IV path is 3.5x the cost of the spread. Across the deciles the surface gives back 40–58% of the top-decile prediction and 54–81% of the bottom-decile one — systematically, because implied vol mean-reverts against exactly the state that generated the signal.
The mechanism is not "IV falls". Measured directly, the mean annualised-equivalent IV change over the holding window is +0.18% / +0.41% / +0.96% at t +1.30 / +1.59 / +1.72 — not distinguishable from zero. But the median is −0.93% / −1.43% / −2.39% and IV falls in 58.2% of windows at every horizon. The dollar term is negative because vega is largest exactly where IV falls.
The delta hedge keeps the harvest and not the problem
The obvious response is that the underlying leg is what a delta-hedged position keeps, so hedge it. Rerun the identical rows — same strikes, same touch fills, same fees — with the straddle rehedged every minute against the parity forward, and two things happen.
The first is exactly as advertised. The realised-vol harvest is monotone in the signal, running +$265 to +$560 per 1-lot from decile 1 to decile 10 at H = 60, at day-clustered t +13.06 where the unhedged endpoint version managed t +1.7. On that same cell the standard error of the term the signal predicts falls from $196.1 to $26.6 — a 7.4x reduction. The hedge does not create an edge; it measures the one that is there, almost exactly.
The second was not anticipated, and is the more useful finding. Delta hedging removes delta; it does not remove vega. The IV path is a function of option prices alone — the exit mark minus the frozen-vol repricing — so it is byte-identical between the hedged and the naked position, in every row, under every hedge policy: −$130.2 in the top decile and +$115.6 in the bottom, unchanged to the last cent. The term that killed the naked round trip survives the hedge intact. The only construction that removes it is one with no exit mark at all, i.e. holding to the 16:00 settlement — which costs 3.6x the hedge adjustments and loses.
The whole study reduces to one ledger. Long ATM 0DTE straddle, top decile of
trl30/imp30, H = 60 minutes, rehedged every minute,
n = 336 on 48 sessions:
| line | $ per 1-lot | clustered t |
|---|---|---|
| gamma — the realised-vol harvest | +560.4 | +13.06 |
| theta | −345.3 | −14.70 |
| IV path (unchanged by the hedge) | −130.2 | −5.58 |
| option spread + $5 fees | −42.1 | |
| = before any hedging cost | +42.8 | +1.02 (95% [−39, +125]) |
| hedging: 61 adjustments, 3.05 delta units @ 0.15 pt | −45.7 | |
| = net | −2.9 | −0.07 |
The cleanest form of the answer is the break-even hedging cost. At H = 60 with 1-minute rehedging it is $0.70 per adjustment, or 0.141 index points per delta unit, against a realistic all-in of 0.149 in ES (half a tick, $12.50, plus $2.40 commission) or 0.175 in MES. At H = 30 the break-even is +0.162, between the two. At H = 15 it is negative — the cell loses before the first hedge is paid for. Sweeping 13 hedge policies against 3 horizons, 10 deciles and both sides gives 780 cells: two clear day-clustered t = +2 and both are the unhedged policy (and both flip sign once one trade per session is taken). Zero delta-hedged cells clear t = +2 anywhere, and 91.5% of the 780 are outright negative.
The costs, in the order they took
Read as a checklist for anyone backtesting a 0DTE idea at intraday horizons, ordered by how much each line took out of the best cell in this study:
- Decay, against the harvest it is paid for (−$345 against +$560). The number a vol forecast earns is the residual of two large, opposite terms. A model that does not charge decay at the entry's own implied vol is not measuring a harvest at all.
- The exit mark: the IV path (−$130). Any option position marked out rather than settled carries the full surface term, hedged or not, and here it moves against the signal that selected the trade. This is the line most intraday backtests omit, and on this evidence it is 3.5x the spread.
- Hedging (−$46). 61 adjustments and 3.05 delta units at 0.15 index points. A 1-lot straddle rehedged every minute moves about one tenth of an ES contract per adjustment, so the honest cost model is proportional to delta traded, not flat per adjustment — a flat charge prices a trade nobody can make.
- The option round trip (−$42). Two-sided spread plus $5.00 of fees. Fourth on the list.
- Size, which is not a dollar line at all. Median touch size at the ATM 0DTE call and put is 20 contracts, the 25th percentile is 8, and 29.9% of snapshots show fewer than 5 contracts at one side of the touch. Every P&L above assumes the full size trades at the posted touch.
- Overlap, which inflates every t-statistic. Consecutive 5-minute entries share up to 55 of their 60 outcome minutes. Day-clustered, the design effect runs 5 to 11 and the effective n is 267–788, not thousands.
What it does not say
It does not say the forecast is weak — it is one of the strongest this programme has measured, and the delta-hedged harvest reproduces it to a few percent across 30 decile cells with no fitting. It does not say the trade is proven to lose. The absolute level is not settled at this sample size. The pre-cost figure is +$42.8 with a standard error of $41.9, and the 95% lower bound on the break-even hedging cost is negative at every horizon (−0.421 / −0.168 / −0.129 index points), so the honest statement is not "the break-even is X and the cost is Y" but "the break-even is X, the cost is Y, and X is not distinguishable from zero". This sample cannot say the trade is profitable even at zero hedging cost.
Everything rests on 61 sessions in one regime with no vol shock, SPX only. The quote grid is 5 minutes, so no result here can distinguish a 60-minute hold from a 55- or 65-minute one. The hedge is modelled generously: it fills at the observed parity price with no latency, the ES basis is treated as deterministic carry, and there is no financing or margin cost on the futures leg — every one of those omissions makes the reported result better than the real thing. The trailing-RV state is built from a per-minute series stamped at the end of the minute and so peeks 60 seconds; a strictly causal per-second variant is carried throughout and agrees (+$43.8 at t +1.09 against +$42.8 at t +1.02). Nothing on this page is investment advice; see the Terms.
Reproduce it
The friction numbers are not free to reproduce: measuring a touch fill needs the option bid and ask. The tape behind this post is licensed — ThetaData (thetadata.net), the SPXW trade and NBBO tick feed, plus the 5-minute full-chain quote snapshots the entries and exits are priced on. A reader redoing it from scratch needs an options subscription that carries SPXW quotes with bid and ask at 5-minute resolution or better, and an index price series fine enough to compute realised vol — this study uses a per-second parity spot. The straddle mid alone will not do it.
What is free is the state variable and the IV path itself. Every finished
session's JSON at https://gex.live/snapshots/YYYY-MM-DD.json carries per-minute
series aligned with minutes (09:30 to 15:58 ET); the dates are the ones listed
at /sessions:
import json, urllib.request d = json.load(urllib.request.urlopen("https://gex.live/snapshots/2026-08-11.json")) d["straddle"] # ATM 0DTE straddle mid in index points, from the 5-minute chain, # carried forward onto the minute grid, never backwards d["atmiv"] # ATM implied vol in percent, backed out of that straddle: # atmiv = 100 * straddle / (0.7979 * sqrt(T) * spot), T = minutes left / (390*252) d["div30"] # atmiv minus atmiv 30 minutes earlier -- the IV path, in vol points d["rvi15"], d["rvi30"], d["rvi60"] # trailing realised range over the last H minutes, from the per-second path, # divided by the implied range 2 * straddle * sqrt(min(H, left) / left) # The round-trip friction this post measures, per 1-lot, needs quotes this file does not carry: # spread = 100 * [ (ask-bid)/2 for the call + (ask-bid)/2 for the put, at entry and at exit ] # fees = 4 leg-events * $1.25 = $5.00
Two honest differences before anyone compares. The free rvi series is a
range ratio — high minus low over the trailing window, over the implied range — while
the study's state is a realised-vol ratio built from squared one-minute returns over the
implied one-standard-deviation move; they are cousins, not the same statistic. And the free
straddle is picked at the strike nearest spot, where the study uses the
ATM-forward strike. What the free files do reproduce directly is the shape of this
post's finding: put div30 beside rvi30 on any archived session and
the IV path leans against the state that just fired.
Part of gex.live research. Measured on the free session archive; every session is free to replay.