Volume · 200-800/mo

VWAP Trading Signals — Complete TradingView Guide

VWAP trading signals for TradingView. VWAP touch bounces, cross signals, and standard deviation bands with Pine Script code and intraday ES futures examples.

VWAP Signal Interpretation

Quick-reference guide to 7 signal types you will see on the chart.

Signal TypeIndicator ConditionMarket MeaningReliability
VWAP Touch Bounce → BuyPrice pulls back to VWAP line from above, forms a rejection candle (hammer or bullish engulfing)Intraday trend is intact. Buyers step in at the average price level. Strong signal in uptrending sessions.4/5
VWAP Touch Bounce → SellPrice rallies to VWAP line from below, forms a rejection candle (shooting star or bearish engulfing)Sellers defend the average price in a downtrend. Short entries at VWAP work well when the day bias is bearish.4/5
VWAP Break and Hold (Below) → SellPrice crosses below VWAP and stays below for 2+ consecutive candlesIntraday sentiment has flipped bearish. Momentum traders pile on the short side. VWAP becomes resistance.3/5
VWAP Break and Hold (Above) → BuyPrice crosses above VWAP and stays above for 2+ consecutive candlesBuyers are in control for the session. Institutions accumulate above the average price. VWAP becomes support.3/5
Upper Band Touch → Sell / ShortPrice touches or exceeds the +1 or +2 standard deviation band from VWAPExtended move from the mean. Mean reversion traders expect a pullback. Strong signal when combined with bearish divergence on RSI.3/5
Lower Band Touch → BuyPrice touches or exceeds the -1 or -2 standard deviation band from VWAPPrice is statistically stretched from the average. Reversion toward VWAP is probable. Most reliable when volume is declining.3/5
VWAP + Volume SpikeA VWAP break occurs on volume that exceeds the average by 2x or moreHigh conviction move. The VWAP break is supported by institutional volume. More likely to sustain than a low-volume break.5/5

VWAP Pine Script Signal Code

Ready-to-use Pine Script code for generating buy/sell signals. Copy and paste into your TradingView Pine Editor.

Pine Script v5
//@version=5
indicator("VWAP Buy Sell Signals", overlay=true)

// Inputs
vwapSource = input.source(hlc3, "VWAP Source")
useStandardBands = input.bool(true, "Show Standard Deviation Bands")
bandMultiplier = input.float(2.0, "Band Multiplier", step=0.1)
bandMultiplier2 = input.float(1.0, "Inner Band Multiplier", step=0.1)
showSignals = input.bool(true, "Show Signal Labels")
signalLookback = input.int(2, "Confirmation Candles", minval=1, maxval=5)

// VWAP calculation
vwapValue = ta.vwap(vwapSource)

// Standard deviation for bands
variance = ta.sma(math.pow(vwapSource - vwapValue, 2), 20)
stdev = math.sqrt(variance)
upperBand1 = vwapValue + (stdev * bandMultiplier2)
lowerBand1 = vwapValue - (stdev * bandMultiplier2)
upperBand2 = vwapValue + (stdev * bandMultiplier)
lowerBand2 = vwapValue - (stdev * bandMultiplier)

// Signal detection
aboveVwap = close > vwapValue
belowVwap = close < vwapValue

// VWAP break and hold
vwapCrossAbove = ta.crossover(close, vwapValue)
vwapCrossBelow = ta.crossunder(close, vwapValue)

// Confirmed hold: stays on the side for N bars
aboveHold = ta.barssince(ta.crossunder(close, vwapValue)) >= signalLookback
belowHold = ta.barssince(ta.crossover(close, vwapValue)) >= signalLookback

// Touch bounce: close near VWAP with rejection wick
touchBounceBuy = ta.crossunder(close, vwapValue) and high - max(open, close) > (high - low) * 0.6
touchBounceSell = ta.crossover(close, vwapValue) and max(open, close) - low > (high - low) * 0.6

// Band touch signals
upperBandTouch = ta.crossunder(high, upperBand2) or high >= upperBand2
lowerBandTouch = ta.crossover(low, lowerBand2) or low <= lowerBand2

