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 Type | Indicator Condition | Market Meaning | Reliability |
|---|---|---|---|
| VWAP Touch Bounce → Buy | Price 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 → Sell | Price 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) → Sell | Price crosses below VWAP and stays below for 2+ consecutive candles | Intraday sentiment has flipped bearish. Momentum traders pile on the short side. VWAP becomes resistance. | 3/5 |
| VWAP Break and Hold (Above) → Buy | Price crosses above VWAP and stays above for 2+ consecutive candles | Buyers are in control for the session. Institutions accumulate above the average price. VWAP becomes support. | 3/5 |
| Upper Band Touch → Sell / Short | Price touches or exceeds the +1 or +2 standard deviation band from VWAP | Extended move from the mean. Mean reversion traders expect a pullback. Strong signal when combined with bearish divergence on RSI. | 3/5 |
| Lower Band Touch → Buy | Price touches or exceeds the -1 or -2 standard deviation band from VWAP | Price is statistically stretched from the average. Reversion toward VWAP is probable. Most reliable when volume is declining. | 3/5 |
| VWAP + Volume Spike | A VWAP break occurs on volume that exceeds the average by 2x or more | High 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.
//@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.
| Parameter | Default | Description |
|---|---|---|
| VWAP Source | HLC3 | Price 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 Multiplier | 2.0 | Standard 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 Multiplier | 1.0 | Standard deviation multiplier for the inner band. Acts as the first warning zone. When price crosses the inner band, mean reversion setups become active. |
| Confirmation Candles | 2 | Number 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 Labels | True | Toggles 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 IndicatorRelated Resources
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