US Markets
SPY746.74+0.78%VIX15.81-2.11%S&P 5007,483+0.01%Nasdaq25,833-0.80%Russell2,996-0.55%Gold4,187+1.49%BTC62,172+0.77%Crude68.78+0.13%SPY746.74+0.78%VIX15.81-2.11%S&P 5007,483+0.01%Nasdaq25,833-0.80%Russell2,996-0.55%Gold4,187+1.49%BTC62,172+0.77%Crude68.78+0.13%
Free · for your own chart

NoVo Dealer Levels for TradingView

Traders keep asking for the same thing: the gamma flip and the walls drawn on the chart they already use, instead of a second dashboard to tab across to. This is that, free.

How it works

Four numbers, typed once. About fifteen seconds.

  1. Open SPY, QQQ or IWM and note the gamma flip, call wall, put wall and expected move.
  2. In TradingView open Pine Editor, paste the script below, and click Add to chart.
  3. Open the indicator's settings and type in those four numbers.

The levels on those pages are delayed. The live map, recomputed every 60 seconds with net GEX, gravity and the written read, is Analyst.

The script

//@version=5
// NoVo Dealer Levels — free, from NoVo Options Trading (novo-options.trade)
//
// TradingView indicators cannot call the internet, so the levels are inputs.
// Grab today's on novo-options.trade/market-data/spy (or /qqq, /iwm), hit
// and type them into the settings below.
// The levels there are delayed; the live 60-second map is Analyst.
indicator("NoVo Dealer Levels", overlay = true, max_labels_count = 100)

grp1 = "Dealer levels"
flip     = input.float(0.0, "Gamma flip",  group = grp1, tooltip = "Above it dealers damp moves, below it they amplify.")
callWall = input.float(0.0, "Call wall",   group = grp1, tooltip = "The largest call gamma strike — tends to cap.")
putWall  = input.float(0.0, "Put wall",    group = grp1, tooltip = "The largest put gamma strike — tends to support.")
spotRef  = input.float(0.0, "Spot at read", group = grp1, tooltip = "Optional. What price was when the levels were published.")

grp2 = "Expected move"
em       = input.float(0.0, "Expected move (+/- $)", group = grp2)
showEM   = input.bool(true, "Shade the expected-move band", group = grp2)

grp3 = "Display"
showLbl  = input.bool(true,  "Labels", group = grp3)
extendR  = input.bool(true,  "Extend right", group = grp3)

cFlip = #22d3ee
cCall = #34d399
cPut  = #f87171
cSpot = #8aacc8

f_on(v) => v > 0 ? v : na

pFlip = plot(f_on(flip),     "Gamma flip", color = cFlip, linewidth = 2)
pCall = plot(f_on(callWall), "Call wall",  color = cCall, linewidth = 2)
pPut  = plot(f_on(putWall),  "Put wall",   color = cPut,  linewidth = 2)
plot(f_on(spotRef), "Spot at read", color = cSpot, linewidth = 1, style = plot.style_cross)

emHi = (em > 0 and spotRef > 0) ? spotRef + em : na
emLo = (em > 0 and spotRef > 0) ? spotRef - em : na
pHi = plot(showEM ? emHi : na, "Expected move high", color = color.new(cSpot, 55), linewidth = 1)
pLo = plot(showEM ? emLo : na, "Expected move low",  color = color.new(cSpot, 55), linewidth = 1)
fill(pHi, pLo, color = color.new(cSpot, 92), title = "Expected move band")

f_lbl(price, txt, col) =>
    if showLbl and barstate.islast and price > 0
        label.new(bar_index + (extendR ? 6 : 0), price, txt + "  " + str.tostring(price, format.mintick),
             xloc = xloc.bar_index, yloc = yloc.price, style = label.style_label_left,
             color = color.new(col, 88), textcolor = col, size = size.small)

f_lbl(flip,     "Gamma flip", cFlip)
f_lbl(callWall, "Call wall",  cCall)
f_lbl(putWall,  "Put wall",   cPut)

// Regime tint: above the flip dealer hedging leans against the move, below it runs with it.
bgcolor(flip > 0 ? (close > flip ? color.new(cCall, 96) : color.new(cPut, 96)) : na, title = "Regime tint")

What it draws

The gamma flip, call wall and put wall as labelled lines; the expected-move band shaded around the spot price at the time of the read; and a faint background tint for which side of the flip price is on — above it dealer hedging leans against the move, below it runs with it.

Free · Portal, Notes + Community
Create your free NoVo account

The member portal — delayed dealer levels with the gamma flip and the expected-move band on SPY, QQQ and IWM, plus sectors, movers and the week’s catalysts. NoVo’s Mid-Day Tape Review every trading day and the Week Ahead on Sundays. And the NoVo Discord: live discussion and NoVo’s daily dealer-map read.

Create your free account Join the new NoVo Discord →
Also on Reddit & StockTwits · X — daily dealer-positioning reads.
Home · Analyst · Trader · Plans · Market Data · SPY gamma · QQQ gamma · IWM gammaFutures positioningVolatility record
Options 101 · 0DTE Guide · Basics & the Greeks · 0DTE options · Gamma & dealer positioning · Volatility & structure · Risk management · The Journal · Glossary · TradingView script
Expected Move · Max Pain · Position Size · Options P&L · Greeks · Economic Calendar · Market Holidays
Best 0DTE Tools · Best GEX Tools · vs SpotGamma · vs MenthorQ · vs Unusual Whales · vs Option Alpha
About · FAQ · Help · Getting Started · Security · Read Archive · Methodology
Terms · Risk · Refunds · Privacy
Discord · Reddit · StockTwits · X · Contact

Market data on this page is delayed and provided for general information only — it is not financial advice or a recommendation to trade. VIX/VXN/RVX are ~15-minute delayed (CBOE); index values use E-mini futures. Options trading involves significant risk of loss. © 2026 NoVo Options Trading.