Does dealer state move the touch probability?

A pre-registered test: four hypotheses, 987 development sessions, 95 held out

Published 2026-08-22 · Pre-registration written 2026-08-05, before any conditional result existed · Sample SPX, DEV 2022-04-14 to 2026-03-31 (987 sessions, 368,505 minute-observations), HOLDOUT 2026-04-01 to 2026-08-17 (95 sessions) · Status measurement, not a signal

Every previous attempt in this programme asked "does X predict the return" — a question with a wide answer space, no natural benchmark, and a long record of discovery-window results that died out of sample. So this one asks something narrower, with a benchmark that already exists: the empirical probability that price reaches a level before the close, by minutes left and distance in sigma. A state variable earns its place only by moving that probability. "Moves it" is a falsifiable claim with a known null; "predicts returns" is not.

What was registered, and the rules

Four hypotheses, each a difference between the touch rate in a conditioned set of minutes and the unconditional rate at the same (minutes-left bucket, sigma-distance, side). Day-clustered throughout: a session is one observation. To pass on DEV a hypothesis needed the registered sign, |Δp| ≥ 5 percentage points, Benjamini–Hochberg q < 0.05 across the four, at least 60 sessions, a jackknife over sessions that leaves the sign and at least half the magnitude intact, and presence in at least two time buckets. Only a DEV pass earns a read of the holdout.

H1 capacity. When spot sits within 25% of the hold band's width from an edge, that edge is reached more often than an unconditional level at the same distance — outside the band hedging amplifies instead of damping. H2 gamma regime. In negative net gamma the touch rate exceeds the unconditional at every distance; in positive gamma it falls below. H3 inventory. With dealer delta positive (dealers long, must sell into strength) the upside touch rate is below baseline and the downside above; mirrored for negative. H4 skew flip. In the 60 minutes after 25-delta skew changes sign, the touch rate on the newly-bid wing exceeds baseline.

The result, as registered

hypothesis (DEV)sessionsΔp± s.e.registered signverdict
H1 near-edge touch of that edge (both edges pooled)867−5.9 pp0.9+fails — wrong sign
H2 negative gamma, reach pooled up/down (all distances)387−0.2 pp0.5+null
H3 dealer-delta asymmetry on the predicted side987−0.2 pp0.3+null
H4 newly-bid wing, 60 min after a skew sign change901−0.6 pp0.3+null

No hypothesis passed. The holdout was therefore not read for any of the four as registered; under the rules it stays unspent. H2–H4 are nulls in the plain sense — within a point of the baseline with standard errors of half a point — and the pre-registration said in advance what that means: the gamma-regime, dealer-delta and skew layers on the terminal are monitors of the state, and should not be described as anything else. They are not.

H1 is real — and backwards

H1 did not fail for lack of an effect. Near an edge of the hold band, that edge is reached about six points less often than an unconditional level at the same distance and minute — the top edge −6.5 ± 1.1 pp over 632 sessions, the bottom −7.3 ± 1.5 over 483. The registered mechanism (amplification near the boundary) had the sign wrong; the data say the edge is defended more, not less, when price gets close to it.

Because this is a DEV discovery and not a registered pass, everything below is labelled for what it is: exploratory checks on a sign that was not predicted.

checktop edgebottom edgepooled
DEV, bucket-matched baseline (as registered)−6.5 ± 1.1−7.3 ± 1.5−5.9 ± 0.9
DEV, baseline matched to the exact minute−6.4 ± 1.1−7.2 ± 1.5−5.9 ± 0.9
DEV, exact minute, first 30 minutes excluded−5.4 ± 1.1−6.3 ± 1.5−5.1 ± 0.9
DEV, exact minute, first 60 minutes excluded−4.0 ± 1.1−5.3 ± 1.5−4.0 ± 0.9
HOLDOUT (95 sessions), read once for this check only−4.3 ± 2.7−5.8 ± 4.3−4.7 ± 2.2

The effect survives matching the baseline to the exact minute rather than the time bucket, survives dropping the opening half hour and the opening hour (where the trailing scaler is least trustworthy), and reappears in the holdout with the same sign and more than half the DEV magnitude — which is the confirmation rule the pre-registration set for a pass, applied to a hypothesis it did not make. It is concentrated where it should be if it is about the edge: at distances under one sigma the gap is about −10 points; beyond 1.5σ it is gone. It is larger in 2024–2026 than in 2022–2023.

Read carefully, this is the same fact the hold-rate study saw from one read a day: the band's edges break a little less often than their distance predicts. Seen minute by minute from inside the band, "a little" becomes five or six points — when price is already close. That is consistent with what the band claims to measure, a corridor in which dealer hedging leans against the move. It is not a trading result: a six-point shift in a touch probability says nothing about whether fading an approach to the edge survives the spread, and every number here is a lower bound measured on minute closes.

What this does and does not change

Three of the four state layers this terminal draws do not move the odds of reaching a level, on 987 sessions, by any amount worth a decimal place; that is now on the record with its numbers. The band's edges do, in the direction of holding — by a margin that is real and small. Nothing here is an arrow, and the pre-registration exists so that nothing here can quietly become one.

Reproduce it

The touch surface and its construction are in the surface post; the state series are the per-minute hold_lo, hold_hi, dealer-gamma-at-spot, dex and skew fields of each session's JSON at https://gex.live/snapshots/YYYY-MM-DD.json. The scoring, for one hypothesis:

pythonreproduce
# one session: spot, sig (trailing 30-min move x sqrt(minutes left)), up/dn = forward
# extremes in sigma; hold_hi, hold_lo per minute. Unconditional surface P[reach >= u | tb, side].
width = hold_hi - hold_lo
near_top = (spot > hold_lo) & (spot < hold_hi) & (hold_hi - spot <= 0.25 * width)
u_top = (hold_hi - spot) / sig
hit = up[near_top] >= u_top[near_top]                        # did price reach the edge?
excess = hit - surface(tb[near_top], "up", u_top[near_top])   # vs any level that far away
session_excess = excess.mean()                               # one number per session
# Δp = mean over sessions; s.e. = std over sessions / sqrt(n). DEV < 2026-04-01.

The pre-registration text, with its sample split and pass criteria, was committed on 2026-08-05 and is reproduced in full on request.

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