How often do SPX dealer-gamma levels hold?

Five levels, 1,086 sessions, read at 10:00 ET and judged against the rest of the day

Published 2026-08-22 · Re-measured 2026-08-24 on the wide-book archive · Sample SPX, 2022-04-14 to 2026-08-21, 1,086 trading days · Levels zero-gamma flip, hold-band top and bottom (measured dealer book), prior session high and low · Out of sample the one positive result is split three ways below · Status measurement, not a signal

"Does this level hold?" is a better question than "is this level interesting": it is the one a stop is placed against, and its failure case carries the size of the damage. So the table below is shaped like a stop panel — hold rate, broke during the day, broke at the close, came back, how far the break travelled — for the levels the terminal draws, next to the two levels everyone draws: yesterday's high and low.

No lookahead. Each level is read once, 30 minutes after the open, and then judged only against the minutes that follow. The flip and the band move through the day; scoring them against their own later values would be scoring a level that already knew the answer.

The table

level (at 10:00 ET)sessionsheldbroke at closecame backavg overshootworst overshoot
hold band — top1,03595.1%3.4%31.4%17.1 pts179 pts
hold band — bottom1,03590.3%6.0%38.0%27.3 pts206 pts
zero-gamma flip1,05288.6%6.6%42.5%26.7 pts206 pts
prior session low88770.2%14.9%50.0%24.2 pts167 pts
prior session high78463.9%22.4%37.8%20.9 pts213 pts

"Sessions" counts the days on which the level existed and sat on the correct side of spot at 10:00 (a prior high already below spot is not a level being defended).

Definitions, so the numbers cannot be read as something else

Held — spot never traded beyond the level at any minute close after 10:00. Broke at close — the session's last print was beyond it. Came back — of the sessions that broke during the day, the share that closed back on the original side. Overshoot — the furthest distance beyond the level, in index points, among the sessions that broke. Median distance — how far the level sat from spot at 10:00, in points and in the sigma units of the touch surface (trailing 30-minute realised move × √minutes left).

The hold band is the corridor of hypothetical spot in which the measured dealer book stays long gamma — inside it hedging damps moves, outside it the same hedging amplifies them. Its edges are read from the measured 0DTE-plus-near-expiry book at 10:00. The flip is the root of that book's gamma ladder. Prior high and low are the previous session's maximum and minimum one-minute print.

How much of this is just distance?

A level two sigma away holds most days because it is two sigma away, not because it is a level. So each event was also scored against the empirical touch surface: given the side, the distance in sigma and the minutes left, how often was any level that far away reached? The baseline is side-specific — selloffs travel further than rallies in sigma terms, so a level below spot is compared with downside reach and a level above with upside reach — and day-clustered like everything else here. "Expected break" is that rate; "excess hold" is expected minus actual, with one binomial standard error of the break rate in brackets. The match is to the same minute of every other session (10:00), not to a wider time bucket: the opening half hour's scaler is the day's highest, so a bucket that mixes 09:40 with 11:00 would flatter any level read early.

level (at 10:00 ET)median distancein sigmaexpected breakactual breakexcess hold
hold band — top64 pts1.6σ7.9%4.9%+3.0 pp (±0.7)
hold band — bottom77 pts2.0σ9.8%9.7%+0.1 pp (±0.9)
zero-gamma flip75 pts1.9σ11.3%11.4%−0.1 pp (±1.0)
prior session low37 pts1.0σ29.2%29.8%−0.5 pp (±1.5)
prior session high29 pts0.7σ36.6%36.1%+0.5 pp (±1.7)

The answer is: mostly, yes. The band's lower edge, the flip and yesterday's range all break within one standard error of what their distance alone predicts. A level 2σ from spot at 10:00 is reached roughly 10% of the time, and these levels are reached roughly 10% of the time. The one exception is the band's upper edge: it broke on 4.9% of sessions against 7.9% expected for an upside level 1.6σ away at that minute — about a third less often, four standard errors from the baseline. Read at 10:30 instead, every hold rate moves by a point or two and the ranking stands; the upper edge's excess narrows to +1.8 pp, and the lower edge and the flip show +1.4 and +1.5 — a few points across the band, not a regime.

