How to chart gamma exposure (GEX)
Quick answer
A gamma exposure chart plots, for each strike, the dollar change in dealer delta implied by a 1 percent move in the underlying: open interest multiplied by the contract's Black-Scholes gamma, the contract multiplier, spot squared and 0.01, with calls counted positive and puts negative. Nothing in that calculation comes ready-made out of an options chain, because a chain carries open interest and prices but not gamma, and it carries no information at all about who is on which side. The sign convention is a modeling assumption about dealer inventory rather than an observation, and every reading of the finished chart inherits it.
A gamma exposure chart is a bar per strike, and the height of each bar is a dollar amount: how much the delta of the assumed dealer inventory changes when the underlying moves 1 percent. Positive total means that hedging flow leans against the move and dampens it. Negative total means it leans with the move and amplifies it. The calculation is short. What makes it hard to do well is that two of its three inputs are not in the data you start with.
What the chart actually plots
Strikes run down one axis and dollars run across the other. Each bar is the net gamma exposure at that strike, calls minus puts under the standard convention. Read together, the bars say where hedging flow concentrates: a tall positive bar is a strike whose hedging tends to push price back toward it, and a run of negative bars is a region where hedging pushes price away. The single number people quote, total GEX, is just the sum of the bars.
SpotGamma publishes a free daily SPX version of this chart, and their explainer is honest about the modeling involved, which is more than most of the field manages. What no one publishes is the path from a raw chain to your own version of it, so that is what this covers.
Gamma is not in the options chain
A chain gives you strike, expiration, bid, ask, last, volume and open interest. Some vendors add implied volatility. Almost none give gamma, and the ones that do are computing it with their own assumptions rather than reporting a market observable. So the first job is to compute it. Choosing a feed that carries implied volatility per contract saves the extra inversion step, and the trade-offs between the free sources are covered in where to get free options chain data.
Under Black-Scholes, gamma for a European option is exp(-qT) multiplied by the standard normal density of d1, divided by S multiplied by sigma multiplied by the square root of T, where d1 is [ln(S/K) + (r - q + sigma squared over 2)T] divided by (sigma times the square root of T). Calls and puts at the same strike and expiration share the same gamma, which is worth knowing because it means the call and put legs of a strike differ only by open interest and by the sign you assign them.
That formula needs an implied volatility per contract. If your feed does not supply one, you invert Black-Scholes on the mid price to get it first, which makes your gamma exactly as good as your mid prices. On illiquid strikes with a wide spread, that is not very good, and those strikes are usually the ones with eye-catching open interest.
Scaling gamma into dollars
Raw gamma is deltas per point, per share. To get a chart in money, multiply by open interest, by the contract multiplier (usually 100, but the product specification governs), by spot squared, and by 0.01. The spot-squared term converts a per-point sensitivity into a per-percent one and converts deltas into dollars in the same step. The 0.01 is the 1 percent. Drop it and your numbers are 100 times larger and mean something different, which is the most common reason two people comparing GEX figures cannot reconcile them.
State the convention in the caption. Per 1 percent move is the common one. Per point and per 1 dollar both exist in the wild, and none of them is wrong as long as the reader knows which they are looking at.
A worked example, five strikes
The chain below is illustrative rather than a market snapshot, so the numbers are arithmetic you can reproduce rather than a claim about any real session. Index at 5,000, seven days to expiration, 15 percent implied volatility flat across strikes, multiplier 100, rates and dividends set to zero, calls positive and puts negative. Figures are millions of dollars per 1 percent move.
4,900: gamma 0.00237, call OI 12,000, put OI 30,000, net -1,066
4,950: gamma 0.00340, call OI 18,000, put OI 42,000, net -2,040
5,000: gamma 0.00384, call OI 55,000, put OI 61,000, net -576
5,050: gamma 0.00344, call OI 40,000, put OI 25,000, net +1,291
5,100: gamma 0.00246, call OI 33,000, put OI 14,000, net +1,170
Total: about -1,222 million dollars per 1 percent move. Work the 5,000 line by hand to check your own implementation: 0.003841 times 100 times 5,000 squared times 0.01 gives 96,025 dollars of delta change per contract per 1 percent, so 55,000 calls contribute about 5.28 billion and 61,000 puts subtract about 5.86 billion.
The sign is an assumption, not an observation
Open interest counts contracts. It does not say who holds them. The convention that dealers are long calls and short puts comes from a story about customer behavior, that retail and institutional flow buys puts for protection and sells calls for income, and the story is often true and sometimes badly wrong. Around an index expiration dominated by call overwriting, or in a name where a large holder has sold puts, the sign can invert for a specific strike without anything visible happening in the data.
This is not a reason to skip the chart. It is a reason to label it. If the caption says net gamma exposure by strike, assuming dealers are long calls and short puts, a reader can judge the assumption. If the caption says dealer gamma, you have quietly asserted knowledge of positioning that nobody outside the dealer has.
The flip level is computed, not read off the bars
The gamma flip, the price at which total exposure crosses from positive to negative, is the level most readers care about, and it is not the strike where the bars change color. It is found by re-evaluating the entire chain at hypothetical spot prices, holding open interest fixed, and locating the crossing.
Run the example chain that way and total exposure is about -1,222 million at 5,000, roughly -131 million at 5,030, and about +217 million at 5,040, so the crossing sits just under 5,035. Note that this is nowhere near 5,050, the first strike whose own bar is positive. Charting the flip means plotting a second series, total exposure against hypothetical spot, and it deserves its own panel rather than an annotation on the bar chart.
One caveat belongs in the caption of that panel: it holds open interest constant while moving price, and in a real move open interest changes. It is a sensitivity, not a forecast.
Time to expiration moves the number more than positioning does
Gamma scales inversely with the square root of time, so the same chain gets dramatically less gamma-heavy as expiration recedes. Take the example above and change nothing except days to expiration, from seven to thirty: total exposure falls from about -1,222 million to about -615 million. Half the number, identical positioning.
Two consequences for the chart. First, a GEX time series compiled across days is contaminated by the expiration calendar unless you fix the maturity set you include, in the same way a naive implied volatility series is contaminated by rolling front months, a trap covered in how to chart IV rank and IV percentile. Second, if you aggregate all expirations into one bar per strike, the front expiration dominates it. Splitting by expiration bucket, or charting the nearest expiration alone, usually says more.
Conventions that make it readable
Put strikes on the vertical axis and dollars on the horizontal one. A gamma exposure chart is read against price levels, and price levels belong on the axis that runs the way price runs on every other chart in the piece. Anchor a zero line and mark spot. Color by sign rather than by call and put, because sign is the thing being read.
Show the call and put components as well as the net if you have room, since a small net bar can hide two enormous offsetting legs, and a reader who cannot see that will over-trust the net. The same logic drives the stacked layout in how to chart options open interest by strike, which is the chart to pair this one with: open interest shows where the contracts are, gamma exposure shows what they do.
Trim the strike range. A full chain runs hundreds of strikes, most of them carrying almost no gamma, and plotting all of them squashes the region that matters into a few pixels. Ten percent either side of spot is a reasonable default, stated in the caption.
[QUADESTO-EMBED: net gamma exposure by strike for the nearest SPX expiration, calls and puts shown as components behind the net bar, zero line and spot marked, secondary panel plotting total exposure against hypothetical spot with the flip crossing labeled]
Publishing it
A gamma exposure chart goes stale within the session, which makes it a poor fit for a screenshot in a note and a good fit for a live embed that recomputes from the chain. If you are writing a daily or weekly options letter, the version your readers should see is the one that is current when they open it, not when you wrote it. Quadesto builds these from an uploaded or connected chain and gives you an embed that stays live, on the free tier with attribution or on Pro at 149 pounds a month without it.
Whichever way you build it, keep the three labels: the sign convention, the dollar convention, and the expirations included. A gamma exposure chart without them is a picture of a number nobody else can reproduce.