Skip to content

My live GEX test reached 60 sessions, and the answer is no

Since August my Mac has recorded the SPX option chain every trading day, for one question, does the GEX regime tell you how big tomorrow’s move will be? GEX is gamma exposure, how much hedging the option dealers have to do when the index moves. I wrote the test and the decision rule down before the first counted session, and the code would not give a verdict before 60 clean sessions. Session 60 was 10 November. The verdict is KILL. ❌

Positive gammaNegative gamma
Sessions1422
Next session’s range, % of the open0.82920.8874
  • Gap +0.0581 points, in the direction the theory says
  • p = 0.9531, a gap this small comes from luck almost every time

These are the numbers at 61 sessions, the latest. The direction is right, the size is about a tenth of what the test was built to find.

This is the live half of the study from my 14 year GEX backtest and the GEX vs VIX straddle test. The first post on this question was Does high GEX mean a quiet tomorrow? At the end of the straddle post I wrote that the only fresh data left is the live study. This is it.

The words first

  • Gamma, how fast the dealers’ hedge has to change when the index moves. GEX adds it up over every strike and expiry, using open interest (how many contracts are open)
  • Regime, if dealers are long gamma (positive), their hedging trades against the move, they sell rallies and buy dips. If they are short gamma (negative), their hedging goes with the move and makes it bigger
  • Gamma flip, the index level where total gamma crosses zero. Spot above it is positive, below it is negative
  • Dead zone, spot within 0.3% of the flip, too close to call, so those sessions are left out

The popular story is “negative gamma means bigger moves”. That is about size, not direction, hedging makes whatever move happens bigger, it says nothing about which way. So the test is on the day’s range, not on up or down.

What I wrote down before any data

Pre-registration means writing the hypothesis, the test and what each result means before collecting the data, and then not changing them. I need it here more than usual. The study prices about 960 strategy variants, roughly 480 on any day, and at p < 0.05 about 24 of them will look good by luck alone. If I picked the best one afterwards, I would be trading noise.

The one test that decides everything, I called it H1,

Next-session realized range (daily high − low, as % of open) differs between sessions classified spot > flip and spot < flip, in the direction the mechanism predicts: larger range following negative gamma.

What was fixed,

ItemFixed value
Sign conventionNaive, calls +, puts −
FlipAll expiries from 0 to 5 days
RegimeSpot vs flip, 0.3% dead zone
OutcomeNext session’s range from SPX daily high/low bars
TestTwo-sided block permutation, 20,000 shuffles, fixed seed, α = 0.05
Sample60 clean sessions

And what a fail means, word for word,

H1 not significant → Kill. The premise is wrong; GEX regime says nothing about next-session SPX range.

Two statistics words,

  • p-value, if the regime meant nothing, how often would luck alone give a gap at least this big? Under 0.05 counts as evidence. Mine was 0.95, luck does it 95 times in 100
  • Block permutation, shuffle the regime labels 20,000 times and count how often a random shuffle gives a gap as big as the real one. “Block” means I shuffle chunks of days in a row, not single days, because a regime lasts for days and big days come in groups. Shuffling one day at a time makes up sequences the market never produces, and the p-value comes out too small. The chunk length is the square root of the sample size, so there is no knob for me to turn later

To be honest about one thing, the running H1 numbers did show up in my daily reports, only the verdict was held back. Nothing about H1 changed after counting started. One thing did change, on 26 August, 14 sessions in, the trade test (H2, below) got a sample of 30 trades instead of 60 sessions, because far fewer trades were opening than I planned. It is dated in the file and it did not touch H1.

How the data was collected

  • My Mac runs IB Gateway on an Interactive Brokers paper account and pulls the near-dated SPX and SPXW option chain every trading day, 0 to 7 days out, about 4,000 contracts a scan
  • From each chain it works out GEX, the flip and the regime
  • The next day’s range comes from SPX daily bars, not my own samples, three samples a day miss the real high and low, and miss them most on wild days

A session only counts if it is clean,

CheckNeeds
Strikes with a usable gamma value≥ 90%
Contracts that came back with data≥ 90%
Requested contracts captured≥ 95%
Open interest identical to yesterdaybelow 99%, or the data is stale

A missed session is gone for good, open interest cannot be downloaded afterwards.

Counting started on 6 August, after a week of shakedown that found wiring bugs. I first planned 3 August, then moved it when a code fix landed, which threw away two sessions recorded on the old code.

The result

