Option Wall Analysis — Reading the Order Book
Goal
Use option chain data to predict short-term price magnets (next 1-4 weeks) by finding:
- Max pain — strike where option holders lose most (= dealers profit most)
- Call walls — high call OI = upside resistance (writers will defend)
- Put walls — high put OI = downside support (writers will defend)
- Put/call ratio — sentiment indicator
- Dealer gamma positioning — how dealer hedging affects price
Core Concepts (1-min crash course)
What is "max pain"?
The strike price where the most options expire worthless = where option writers (dealers) profit the most.
Theory: As expiry approaches, dealers hedge their books, and the gravitational pull is toward max pain. Most reliable on monthly OPEX (3rd Friday) and quarterly OPEX.
What's a "gamma wall"?
A strike with massive OI (e.g., 50,000+ contracts). At this strike:
- Dealers are short calls → they BUY stock as price rises (buying acts as resistance breaks higher)
- OR dealers are long calls → they SELL stock as price rises (acts as resistance)
Practical reading:
- Highest call OI strike = often resistance (writers defend)
- Highest put OI strike = often support (writers defend)
What's "put/call ratio"?
- Total Put OI / Total Call OI
1.0 = more puts than calls = bearish sentiment
- < 1.0 = more calls than puts = bullish sentiment
- Contrarian indicator: extreme >1.3 = capitulation low, <0.5 = euphoria top
The 4-Step Workflow
Step 1 — Run max_pain.py
uv run --with yfinance python $(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/max_pain.py 2>/dev/null | head -1) TICKER 4
This gives you, for the next 4 expiries:
- Max pain strike
- Spot vs max pain %
- Top 5 call walls (resistance)
- Top 5 put walls (support)
- Put/call ratio
Step 2 — Run option_walls.py for gamma map
uv run --with yfinance python $(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/option_walls.py 2>/dev/null | head -1) TICKER 4
Gives top 10 OI strikes for both calls and puts per expiry. Wider view than max_pain.
Step 3 — Identify the trade levels
Read the data:
| Output |
What it means |
Trade implication |
| Max pain $X (vs spot $Y where Y > X) |
Bearish gravity, dealers want price down |
Lean short into OPEX |
| Max pain $X (vs spot $Y where Y < X) |
Bullish gravity, dealers want price up |
Lean long into OPEX |
| Top call wall at $Z |
Resistance |
Don't expect to break through easily |
| Top put wall at $W |
Support |
Buyers likely to defend |
| Put/Call > 1.2 |
Bearish sentiment |
Contrarian buy signal |
| Put/Call < 0.5 |
Bullish sentiment |
Contrarian sell signal |
| Gamma wall = bigger than next 3 strikes combined |
Magnet |
Price likely sticks here |
Step 4 — Build the trade plan
Short-term play (1-2 weeks):
- Spot $200, Max pain $195 (next OPEX)
- Top call wall $210 (15K OI), Top put wall $190 (12K OI)
- Put/Call: 0.85 (slightly bullish)
- Plan: Range $190-210, expect drift to $195 by OPEX
- Strategy: Short $210 call OR long $200/$210 call spread (sell upper)
Around earnings:
- Higher OI tends to span IV crush
- Walls become VERY relevant immediately post-earnings (price magnetizes to nearest wall after IV deflates)
Interpretation guide (real examples)
Example 1: NVDA pinned to $195 (high OI, neutral)
- Spot $198
- Max pain $195
- Top call wall $200 (28K OI)
- Top put wall $190 (24K OI)
- Put/call 0.86
Read: Range $190-200, drift toward $195 into next OPEX (15 days).
Trade: $200/$210 call spread (cap upside, collect premium) OR sell $190 put for income.
Example 2: NOK $13, broken upward
- Spot $13.14
- Max pain $11.50 (lagging, just had major earnings rally)
- Top call wall $14 (8K OI), $15 (12K OI)
- Top put wall $12 (5K OI)
- Put/call 0.6 (bullish)
Read: Bullish skew, support at $12, resistance $14-15.
Trade: $14 calls if break out, $12 covered puts if pullback.
Example 3: TSLA $250, bearish gravity
- Spot $250
- Max pain $230 (-8% below)
- Top call wall $260 (40K OI) — strong resistance
- Top put wall $245 (15K OI)
- Put/call 1.4 (bearish, capitulation possible)
Read: Dealers want $230, strong $260 ceiling, but extreme PCR = bounce possible.
Trade: $245 puts to play the gravity, $245/$235 spread for cheaper.
Output format
# [TICKER] Option Wall Analysis — [Date]
**Spot**: $XXX | **Next OPEX**: [date] | **Days to expiry**: N
## Verdict
[One paragraph: Bias (bullish/bearish/pinned) + recommended levels + suggested trade]
## Max Pain by Expiry
| Expiry | Max Pain | Spot vs MP % | Interpretation |
| 2026-05-15 | $X | +X.X% | Bullish gravity / Bearish gravity / Pinned |
| 2026-05-22 | $X | ... | ... |
## Top Call Walls (Resistance)
| Strike | OI | Notes |
| $X | XX,XXX | Major resistance — needs catalyst to break |
| $X | XX,XXX | Secondary |
## Top Put Walls (Support)
| Strike | OI | Notes |
| $X | XX,XXX | Major support — buyers likely defend |
| $X | XX,XXX | Secondary |
## Put/Call Ratio
- This expiry: 0.XX
- Sentiment: [bullish/neutral/bearish]
- Contrarian signal: [yes/no, what it implies]
## Trade Levels (next [N] days)
- **Range**: $X (support) to $Y (resistance)
- **Magnet**: $Z (max pain)
- **Above $Y**: Breakout, target $YY
- **Below $X**: Breakdown, target $XX
## Strategy Recommendations
- **Bullish bias**: [specific trade]
- **Neutral / range-bound**: [specific trade]
- **Bearish bias**: [specific trade]
- **High conviction**: [single best trade]
Hard rules
- Max pain is most reliable on monthly OPEX (3rd Friday), less so on weeklies.
- OI > 20,000 = real wall. OI < 5,000 = noise.
- Don't trade against multiple confirming signals (e.g., max pain + biggest OI both at $200 = $200 is the level).
- Earnings invalidate walls. Pre-earnings, walls are theoretical; IV crush + price gap > wall.
- Cite actual numbers. "Strong support at $190" without OI = useless.
- Time horizon = expiry. Walls fade as new OI builds for next expiry.
- Combine with chart. If $200 is wall AND 50DMA AND prior breakout, that's the level.
Common pitfalls
| Pitfall |
Example |
Lesson |
| Trading max pain in week 1 of expiry |
"Max pain is $195, sell calls" |
Walls only matter last 5-7 days |
| Ignoring earnings risk |
Selling $200 calls into NVDA earnings |
Implied move >> wall |
| Using thin OI as walls |
"Wall at $X" with 500 OI |
< 5K OI is meaningless |
| Confusing call wall = resistance vs support |
Spot above call wall in uptrend |
Then it's support, not resistance (flip) |
| Anchor to one expiry |
Just looking at 5/15 |
Look at 5/15 + 5/22 + 5/29 = composite picture |
When to invoke
- User asks: "Where's max pain on X?"
- User asks: "What are the option walls?"
- User asks: "Where will X go this week?"
- User asks: "Is there strong support/resistance on X?"
- Pre-OPEX: 7 days before any monthly/quarterly OPEX
- Post-earnings: Day after earnings to see new walls form
- Companion to
earnings-prep: Add this analysis after earnings-prep
Tool cheat-sheet
| Need |
Tool |
| Max pain calc |
`$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/max_pain.py 2>/dev/null |
| Top OI walls |
`$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/option_walls.py 2>/dev/null |
| Live spot |
mcp__yfmcp__yfinance_get_ticker_info |
| Option chain raw |
mcp__yfmcp__yfinance_get_option_chain |
Pro tips
- Friday afternoon before OPEX = max pain becomes very strong magnet (expect price gravitation).
- Friday after OPEX = new walls form for next month, watch which strikes accumulate first.
- Combine with VIX: low VIX + clear walls = ranges hold; high VIX + walls = walls break.
- Stock-specific patterns:
- NVDA: Walls usually break (high momentum)
- AAPL: Walls hold (low vol, mean-reverting)
- TSLA: Walls break violently (high gamma squeeze potential)
- NOK: Walls hold (low vol)
Output combined with analyze-stock skill
If user runs analyze-stock first, then this skill, the option-wall analysis becomes Step 9.5 (between LEAPS and final entry plan):
- Use walls to refine 3-tier entry: instead of "50DMA", use "put wall at $X" if it's higher and stronger
- Use walls to set stop loss: "below put wall at $X = downside extension"
1---2name: option-wall-analysis3description: Computes max pain (where options expire worthless = dealer profit point), top open interest clusters as gamma walls (resistance/support), put/call ratio sentiment, dealer positioning. Identifies short-term magnetic price levels into next monthly OPEX. Triggers in English ("max pain on X", "option walls for X", "where will X go this week", "support and resistance options X", "OPEX target X") or Chinese ("X 的 max pain", "X 期权墙", "X 这周走哪里", "X 期权磁吸位", "X OPEX 目标").4---56# Option Wall Analysis — Reading the Order Book78## Goal910Use option chain data to predict **short-term price magnets** (next 1-4 weeks) by finding:111. **Max pain** — strike where option holders lose most (= dealers profit most)122. **Call walls** — high call OI = upside resistance (writers will defend)133. **Put walls** — high put OI = downside support (writers will defend)144. **Put/call ratio** — sentiment indicator155. **Dealer gamma positioning** — how dealer hedging affects price1617## Core Concepts (1-min crash course)1819### What is "max pain"?20The strike price where **the most options expire worthless** = where option writers (dealers) profit the most.2122**Theory**: As expiry approaches, dealers hedge their books, and the gravitational pull is toward max pain. Most reliable on **monthly OPEX (3rd Friday)** and **quarterly OPEX**.2324### What's a "gamma wall"?25A strike with **massive OI** (e.g., 50,000+ contracts). At this strike:26- Dealers are short calls → they BUY stock as price rises (buying acts as resistance breaks higher)27- OR dealers are long calls → they SELL stock as price rises (acts as resistance)2829**Practical reading**:30- **Highest call OI strike** = often **resistance** (writers defend)31- **Highest put OI strike** = often **support** (writers defend)3233### What's "put/call ratio"?34- **Total Put OI / Total Call OI**35- > 1.0 = more puts than calls = bearish sentiment36- < 1.0 = more calls than puts = bullish sentiment37- **Contrarian indicator**: extreme >1.3 = capitulation low, <0.5 = euphoria top3839## The 4-Step Workflow4041### Step 1 — Run max_pain.py42```bash43uv run --with yfinance python $(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/max_pain.py 2>/dev/null | head -1) TICKER 444```4546This gives you, for the next 4 expiries:47- Max pain strike48- Spot vs max pain %49- Top 5 call walls (resistance)50- Top 5 put walls (support)51- Put/call ratio5253### Step 2 — Run option_walls.py for gamma map54```bash55uv run --with yfinance python $(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/option_walls.py 2>/dev/null | head -1) TICKER 456```5758Gives top 10 OI strikes for both calls and puts per expiry. **Wider view** than max_pain.5960### Step 3 — Identify the trade levels6162**Read the data:**6364| Output | What it means | Trade implication |65|---|---|---|66| Max pain $X (vs spot $Y where Y > X) | Bearish gravity, dealers want price down | Lean short into OPEX |67| Max pain $X (vs spot $Y where Y < X) | Bullish gravity, dealers want price up | Lean long into OPEX |68| Top call wall at $Z | Resistance | Don't expect to break through easily |69| Top put wall at $W | Support | Buyers likely to defend |70| Put/Call > 1.2 | Bearish sentiment | Contrarian buy signal |71| Put/Call < 0.5 | Bullish sentiment | Contrarian sell signal |72| Gamma wall = bigger than next 3 strikes combined | Magnet | Price likely sticks here |7374### Step 4 — Build the trade plan7576**Short-term play (1-2 weeks):**77- Spot $200, Max pain $195 (next OPEX)78- Top call wall $210 (15K OI), Top put wall $190 (12K OI)79- Put/Call: 0.85 (slightly bullish)80- **Plan**: Range $190-210, expect drift to $195 by OPEX81- **Strategy**: Short $210 call OR long $200/$210 call spread (sell upper)8283**Around earnings:**84- Higher OI tends to span IV crush85- Walls become VERY relevant immediately post-earnings (price magnetizes to nearest wall after IV deflates)8687## Interpretation guide (real examples)8889### Example 1: NVDA pinned to $195 (high OI, neutral)90- Spot $19891- Max pain $19592- Top call wall $200 (28K OI)93- Top put wall $190 (24K OI)94- Put/call 0.8695**Read**: Range $190-200, drift toward $195 into next OPEX (15 days).96**Trade**: $200/$210 call spread (cap upside, collect premium) OR sell $190 put for income.9798### Example 2: NOK $13, broken upward99- Spot $13.14100- Max pain $11.50 (lagging, just had major earnings rally)101- Top call wall $14 (8K OI), $15 (12K OI)102- Top put wall $12 (5K OI)103- Put/call 0.6 (bullish)104**Read**: Bullish skew, support at $12, resistance $14-15.105**Trade**: $14 calls if break out, $12 covered puts if pullback.106107### Example 3: TSLA $250, bearish gravity108- Spot $250109- Max pain $230 (-8% below)110- Top call wall $260 (40K OI) — strong resistance111- Top put wall $245 (15K OI)112- Put/call 1.4 (bearish, capitulation possible)113**Read**: Dealers want $230, strong $260 ceiling, but extreme PCR = bounce possible.114**Trade**: $245 puts to play the gravity, $245/$235 spread for cheaper.115116## Output format117118```markdown119# [TICKER] Option Wall Analysis — [Date]120**Spot**: $XXX | **Next OPEX**: [date] | **Days to expiry**: N121122## Verdict123[One paragraph: Bias (bullish/bearish/pinned) + recommended levels + suggested trade]124125## Max Pain by Expiry126| Expiry | Max Pain | Spot vs MP % | Interpretation |127| 2026-05-15 | $X | +X.X% | Bullish gravity / Bearish gravity / Pinned |128| 2026-05-22 | $X | ... | ... |129130## Top Call Walls (Resistance)131| Strike | OI | Notes |132| $X | XX,XXX | Major resistance — needs catalyst to break |133| $X | XX,XXX | Secondary |134135## Top Put Walls (Support)136| Strike | OI | Notes |137| $X | XX,XXX | Major support — buyers likely defend |138| $X | XX,XXX | Secondary |139140## Put/Call Ratio141- This expiry: 0.XX142- Sentiment: [bullish/neutral/bearish]143- Contrarian signal: [yes/no, what it implies]144145## Trade Levels (next [N] days)146- **Range**: $X (support) to $Y (resistance)147- **Magnet**: $Z (max pain)148- **Above $Y**: Breakout, target $YY149- **Below $X**: Breakdown, target $XX150151## Strategy Recommendations152- **Bullish bias**: [specific trade]153- **Neutral / range-bound**: [specific trade]154- **Bearish bias**: [specific trade]155- **High conviction**: [single best trade]156```157158## Hard rules1591601. **Max pain is most reliable on monthly OPEX (3rd Friday)**, less so on weeklies.1612. **OI > 20,000 = real wall.** OI < 5,000 = noise.1623. **Don't trade against multiple confirming signals** (e.g., max pain + biggest OI both at $200 = $200 is the level).1634. **Earnings invalidate walls.** Pre-earnings, walls are theoretical; IV crush + price gap > wall.1645. **Cite actual numbers.** "Strong support at $190" without OI = useless.1656. **Time horizon = expiry.** Walls fade as new OI builds for next expiry.1667. **Combine with chart.** If $200 is wall AND 50DMA AND prior breakout, **that's the level**.167168## Common pitfalls169170| Pitfall | Example | Lesson |171|---|---|---|172| Trading max pain in week 1 of expiry | "Max pain is $195, sell calls" | Walls only matter last 5-7 days |173| Ignoring earnings risk | Selling $200 calls into NVDA earnings | Implied move >> wall |174| Using thin OI as walls | "Wall at $X" with 500 OI | < 5K OI is meaningless |175| Confusing call wall = resistance vs support | Spot above call wall in uptrend | Then it's support, not resistance (flip) |176| Anchor to one expiry | Just looking at 5/15 | Look at 5/15 + 5/22 + 5/29 = composite picture |177178## When to invoke179180- **User asks**: "Where's max pain on X?"181- **User asks**: "What are the option walls?"182- **User asks**: "Where will X go this week?"183- **User asks**: "Is there strong support/resistance on X?"184- **Pre-OPEX**: 7 days before any monthly/quarterly OPEX185- **Post-earnings**: Day after earnings to see new walls form186- **Companion to `earnings-prep`**: Add this analysis after earnings-prep187188## Tool cheat-sheet189190| Need | Tool |191|---|---|192| Max pain calc | `$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/max_pain.py 2>/dev/null | head -1) TICKER 4` |193| Top OI walls | `$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/option_walls.py 2>/dev/null | head -1) TICKER 4` |194| Live spot | `mcp__yfmcp__yfinance_get_ticker_info` |195| Option chain raw | `mcp__yfmcp__yfinance_get_option_chain` |196197## Pro tips1981991. **Friday afternoon before OPEX** = max pain becomes very strong magnet (expect price gravitation).2002. **Friday after OPEX** = new walls form for next month, watch which strikes accumulate first.2013. **Combine with VIX**: low VIX + clear walls = ranges hold; high VIX + walls = walls break.2024. **Stock-specific patterns**:203 - **NVDA**: Walls usually break (high momentum)204 - **AAPL**: Walls hold (low vol, mean-reverting)205 - **TSLA**: Walls break violently (high gamma squeeze potential)206 - **NOK**: Walls hold (low vol)207208## Output combined with `analyze-stock` skill209210If user runs `analyze-stock` first, then this skill, the option-wall analysis becomes **Step 9.5** (between LEAPS and final entry plan):211- Use walls to refine **3-tier entry**: instead of "50DMA", use "put wall at $X" if it's higher and stronger212- Use walls to set **stop loss**: "below put wall at $X = downside extension"