Two ways to read that. The band's edges are set by the book, and its width is what buys the 90–95% — which is the number a reader actually wants: a level that far away holds nine days in ten, and now the table says so with its sample attached. And the edges adding a point or three beyond distance is consistent with the mechanism the band describes — long-gamma hedging leaning against the move — without proving it; it is an observation to keep testing, not a result to trade.

Does the upper edge survive a holdout?

It is the only positive number on this page, so it gets the test that positive numbers on this site get. The whole exercise was re-implemented independently — different source (the published per-minute feature store rather than the pipeline's own parquet), different code, a touch baseline rebuilt from scratch — and it reproduces this table: +3.1 pp for the upper edge against the +3.0 above, −0.1 for the flip, 0.0 for the lower edge. Then the sample is split, with each era scored against a baseline built only from its own sessions:

holdoutdevelopmentheld out
last 150 sessions+3.6 ± 0.7 (t 5.1)+0.7 ± 1.5 (t 0.5)
last 250 sessions+3.4 ± 0.8 (t 4.3)+2.3 ± 1.0 (t 2.3)
last 400 sessions+3.6 ± 1.0 (t 3.6)+2.4 ± 0.8 (t 3.0)

Read the small column for what it can say, which is nothing. A 150-session holdout of this level holds 148 sessions at a 5% break rate — about seven break events. Its standard error is 1.5 pp, so an effect of 2.4 pp arrives at t = 1.6 however real it is; that column cannot reject and is an absence of evidence rather than evidence of absence. The 250 and 400-session columns have the events to answer, and both put the excess between 2 and 3 points with two to three standard errors behind it. The effect is in the recent tape, smaller than the full-sample number, and still the only level on this page that beats its own distance.

The two columns a stop is priced against

When a band edge or the flip does break, the session closes back inside 31–43% of the time, and the average overshoot is 17–27 points — with worst cases of 180–210 points. The prior day's low is the level most likely to be revisited and the one most likely to come back (50%); the prior high has the worst tail (213 points). None of this says where to put a stop. It says what each choice has cost, historically, when it was wrong.

Caveat

Breaks are judged on minute closes. A spike that pierced a level and reverted within the minute is not a break here, so every hold rate is an upper bound. The touch-surface baseline is measured the same way, so the comparison between them is fair even though each number alone is optimistic. The sample is one regime-spanning window — 2022's bear market through 2026 — and the hold band exists only since the measured book did; the rates are statements about these 1,086 sessions, not laws.

Reproduce it

Each finished session's JSON at https://firmtape.com/snapshots/YYYY-MM-DD.json carries the one-minute series this is built from: spot, flip, hold_hi, hold_lo (aligned with minutes, 09:30 to 15:58 ET). Index 30 is 10:00. Prior high/low are the previous session's max/min of spot. The scoring, in full:

pythonreproduce
REF = 30                                   # 10:00 ET
s0, fwd = spot[REF], spot[REF+1:]
level = hold_hi[REF]                       # or hold_lo, flip, prior_hi, prior_lo
side = "above" if level > s0 else "below"   # skip if the level is on the wrong side
broke  = (fwd > level).any() if side == "above" else (fwd < level).any()
closed = fwd[-1] > level      if side == "above" else fwd[-1] < level
overshoot = (fwd.max() - level) if side == "above" else (level - fwd.min())
# distance in sigma: rv = trailing-30-minute std of log returns * spot, at minute 30
#   u = |level - s0| / (rv[30] * sqrt(len(spot) - 1 - REF))
# expected break = share of sessions whose reach from minute 30, same side, was >= u

The session pages at /sessions state each day's levels in prose, and the MCP server returns the same summaries — enough to spot-check any row of the table against a day you remember.

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