Net GEX All Expirations
Dealer gamma exposure by strike — Cboe delayed data (~15 min) — twice-daily snapshots (10:00 & 15:59 ET)
🔍 Full methodology & source code — open for audit (LLM & human review)
Positive GEX Negative GEX DEX Profile GEX Profile Call Resistance Put Support HVL GEX Transition Spot Price
Loading chart…
Profile reconciliation — loading…

What this chart shows

When you buy or sell an option, someone takes the other side — usually a market maker (a "dealer"). Dealers don't want to bet on direction, so every option they hold gets offset by buying or selling the underlying. How much they need to hold changes as the price moves, so they are constantly adjusting. That adjusting is real buying and selling, and it can move the price.

This chart estimates where that forced trading is concentrated. Each horizontal bar is one strike price, and the length of the bar is how much dealer hedging is bunched up there.

Where the numbers come from

Every option contract has a published count of how many are currently open, called open interest. It also has a value called gamma, which measures how quickly a dealer's hedge needs to change as the price moves. Multiply those together, add up every contract at each strike, and you get the bar for that strike. We do this for every expiry date at once, from same-day options out to a year away.

That's the whole calculation: how many contracts exist, times how twitchy each one makes the dealer's hedge.

Green and red bars

Green means dealers there are positioned to trade against price moves — selling into strength, buying into weakness. That absorbs pressure, so price tends to stall or chop around large green bars.

Red means the reverse: dealers must buy as price rises and sell as it falls, adding fuel to whatever is already happening. Large red bars mark where moves can accelerate.

Which colour appears depends on whether calls or puts dominate the open interest at that strike — not on whether the strike is above or below the current price.

The lines, and how each is worked out

Call Resistance — we add up call-side positioning at every strike and mark the largest. That's usually where the most call-selling has happened, and dealers hedging those positions tend to lean against rallies into it. Price often struggles to get through. If the level itself climbs over the following days, that's generally read as constructive.

Put Support — the same calculation on the put side: the strike with the heaviest put-related hedging. Declines often slow as they approach it.

HVL (High Volatility Level) — we take the yellow curve described below and find where it crosses zero. Above that price, dealer hedging is net stabilising; below it, net destabilising. It's the dividing line between the calm regime and the jumpy one. If it sits far from the current price, no change of regime is nearby and today's behaviour is likely to persist.

GEX Transition — the nearest price where individual strikes flip from red to green. It's a local, finer-grained signal than HVL, which is about the whole book at once. The two can sit well apart when one enormous strike dominates everything.

Spot Price — where the underlying is trading right now.

The two curves — what they're actually for

These are the parts people find hardest, so here is the plain version.

The bars tell you about the market as it is right now. The curves answer a different question: what would this look like if the price were somewhere else? We take the entire options chain and re-run the whole calculation pretending the price is 1% higher, then 2% higher, and so on across a wide range. That traces out a curve.

The yellow GEX Profile is the stability map. Where it sits below zero, dealer hedging amplifies moves; above zero, it dampens them. Three things are worth reading off it:

Where it crosses zero is the HVL — the price at which the market's character changes.

How steep it is near the current price tells you how quickly things change if price moves. A steep curve means a modest move flips you into a different environment; a flat one means you're stuck in the current regime for a while.

Which side of zero it sits on right now tells you the regime you're actually in, which is more reliable than eyeballing the bars.

The orange DEX Profile is the hedging-pressure map. It shows how much underlying dealers would need to hold at each price level. The useful part is the slope, not the height: where the curve is steep, a small price move forces a large amount of buying or selling, so moves through that area tend to be quick. Where it's shallow, price can drift without triggering much hedging.

Being honest about it, the DEX Profile is the least immediately actionable thing on this chart. It's context — a sense of where hedging demand thickens — rather than a signal. If you're new to this, read the bars and the yellow curve first and come back to the orange one later.

Using it in practice

Different people use this differently, and none of what follows is a recommendation. It is a description of how this kind of information is commonly read.

Work out your regime first. Check whether the yellow curve is above or below zero at the current price. Negative means expect faster, trendier moves, wider ranges, and less follow-through on fading a move. Positive means expect chop, mean reversion, and moves that run out of steam. This single check changes what kind of trade makes sense — the same setup behaves differently in the two environments.

Treat the levels as places where behaviour changes, not as targets. Call Resistance and Put Support are where hedging is thickest, so price often reacts there — stalling, or breaking through decisively once the level gives way. Traders tend to use them for framing: where to take profit, where a breakout becomes meaningful, where a stop is less likely to be caught by noise.

Watch the levels move between snapshots. A single reading is a snapshot of positioning; the change between morning and afternoon, or day to day, is often more informative. Call Resistance drifting higher over several days means positioning is being rebuilt higher up. A level that holds still through a big price move means positioning isn't following the price, which is a different situation to one where it tracks along.

Check how far HVL is from spot. Close by means a regime change is within reach and worth watching. Far away means the current regime is entrenched and you probably shouldn't expect it to change today.