// Buy / sell conditions
buySignal = (touchBounceBuy and belowHold) or (vwapCrossAbove and aboveHold)
sellSignal = (touchBounceSell and aboveHold) or (vwapCrossBelow and belowHold)

// Plots
plot(vwapValue, "VWAP", color=#2962FF, linewidth=2)

// Bands
plot(useStandardBands ? upperBand1 : na, "Upper Band 1", color=#2962FF, linewidth=1, transp=70)
plot(useStandardBands ? lowerBand1 : na, "Lower Band 1", color=#2962FF, linewidth=1, transp=70)
plot(useStandardBands ? upperBand2 : na, "Upper Band 2", color=#FF5252, linewidth=1, transp=80)
plot(useStandardBands ? lowerBand2 : na, "Lower Band 2", color=#4CAF50, linewidth=1, transp=80)

// Fill between VWAP and close for visual clarity
fill(plot(close, "Close", display=display.none), plot(vwapValue, "VWAP Fill", display=display.none),
  color=close > vwapValue ? color.new(#4CAF50, 85) : color.new(#FF5252, 85), editable=false)

// Signal labels
plotshape(showSignals and buySignal, "Buy", shape.triangleup, location.belowbar, color=#4CAF50, size=size.small)
plotshape(showSignals and sellSignal, "Sell", shape.triangledown, location.abovebar, color=#FF5252, size=size.small)

plotshape(showSignals and touchBounceBuy, "Bounce Buy", shape.labelup, location.belowbar, color=#00BCD4, size=size.tiny)
plotshape(showSignals and touchBounceSell, "Bounce Sell", shape.labeldown, location.abovebar, color=#FF9800, size=size.tiny)

// Alert conditions
alertcondition(buySignal, "VWAP Buy Signal", "VWAP buy signal triggered: price holding above VWAP with confirmation")
alertcondition(sellSignal, "VWAP Sell Signal", "VWAP sell signal triggered: price holding below VWAP with confirmation")
alertcondition(touchBounceBuy, "VWAP Touch Bounce Buy", "Price bounced off VWAP support with rejection wick")
alertcondition(touchBounceSell, "VWAP Touch Bounce Sell", "Price rejected at VWAP resistance with rejection wick")
alertcondition(buySignal or sellSignal, "VWAP Any Signal", "VWAP buy or sell signal triggered")

Recommended Parameters for VWAP

Parameter settings tested across different market conditions and timeframes.

Feature comparison table: Default vs Description
ParameterDefaultDescription
VWAP SourceHLC3Price source for the VWAP calculation. HLC3 (high+low+close/3) smoothes the line for cleaner signals. Use close only for a more reactive VWAP on 1m charts.
Band Multiplier2.0Standard deviation multiplier for the outer band. 2.0 covers about 95% of price action. Reduce to 1.5 in quiet markets for earlier reversion signals. Increase to 2.5 for volatile ES sessions.
Inner Band Multiplier1.0Standard deviation multiplier for the inner band. Acts as the first warning zone. When price crosses the inner band, mean reversion setups become active.
Confirmation Candles2Number of candles price must hold on the VWAP side before a break signal is confirmed. Higher values (3-4) reduce false whipsaws during open auction but delay entry by several bars.
Show Signal LabelsTrueToggles buy and sell signal labels on the chart. Disable if you use VWAP primarily as a trend filter alongside other indicators.

VWAP + Pineify Invite-Only: Better Together

VWAP alone gives you one signal type. Pineify invite-only indicator combines VWAP with RSI divergences, MACD confirmation, and Supertrend filters in one overlay. Fewer charts, clearer signals.

Instead of switching between 7 different signals on separate charts, you get a single multi-confirmation setup.

See the Invite-Only Indicator

FAQ

VWAP Signals FAQ

Stop juggling VWAP with 4 other charts

Pineify combines VWAP, RSI, MACD, and Supertrend into one invite-only indicator. One click setup.

Try Pineify Free