60 sessions (10 Nov)61 sessions (11 Nov)
Positive gamma14 sessions, 0.829214 sessions, 0.8292
Negative gamma21 sessions, 0.882422 sessions, 0.8874
Gap+0.0531+0.0581
Block p0.91410.9531
Free shuffle p, only reported0.88070.8651
VerdictKILLKILL

Before any data I worked out what this test could find. With about 60 sessions it had an 80% chance of catching a gap of 0.5 to 0.8 points, about half a normal SPX day. The gap I got is 0.06.

That is also the limit of what it says. It cannot rule out an effect much smaller than half a day’s range. It found no sign of the one it was built to find, and the rule I wrote first says that ends it.

The trade test, H2

H1 asks if the signal works. H2 asks if one trade makes money from it, a 0DTE (expires the same day) put spread, 25 points wide, sold only on positive gamma days, short strike at 0.10 delta. Delta is roughly the market’s own odds that the option ends in the money, so a 0.10 delta strike should be broken about 10% of the time.

  • 10 trades of the 30 needed
  • 0 broken, the market priced 1.0
  • p = 0.3513

At 10 trades even zero breaks cannot pass, and it does not matter now anyway, the rule only reads H2 after H1 passes. No strike choice rescues a signal that is not there.

Three side tests, which decide nothing

The review also prints three tests I labelled exploratory before the start. They can give me ideas for a new study, they cannot change the verdict.

A, near vs far from a wall. A wall is the strike with the most call gamma (call wall) or put gamma (put wall), the story is it pins the price. Price touched near walls about twice as often as far ones, calls 59% vs 29%, puts 57% vs 27%. Near walls are closer, so that is expected. The call side was p = 0.031 at 60 sessions and p = 0.067 at 61, one more day moved it across the line, which is exactly why I do not believe rows like this.

B, walls vs delta. Did price end beyond a wall less often than the options said? No. Calls 42% vs 32% priced (p = 0.983), puts 42% vs 43% (p = 0.512). No pinning the market had not already priced.

C, H1 inside VIX thirds. VIX is the market’s 30 day volatility index. I split the sessions into three groups by VIX,

VIXPositive sessionsNegative sessions
Low, 14.2 to 15.5111
Mid, 15.7 to 17.539
High, 17.7 to 28.2012

With 0 to 3 sessions on one side of every group, the gaps inside them mean nothing. What the table does show is that positive gamma lived almost only on calm days and negative gamma on wild ones, in my sample the regime mostly repeated what VIX already said.

It fits with the backtest, mostly

The 14 year backtest on QuantConnect passed H1. On the 2022 to 2026 holdout, the range after negative gamma was 1.57% vs 0.95% after positive, 402 and 546 sessions, p < 0.0001. So why does the live test say no?

On 7 November I ran one more backtest, written down first like the others, does that gap survive once you already know VIX and the last few days’ ranges? On the holdout, no, the gap shrank to +0.037 points, p = 0.39. In 2012 to 2021 a smaller gap was left (+0.158 points, p < 0.0001). So in recent years almost all of the raw gap is VIX and recent moves, the same thing the VIX table above shows live.

Two cautions. The backtest is a different instrument, previous close open interest and one implied volatility per strike, not the live IBKR numbers, so by its own rules it can give ideas but cannot settle the live test. And the backtest’s version of the trade passed its own H2 style test and still lost $17.59 a trade over 418 trades.

Limits I wrote down at the start

  • Dealer positions cannot be seen. “Dealers are long calls and short puts” is an assumption, not a measurement
  • Open interest comes once a day, so 0DTE contracts opened this morning are missing from this morning’s GEX
  • IB Gateway was upgraded after session 43, a check after the upgrade returned the same chain, open interest and quotes

None of these is a reason to discount the result, they are the conditions it holds under.

What is left

The trade does not go live. The pre-registration says,

No exploratory variant may be adopted on the strength of this sample. A variant that outperforms here requires fresh out-of-sample sessions before it can be trusted.

So anything new from the side tests, or a “GEX beyond VIX” version, needs its own rules written down first and its own fresh sessions.

I would have liked a different answer. But without the rule I wrote in July, I could have dug through 61 sessions and 480 variants until something looked good. With it, the answer is one line, the GEX regime did not tell me anything about tomorrow’s SPX range.

🤞Subscribe if you want to see more!

We don’t spam! Read more in our privacy policy

Leave a Reply

Your email address will not be published. Required fields are marked *