Note where the biggest bars are relative to price. A very large red bar just below the current price is a different setup to a very large green one just above. The first suggests downside moves can gather pace; the second suggests upside gets absorbed.

What this can't tell you

It says nothing about direction. Dealer positioning describes how the market is likely to behave — smooth or jumpy, absorbing or accelerating — not which way it goes. Plenty of people misread a big green bar as a price target. It isn't one.

It is also only ever a description of one force among many. Earnings, macro news and plain old supply and demand routinely overwhelm hedging flows.

Important limitations

These are estimates built from public open interest. We can see how many contracts exist at each strike, but not who is long and who is short, so we assume dealers sit on one side of every trade. That assumption is sometimes wrong, and where we can detect that it might be, we say so on the chart.

Open interest is published once a day after the close, so the morning and afternoon snapshots share the same position data and differ only in price and volatility.

Levels built mostly from options expiring the same day vanish at the closing bell. Those are marked with a dagger so you know the level is temporary.

This is a description of market structure, not a forecast, and nothing here is financial advice.

Methodology & data sources (click to expand)

Methodology

GEX formula: Per-strike, summed across all expirations: gex_call(K) = Σ |γ| × OI × 100 × S² × 0.01 for calls; gex_put(K) = −Σ |γ| × OI × 100 × S² × 0.01 for puts. Units: dollars of dealer delta change per 1% move in the underlying.

Sign convention: Dealer-perspective long-calls / short-puts. Calls contribute +γ, puts −γ. A strike is green when call gamma exceeds put gamma there, red when put gamma dominates. Because call and put gamma are identical for the same strike and expiry (put-call parity), the sign is driven by the call/put open-interest imbalance at that strike — not by whether the strike is above or below spot. Negative GEX = dealers are short gamma and must amplify moves; positive GEX = dealers are long gamma and dampen volatility.

OI, not volume: Exposure uses open interest (prior session close). Morning and afternoon snapshots of the same day share OI and differ only via spot, IV, and greeks recompute.

DEX Profile (orange): simulated total dealer delta exposure re-evaluated as if spot were at each price level. Generally rising in spot but with a V-shaped minimum where deep-ITM put delta dominates (not monotonic). Its zero-crossing nearest spot is the delta-neutral level; the V minimum is dex_min_price.

GEX Profile (yellow): simulated gamma profile — total net GEX re-evaluated as if spot were at each price level, recomputing Black-Scholes gamma with reported IV held constant (r=4%, q=0%).

Separate colour-matched axes (v1.2.0): the two profiles have different units (GEX = "$ per 1% move", DEX = "$ delta notional") and differ by 1–2 orders of magnitude, so each gets its own axis (GEX yellow, top; DEX orange, bottom). All three x-axes share the same zero. In the default data mode the axis limits are ±1.10× the largest profile value in the visible window, so the curves always fill the panel regardless of the chain’s OI scale. In rolling mode the limit is ±1.2× the median of that ticker’s last rolling_window = 20 profile maxima (read from its history CSV), which keeps the scale comparable across snapshots for a given ticker; it falls back to data when fewer than 5 snapshots exist.

HVL (High Vol Level): the gamma-profile zero crossing nearest spot (v1.5.0). A level that separates a positive-gamma regime above from a negative-gamma regime below IS by definition the sign change of the gamma profile. Always a single defined level with a distance annotation and regime note (near spot / moderately distant / far from spot). If no crossing exists within ±40% of spot, HVL is null and the chart says so — that is a real market state, not an error. v1.5.0 (FIX 28): the inflection rule was retired (it walked to the mask boundary and structurally re-found the dominant put wall).

GEX Transition (v1.5.0): where strike-level net gamma changes sign locally (distinct from HVL which marks where TOTAL portfolio gamma flips). Persistence-hardened: the sign must hold for ≥3 consecutive populated strikes on each side. Colour #7FA6C9.

Vertical-spread detection (v1.5.0): gross OI counts both legs of a vertical spread as dealer-short puts, so their gamma adds when in a real book they offset. Flagged pairs are disclosed in the JSON; the headline chart stays gross-OI.

ATM IV cross-check (v1.5.0): atm_iv is compared against realised_vol_20d (20 daily closes via Yahoo Finance). If iv_hv_ratio > 2.5 or < 0.4, the expected-move is flagged as an outlier and suppressed from the chart.

Gamma condition (v1.4.0): a direct measurement — POSITIVE if the simulated GEX profile at spot is positive, NEGATIVE otherwise. The old spot-vs-HVL inference was invalid once HVL became an inflection point (the profile can be negative on both sides of an inflection). net_gex_at_spot is published alongside.

Volatility-scaled bands (v1.6.0): all chart framing (strike window, profile sweep, plot bounds) is derived from the chain’s own ATM IV: sigma_30d = IV × √(30/365), then each band is a multiple of sigma_30d clipped to guardrail limits. One rule fits any symbol.

Timestamp: Cboe’s timestamp field is UTC, converted to US Eastern for display (EDT/EST). Charts published before v1.1.0 mislabelled it.

Call Resistance: strike with maximum call GEX. Put Support: strike with largest absolute put GEX.