How accurate is the SPX expected move?

A calibration of the ATM-implied move to the close: 1,088 sessions, 82,378 readings

Published 2026-08-27 · Sample SPX regular session, 2022-04-14 to 2026-08-26, 1,088 trading days, five-minute readings with at least 15 minutes to the close · Data per-strike implied vols and one-minute index prints from the public session files · Status measurement, not a signal

Every 0DTE dashboard quotes an expected move — the one-sigma range to the close implied by at-the-money volatility. The terminal quotes one too. Folklore says the straddle "overstates the move most days", sellers repeat it as an edge, and as far as we can find, nobody has published the number: when the screen says ±X points to the close, how often does the close land inside?

The measurement

At every five-minute frame of every session: the ATM implied vol (the mid of the per-strike call and put IVs, interpolated at spot), the expected move EM = S · σ · √τ with τ the year-fraction to 16:00, and then the fact of the matter — did the session's close land within EM of that reading's spot? Under the lognormal reading of the quote the answer should be yes 68.3% of the time; the straddle-breakeven reading (0.8 EM, roughly what the straddle costs) should cover 57.5%. Frames with under 15 minutes left are excluded from the headline — a shrinking σ√τ makes the ratio noisy — and reported separately. Shares are day-clustered: a session's ~76 frames count through their session mean, not as 76 observations.

The answer: conservative by four points, everywhere

thresholdtheorymeasured
inside 1.0 × EM68.3%72.4% ± 0.9
inside 0.8 × EM (straddle breakeven)57.5%62.0% ± 0.9
inside 0.5 × EM38.3%42.4% ± 0.8

The folklore is right in sign and modest in size: the quoted move overstates what the close delivers by about four percentage points of coverage — and the four points sit at every threshold, which says the overstatement is a level of implied volatility, not a fat-tail premium concentrated in the wings.

The overstatement is also remarkably uniform. By time of day, coverage at 1 EM runs 71.0% (open to 10:30), 71.4%, 73.6%, 73.6%, 73.4%, 72.3% (last half hour kept in the headline), and 76.3% in the final quarter hour that is excluded. By year: 71.8, 71.6, 72.4, 74.2, 71.4 for 2022 through 2026. No hour and no regime gives the quote away as badly priced; nothing here has drifted as 0DTE volume grew.

One observation the naive story does not predict

Cut the same readings by the dealer state at that minute — the net-gamma percentile the terminal displays, and the tape-signed 0DTE book's sign — and the gradient runs backwards from intuition. Short gamma is supposed to mean more volatility; if implied vol underpriced that, coverage should fall in the short-gamma tail. It rises: 74.5% ± 1.1 when the gamma percentile is at or below 20, against 71.0% ± 1.3 at or above 80; 74.3% against 71.0% by the measured book's sign. Implied volatility prices short-gamma days even more conservatively than the extra movement they actually deliver to the close. The gaps are two to three standard errors — an observation to check, not a result to lean on.

What this is not

A calibration of the close, not the path: distance is measured on minute closes, so a session that pierced the expected move intraday and came back counts as inside. It says nothing about overnight moves, nothing about whether selling the straddle is profitable after spreads — the round-trip cost study is that question — and nothing here is investment advice; see the Terms.

Reproduce it

Everything needed is in the public session files at https://gex.live/snapshots/YYYY-MM-DD.json (dates at /sessions; ~7 MB per day — fetch sequentially). Each file's frames array carries per-strike ivc/ivp and a t stamp; minutes and spot give the index path and the close. Per frame:

pythonreproduce
iv = (ivc + ivp) / 2                       # per-strike mid IV, percent
sigma = interp(spot_t, strikes, iv) / 100   # ATM vol at the frame's spot
tau = minutes_to_1600 / (60 * 24 * 365)
em = spot_t * sigma * sqrt(tau)
hit = abs(close - spot_t) <= em             # then average per day, then across days

Drop frames with fewer than three finite near-the-money IVs, clip σ to [1%, 200%], and require at least 15 minutes to the close for the headline number.

Part of gex.live research. Measured on the free session archive; every session is free to replay.