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 5 minutes with net GEX, gravity and the written read, is Trader.
//@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 map is Trader.
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 = #147bdf
cCall = #34d399
cPut = #f87171
cSpot = #a8a8a8
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 carries delayed dealer levels on SPY, QQQ and IWM: the gamma flip, the expected-move band, sectors, movers and the week’s catalysts. Dr. NoVo posts a Mid-Day Tape Review every trading day and the Week Ahead on Sundays, and his Market Insight sits at the top of the page: a few lines on whatever stands out across every market right now, read fresh as the tape moves. You also get the NoVo Discord: live discussion and Dr. 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 LLC, d.b.a. NoVo Crypto Trading.