GEX · Methodology
I compute the ES and NQ gamma levels from the SPX and NDX index option chains themselves — the books where index dealer flow actually lives, daily expirations included — using per-contract Black-Scholes gamma weighted by open interest, aggregated across the nearest ten expirations within 60 days, and moved onto the futures contracts by the live futures-to-cash basis. The whole surface recomputes about every 60 seconds through the session. The same engine runs 31 books in total; where another asset class is handled differently, this page says exactly how.
This page describes the computation as it actually runs — the data it starts from, the assumptions baked in, and the things the numbers genuinely cannot tell you. I build and trade with these levels myself, so I would rather you understand their limits than trust them blindly.
The inputs are a licensed options-chain feed — strikes, expiries, open interest, bid/ask quotes, and per-contract implied volatility — for the SPX and NDX index option books themselves, fetched in a ±10% strike window around spot, plus the live ES and NQ futures prices from my market-data pipeline. The index chains are where the daily expirations and the dealer flow behind them actually trade; an earlier generation of this engine read the index-tracking ETF chains instead, and moving to the real index books removed a proxy step this page used to have to apologize for.
One timing fact matters more than any other: posted open interest is an exchange-published figure that updates on a daily cycle, while implied volatility and quotes move all session. So the intraday movement you see in the levels comes from the live volatility surface and spot — not from fresh open interest.
Every cycle — roughly every 60 seconds — the calculator runs the same pipeline for each market:
1 · Select expirations
Take the nearest ten expirations within 60 days on the index books: same-day 0DTE, the dailies, the weeklies, and the next monthly — measured at 80%+ of the strike window's open interest, because index books are near-dated heavy. The monthly-heavy books (metals, single names, crypto) take the nearest fourteen instead: their open interest concentrates in the monthlies, and a shorter cut misses the largest expiry in the chain while looking entirely plausible. Far-dated LEAPS are excluded on purpose everywhere — their deep-strike open interest is large but contaminates near-the-money gamma without saying anything about today's hedging.
2 · Filter strikes
The chain is fetched in a ±10% strike window around spot — that is where levels can honestly live — with a wider ±30% guard applied again at compute time. Implied volatility is capped at 200% to reject the occasional garbage print from the feed; a contract with zero posted open interest but a live two-sided quote counts at a minimum weight of one so weekend structure isn't lost.
3 · Compute per-contract Greeks
For every surviving contract, compute Black-Scholes gamma (plus vanna and charm) at its own quoted implied volatility and time to expiry, then weight by open interest and the contract multiplier.
4 · Apply the dealer-positioning convention
Call open interest contributes positive dealer gamma; put open interest contributes negative dealer gamma — the standard assumption that dealers are net short both legs of customer flow. This is an assumption, not an observation; see the limits section below.
5 · Aggregate and identify levels
Sum the contributions per strike into a net dealer-gamma profile, then identify the named levels from that profile (next section).
6 · Map to the futures and publish
Shift every index-book level by the live futures-to-cash basis — an additive offset captured from a live futures print against a live cash print, held across the overnight gap rather than recomputed from a frozen quote — snap it to the futures tick grid, and publish. Only if the cycle passes a quality gate (at least one named level or non-zero gamma); a failed cycle publishes nothing rather than something stale.
The same fail-closed rule extends to the website: the live caption on /levels renders nothing at all if the freshest computation is more than a few minutes old. No level is always better than a stale level stamped with today's date.
Call wall
The strike carrying the largest positive net dealer gamma at or above spot, within 10% of spot. If no qualifying strike exists, no call wall is published — a "wall" 20% away is noise, and I'd rather omit the level than stretch the definition.
Put wall
The mirror: the strike with the most negative net dealer gamma at or below spot, within 10%. Same rule — no qualifying strike, no level.
Zero-gamma flip
Solved, not looked up. The flip is the hypothetical spot price at which total net dealer gamma would cross zero, found by binary search within ±15% of spot, recomputing every contract's Black-Scholes gamma at each candidate price. If net gamma doesn't change sign anywhere in that window — a book uniformly long or short gamma — no flip is published. I don't fabricate a number.
Max pain
The strike that minimizes total option-holder payout, computed from open interest across the aggregated chain. Published only when it lands within ±10% of spot.
Expected move
The at-the-money straddle: the mid price of the nearest-expiry ATM call plus the ATM put, projected above and below spot.
High-gamma zones, vanna, charm
The next-largest strikes by absolute net gamma become the numbered GEX levels and high-gamma zones (capped around 20 levels total so the chart stays readable), plus the top two strikes each by absolute vanna and charm.
0DTE share and regime
The 0DTE percentage is the same-day expiry's share of total absolute gamma. The regime flag (positive/negative) compares spot to the flip, falling back to the sign of total net gamma when no flip exists.
An index-book level starts life in SPX or NDX points and has to land on an ES or NQ chart. The mapping is an additive basis — the live futures price minus the live cash print, captured only while the cash session is actually trading and held across the overnight gap. A basis is the honest shape for this: carry, dividends and roll move the futures a fixed distance from cash, not a fixed multiple, and recomputing a multiplier against a frozen overnight quote used to make strikes drift when nothing in the book had moved. If no live pair has been seen yet (a cold start), the calculator re-uses the basis of the last published cycle rather than inventing one.
After mapping, each level is snapped to the futures contract's tick grid, so what you see on the chart is a tradeable price, not a fraction that no order could ever rest at.
The engine runs 31 books — the index futures, gold and silver, the Dow and the Russell, bonds, the Mag 7 plus AMD, PLTR, COIN, MSTR, NFLX and AVGO, and bitcoin and ethereum computed from their own listed options books. The pipeline above is the same for every one of them; what differs per class is where the chain comes from and what coordinate the levels publish in:
Single names and equity ETFs
AAPL through AVGO, and the index ETFs, read their own listed chains and publish in their own dollars — no mapping at all. Their strike grids are coarser than the index books, and the panel prints them at that grid.
Metals, the Dow, the Russell
The trust and ETF books (GLD, SLV, DIA, IWM) publish twice: once in their own dollars, and once projected into the futures coordinate (GC, SI, YM, RTY) by a mechanical share-to-underlying relationship — GLD holds bullion, DIA is the Dow over a hundred — with the ratio learned live from a public futures quote rather than hardcoded. Mechanical is the test: TLT stands in for bonds in its own dollars and is deliberately NOT projected onto ZB, because a 20-year basket against a cheapest-to-deliver future is a correlation, not a structure.
Bitcoin and ethereum
Native books from the crypto-options venue where the depth actually is — real BTC and ETH strikes on round numbers, the venue's own index price, no ETF chain mapped onto a coin. The listed IBIT book is kept alongside as its own coordinate, because it is a genuinely different crowd.
Where “dealer” applies
Only the index books carry the dealer-positioning convention — that is where the customer/dealer structure behind the phrase exists. On crypto and metals I publish the same walls and flip from the same math, and deliberately do not call it dealer positioning; the pages and panels that show those books say so on the surface.
I want to be precise about the limits, because every gamma-levels product on the market shares most of them and few say so.
Dealer positioning is an assumption, not an observation.
No public feed reports who is long or short each strike. The convention here — dealers net short customer flow on both legs — is the standard one, and I sanity-check the aggregate sign against market behavior, but a day where dealers are positioned unusually will move the true walls away from the computed ones. Treat the levels as a well-informed map of hedging pressure, not a measurement of it.
Open interest is a daily number.
A large 0DTE position opened at 10am won't appear in posted open interest until the next day. Its footprint shows up indirectly — through implied volatility and price — which the ~60-second recompute does capture, but the OI weights themselves refresh on the exchange's cycle. On the heaviest 0DTE days, that is the biggest single source of drift between any OI-based model and reality.
A futures level is a mapped index strike.
An ES "call wall" here is a real SPX strike moved by the live futures basis — not a strike where ES options open interest itself sits. That is a far smaller caveat than the ETF-proxy step an earlier generation of this engine carried, because the strike is the actual index strike the dealer book hedges; but the mapped price still inherits whatever basis drift accumulates between live captures, and the projected books (gold, silver, the Dow, the Russell) additionally inherit their learned share-to-underlying ratio.
Magnitude matters.
A thin options book produces weak walls. The gamma concentrations behind each level differ by orders of magnitude day to day, which is why the terminal draws the levels with their gamma context instead of presenting every wall as equally important. These are context for reading order flow at a price — not signals, and not advice.
These are the levels drawn on the chart in the Sharpnel desktop terminal, summarized each morning in the free daily read, graded after every close under a fixed public rule, and defined term-by-term in the glossary.
See the levels on a chart