Seven ways to measure dealer gamma
Same outcome, same sample, same controls — the measure is the only thing that moves
The previous post put the oldest claim in dealer-positioning commentary through a ladder of controls and found that the two public conventions lose it entirely to the leverage effect, while the tape-signed book keeps it. That raises an obvious follow-up, and it is one nobody can ask without a terminal that publishes more than one book: how much of a dealer-gamma result is a property of the market, and how much is a property of the measure?
So: one outcome, one sample, one set of controls, and seven measures of the same idea. Every one is a measure a published screen or a paper could plausibly use. The regression ladder is imported from the previous study rather than copied, so "the same specification" is a property of the code and not a claim in a paragraph.
The seven
| measure | what it is | short gamma on |
|---|---|---|
| 0DTE ladder, tape-signed | the measured book, expiring contracts only | 12.4% of minutes |
| 0DTE ladder, cp × open interest | the public convention, 0DTE only | 44.9% |
| 0DTE ladder, cp × volume | the volume convention, 0DTE only | 41.2% |
| everything but 0DTE, tape-signed | the same measured book on contracts that survive the day | 28.8% |
| net gamma at spot, tape-signed | what this terminal leads with | 12.3% |
| net gamma at spot, cp × OI | what every public screen leads with | 43.8% |
| net gamma at spot, cp × volume | the third convention | 41.4% |
"Short gamma on" is the share of minutes the measure calls negative — already a spread of 12% to 45% for the same market, before anything is tested.
The ladder, thirty-minute horizon
Each column adds one control. The last one is the one the previous post identified as decisive: on a convention book "short gamma" largely means spot is below the flip, and on SPX the flip normally sits about 75 points under spot, so the dummy partly encodes the market fell today.
| measure | raw gap | + trailing vol | + day & clock | + the session's return | holdout |
|---|---|---|---|---|---|
| 0DTE ladder, tape-signed | +0.293 | +0.064 | +0.049 | +0.047 (t +4.63) | +0.178 (t +2.45) |
| net gamma at spot, tape-signed | +0.352 | +0.067 | +0.053 | +0.050 (t +4.84) | +0.216 (t +3.17) |
| everything but 0DTE, tape-signed | +0.149 | +0.036 | +0.010 | +0.010 (t +1.18) | +0.055 (t +1.11) |
| 0DTE ladder, cp × OI | +0.394 | +0.070 | +0.023 | −0.009 (t −0.83) | +0.052 (t +1.51) |
| 0DTE ladder, cp × volume | +0.215 | +0.035 | +0.032 | +0.002 (t +0.25) | +0.020 (t +0.72) |
| net gamma at spot, cp × OI | +0.491 | +0.095 | +0.042 | +0.014 (t +1.05) | +0.078 (t +2.10) |
| net gamma at spot, cp × volume | +0.218 | +0.039 | +0.038 | +0.009 (t +1.15) | +0.029 (t +1.01) |
Coefficient on a short-gamma dummy in a regression of log forward realised volatility. Standard errors clustered by session; fixed effects absorbed by two-way demeaning. The 15-minute horizon tells the same story more weakly for the conventions and the same story again for the two survivors.
Three things the table says
Nothing points the other way. Not one of the seven is negative at two standard errors in the fully controlled column, so the disagreement that exists in the published literature does not reproduce here as a sign flip. What separates the measures is not direction. It is whether they see anything at all.
Only the tape-signed measures survive. Both of them, at four and a half standard errors on development and at two and a half to three on a holdout that was scored once. All four convention measures are inside noise once the market's own direction is removed — and one of them, the 0DTE open-interest book, ends up slightly negative.
It is a 0DTE effect. This is the row that surprised us. Take the SAME measured book, on the SAME sessions, with the SAME controls, and apply it to everything EXCEPT the expiring contracts: +0.010, t +1.18. Nothing. The whole of the effect sits in the contracts that die at the close. That is not a claim about 0DTE being special that was assumed and then confirmed — the split was run because the feature store already carries the two halves separately, and this is what came back.
What this is not
It is not a replication of the published 0DTE disagreement, and that has to be said clearly rather than buried. Adams, Fontaine and Ornthanalai find that 0DTE liquidity providers attenuate volatility; Brogaard, Han and Won reach the opposite sign on a different measure. But their quantity is the net effect of 0DTE activity existing on the volatility of the market, which needs an instrument or a regime comparison, because 0DTE volume is not randomly assigned. This study cannot answer that and does not try.
What it can do is test the mechanism both camps assume — that the dealer's gamma sign moves the volatility that follows — and report which measures of that sign see it. The consequence for a reader of that literature is narrower than an adjudication and still worth stating: a study using a net-open-interest measure of 0DTE dealer gamma, which is what the attenuation camp uses, would find nothing here to attenuate with. On this market, in this window, that measure has no relationship to the volatility that follows.
What it does not say
The effect is small. The coefficient is on log volatility, so +0.047 is about 5% more realised volatility over the next half hour, and the sign adds a fraction of a percent of R² to a regression that volatility already owns. A real conditioning variable; not a trade.
Volatility is not direction. Nothing here says which way price goes, and this site's direction tests have died repeatedly.
The tape-signed book's per-print sign is a coin flip. Scored against Cboe's participant-tagged trades on a single session, the signing rule classifies the initiator almost perfectly and the customer barely better than chance. That is a statement about one print; this page is about a book aggregated over a session, and a reader who takes this as evidence that per-trade signing is accurate has read more into it than is here.
One window, 2022 through 2026; minute closes; a 40-session holdout, which is 13,200 minute-observations but only 40 independent days. Nothing on this page is investment advice; see the Terms.
Reproduce it
All seven measures are in the public session files. ngv_meas and
ngv_conv ship as per-minute arrays; the volume book's twin is
sec.ngv_volcp in the per-second block; and the 0DTE and non-0DTE halves come
from the ladder frames, where g is the measured book per strike and
g0 is its 0DTE-only twin, so the "everything but 0DTE" series is one
subtraction.
import json, urllib.request, numpy as np, pandas as pd d = json.load(urllib.request.urlopen( "https://gex.live/snapshots/2026-08-21.json")) # ~7 MB, fetch sequentially s = np.array(d["spot"], float) # the two halves of the measured book, from the ladder frames z0, nxt = {}, {} for f in d["frames"]: g = np.array([v or 0 for v in f["g"]], float) # whole book, per strike g0 = np.array([v or 0 for v in f["g0"]], float) # 0DTE only z0[f["t"]], nxt[f["t"]] = g0.sum(), (g - g0).sum() # forward-fill these to the minute r = np.diff(np.log(s), prepend=np.nan) H = 30 trail = pd.Series(r).rolling(30, min_periods=10).std().values * s fwd = pd.Series(r).rolling(H).std().shift(-H).values * s ret_d = np.log(s / s[0]) ret_30 = np.r_[np.full(30, np.nan), np.log(s[30:] / s[:-30])] # per minute, pooled over every session: log(fwd) ~ log(trail) + ret_d + ret_30 + 1[measure < 0] # demeaned by day and by minute-of-day, standard errors clustered on the session. # Run it once per measure and change nothing else -- that is the whole study.
The dates are at /sessions. The point of the exercise is that only the measure changes: the same outcome, the same sample, the same controls, seven times.
Part of gex.live research. Measured on the free session archive; every session is free to replay.