GEX has become the single most talked-about metric in options market structure. It explains why SPY sticks to $580 for three days straight and then drops $15 in an hour. It explains why TSLA gaps through resistance like it doesn't exist while AAPL pins to the penny on expiry Friday.
Most GEX content stops at the basics: positive GEX good, negative GEX bad. That's not enough to trade on. This guide goes deeper: strike-level data, the full dealer exposure stack, and seven concrete trade setups with code.
What Is GEX and Why Does It Move Markets?
When you buy a call, a market maker sells it to you. They hedge by buying shares. But as price moves, the option's delta changes. The rate of that change is gamma. Because gamma shifts delta, the dealer must continuously adjust: buying more when price rises, selling when it falls.
GEX (gamma exposure) is the total dollar-value of stock that dealers must buy or sell per 1% move in the underlying, aggregated across every open option contract.
Positive GEX means dealers mechanically stabilize price. Negative GEX means they amplify moves. This is not discretionary flow. It's mechanical and predictable.
Positive GEX vs Negative GEX
| Regime | Dealer Behavior | Price Action | Strategy |
|---|---|---|---|
| Positive gamma | Buy dips, sell rallies | Mean-reverting, range-bound, slow | Sell premium, fade extremes |
| Negative gamma | Sell dips, buy rallies | Trending, breakouts, fast | Buy premium, trade momentum |
The Four Levels That Matter
Gamma flip: the price where aggregate GEX crosses from positive to negative. The single most important level. Above it, dealers stabilize. Below it, they amplify.
Call wall: the strike with the highest positive call gamma. Acts as a ceiling. Dealer selling intensifies as price approaches. SPY frequently pins here on expiry days.
Put wall: the highest negative gamma from puts. Acts as a floor, but a dangerous one. If it breaks, negative gamma kicks in and the selloff accelerates. The trapdoor level.
Max pain: the strike where total open option value is minimized. Expiry-day magnet. Less relevant mid-week, strongest on Friday.
Think of it as terrain. Call wall = hilltop (hard to climb above). Put wall = cliff edge (safe above, dangerous below). Gamma flip = tree line (cover above, exposed below). Max pain = base camp (where everything settles).
GEX for SPY
SPY has the most liquid options market in the world. Daily 0DTE volume regularly exceeds $1 trillion in notional.
What makes it different: 0DTE options every trading day with enormous gamma. Institutional hedging creates structural support/resistance. SPY GEX interacts with VIX positioning, creating vanna flows.
Practical checklist:
- Gamma flip vs price: 2%+ above = strongly pinned. Near or below = prepare for volatility
- Call wall distance: within 0.5% = strong resistance
- Put wall distance: approaching = watch for trapdoor break
- Always separate 0DTE GEX from full-chain GEX
from flashalpha import FlashAlphaClient
client = FlashAlphaClient(api_key="YOUR_KEY")
# Full chain GEX
spy_gex = client.exposure.gex("SPY")
print(f"Net GEX: ${spy_gex.net_gex:,.0f}")
print(f"Gamma Flip: ${spy_gex.gamma_flip}")
print(f"Call Wall: ${spy_gex.call_wall}")
print(f"Put Wall: ${spy_gex.put_wall}")
print(f"Regime: {spy_gex.regime}")
# 0DTE only - critical on expiry days
spy_0dte = client.exposure.gex("SPY", expiration="2026-03-24")
print(f"0DTE Net GEX: ${spy_0dte.net_gex:,.0f}")
GEX for TSLA
TSLA is the poster child for negative gamma environments. Options chain is enormous relative to float, retail flow heavily skews positioning.
TSLA is frequently in negative GEX. When it breaks above the call wall in negative gamma, dealers must buy shares to stay hedged. This is the gamma squeeze feedback loop. The move can be 5-10% in a single session.
Below the gamma flip in negative GEX, downside moves accelerate. Earnings massively restructure the chain. GEX can flip regimes overnight.
tsla_gex = client.exposure.gex("TSLA")
print(f"TSLA Net GEX: ${tsla_gex.net_gex:,.0f}")
print(f"Regime: {tsla_gex.regime}")
print(f"Gamma Flip: ${tsla_gex.gamma_flip}")
print(f"Call Wall: ${tsla_gex.call_wall}")
# Top 5 strikes by absolute GEX
for s in sorted(tsla_gex.strikes, key=lambda x: abs(x.net_gex), reverse=True)[:5]:
print(f" ${s.strike}: ${s.net_gex:,.0f}")
Beyond GEX: The Full Exposure Stack
GEX is the starting point, not the finish line. Three other metrics complete the picture.
DEX (Delta Exposure)
The directional signal. GEX tells you about volatility regime. DEX tells you direction. The peak positive DEX strike is the directional anchor. Price gravitates toward it. When price is far from peak DEX, mean reversion is likely.
VEX (Vanna Exposure)
The vol sensitivity signal. How does dealer delta change when IV moves? If VIX drops 2 points, how many shares must dealers trade? The post-FOMC rally is often a VEX-driven mechanical bid: VIX drops, vanna forces dealers to buy, price rises. Not sentiment. Mechanics.
CHEX (Charm Exposure)
The time decay signal. How does dealer delta change purely from time passing? Dominant on 0DTE days. At 2 PM, CHEX tells you which direction the market will mechanically drift into the close.
| Step | Metric | Question It Answers |
|---|---|---|
| 1 | GEX | Will the next move be dampened or amplified? |
| 2 | DEX | Where is the directional anchor? |
| 3 | VEX | What happens if IV drops or spikes? |
| 4 | CHEX | Which direction will time alone push? |
# Full exposure stack in 4 calls
gex = client.exposure.gex("SPY")
dex = client.exposure.dex("SPY")
vex = client.exposure.vex("SPY")
chex = client.exposure.chex("SPY")
print(f"GEX regime: {gex.regime}")
print(f"DEX net: ${dex.net_dex:,.0f}")
print(f"VEX net: ${vex.net_vex:,.0f}")
print(f"CHEX net: ${chex.net_chex:,.0f}")
When all four align, you have the highest-conviction setups.
Seven Trade Setups Using GEX Data
1. The Gamma Pin
When: SPY in positive GEX, price within 0.5% of call wall, low VIX.
Why: Dealers are long gamma and mechanically suppress moves. Price is pinned.
Trade: Sell iron condors centered on the call wall.
2. The Gamma Flip Breakout
When: Price approaching the gamma flip from above, negative GEX building below.
Why: Below the flip, dealer hedging amplifies instead of dampening.
Trade: Buy put spreads below the flip. The flip is your line in the sand.
3. The TSLA Gamma Squeeze
When: TSLA in negative GEX, price approaching call wall from below with momentum.
Why: Breaking the call wall forces dealers to buy shares, pushing price higher, forcing more buying.
Trade: Buy OTM calls on the break. 5-10% moves are possible.
4. The Post-FOMC Vanna Rally
When: FOMC day, large positive VEX on SPY, VIX expected to drop.
Why: Falling IV triggers vanna-driven dealer buying. Mechanical bid for 1-3 days.
Trade: Go long 30-60 min after the FOMC statement settles.
5. The 0DTE Charm Drift
When: Expiry day, heavy OI at a few strikes, CHEX strongly directional.
Why: Charm-driven delta decay forces dealers into a directional drift through the afternoon.
Trade: At 1 PM ET: negative total CHEX = bullish drift (buy calls). Positive = bearish (buy puts).
6. The Expiry Friday Pin
When: Friday expiry, positive GEX, price near max pain.
Why: Gamma-driven hedging pulls price to max pain in the final hours.
Trade: Sell iron butterflies centered on max pain at the open. Close by 3 PM.
7. The Four-Greek Confluence
When: All four metrics align. Positive GEX, DEX anchor at price, positive VEX with falling IV, bullish CHEX.
Why: Every dimension of dealer flow supports the same direction.
Trade: Go long with conviction. Put wall is your stop, call wall is your target.
Mistakes to Avoid
Using all-expiration GEX on expiry days. SPY can have positive GEX overall but massive negative 0DTE GEX. Always filter by today's expiration.
Treating levels as exact lines. They shift throughout the day as new options are traded. Treat them as zones (plus or minus 0.5%).
Using GEX alone. It tells you volatility regime but nothing about direction, vol sensitivity, or time decay. Use the full stack.
Stale data. A 9:30 AM reading can be meaningless by noon. Large orders restructure the chain throughout the day.
Accessing the Data
Python SDK
from flashalpha import FlashAlphaClient
client = FlashAlphaClient(api_key="YOUR_KEY")
# GEX with key levels
gex = client.exposure.gex("SPY")
# Filter to specific expiry
gex_0dte = client.exposure.gex("SPY", expiration="2026-03-24")
# Full stack
dex = client.exposure.dex("SPY")
vex = client.exposure.vex("SPY")
chex = client.exposure.chex("SPY")
# Key levels (gamma flip, walls, max pain)
levels = client.exposure.levels("SPY")
REST API
# GEX by strike
curl -H "X-Api-Key: YOUR_KEY" \
"https://lab.flashalpha.com/v1/exposure/gex/SPY"
# DEX, VEX, CHEX - same pattern
curl -H "X-Api-Key: YOUR_KEY" \
"https://lab.flashalpha.com/v1/exposure/dex/SPY"
# Key levels
curl -H "X-Api-Key: YOUR_KEY" \
"https://lab.flashalpha.com/v1/exposure/levels/SPY"
No-Code Tools
- GEX Tool: gamma exposure by strike, any ticker
- DEX Tool: delta exposure by strike
- VEX Tool: vanna exposure by strike
- CHEX Tool: charm exposure by strike
- GEX Dashboard: daily screener for top tickers
Pricing
Free tier: 10 requests/day, no credit card. Covers GEX, DEX, and levels. Basic ($49/mo): 250 req/day, all exposure endpoints. Growth ($299/mo): 2,500 req/day, all endpoints + 0DTE + historical.
- Get API access
-
Python SDK:
pip install flashalpha - GitHub examples
- Full API docs
Top comments (0)