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.
Four numbers, typed once. About fifteen seconds.
The levels on those pages are delayed. The live map, recomputed every 60 seconds with net GEX, gravity and the written read, is Analyst.
//@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")
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.
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 →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.