VWAP Retests and RSI Confirmation: Signals, Volume, and Risk

Video: VWAP Indicator BEST Strategies REVEALED (How To Use VWAP Indicator For Day Trading)
Creator: Data Trader
Original Video: Watch the original video
Difficulty: Intermediate

The Big Idea

VWAP gives price a volume-weighted reference. Data Trader uses that reference to discuss directional context, failed retests, and a bullish reaction accompanied by recovering RSI.

The lesson becomes useful when a touch, a reaction, and an entry are kept separate. Price above an average is an observation; a defined response at that average is additional information. Neither guarantees a profitable trade.

The source includes a losing short as well as selected favorable moves. Those examples illustrate decisions, rather than establish a win rate or a complete performance record.

What VWAP Measures

VWAP stands for volume-weighted average price. For a chosen interval, it is the sum of price multiplied by volume divided by total volume.

In an original example, 100 units trade at 100 and 300 units at 102. VWAP is (100 × 100 + 102 × 300) ÷ 400 = 101.50. The simple average of the two prices is 101.00. The larger transaction volume pulls VWAP closer to 102.

On a bar-based chart, the calculation commonly uses a representative price such as (high + low + close) ÷ 3 with bar volume. That is not necessarily an exact reconstruction of every transaction’s price. TradingView’s VWAP documentation (paid link) explains its calculation and configurable anchors.

VWAP can serve as an execution benchmark or a chart reference. An institutional execution algorithm aiming to track VWAP and a retail trader buying a VWAP bounce are different uses. Institutional adoption of the benchmark does not validate every indicator-based entry.

The Anchor and Volume Feed Matter

A regular-session VWAP resets at the selected session boundary. Including premarket trades produces a different average. A weekly anchor, event anchor, or rolling window answers a different question again.

The source says VWAP cannot be applied to forex. The more precise limitation is the data: a spot-forex feed may provide no usable volume or only tick volume reflecting quote activity, rather than consolidated traded volume across the decentralized market.

A calculation can be displayed where suitable inputs exist, but its interpretation depends on those inputs. Exchange-traded currency futures volume also describes a particular futures market, not the entire spot market. Verify the feed before treating a forex line as directly comparable with stock-session VWAP.

The “25%” and “75%” Lines Are Undefined

The transcript labels outer lines 25% and 75% without providing their formulas or exact script settings. Those are not universal VWAP components.

Common implementations offer standard-deviation bands or percentage offsets. A quartile calculation would be different. Do not assume the video’s labels indicate price percentiles, a 75% probability, or ordinary standard-deviation settings.

This guide therefore treats those outer lines as source-specific references, without claiming to reproduce them. The middle VWAP can be evaluated independently.

A Failed Retest Is More Than a Cross

In the bearish example, price moves beneath the middle line, struggles to recover above it, and then closes below a small consolidation. The source uses that later break as short confirmation.

A repeatable version needs an explicit consolidation length, tolerance around VWAP, and breakout condition. A wick beneath the line and a completed close beneath a preselected base are different events.

The source’s losing Tesla short illustrates the danger of selling because price is near an upper reference. Price can pause near an upper band and continue rising. A band touch is not itself a reversal.

Waiting for a larger bearish candle may improve some entries, but it can also delay entry and increase stop distance. The proposed correction needs a comparison across all qualifying examples, not only the losing trade that motivated it.

RSI Adds a Condition, Not Certainty

The bullish example combines a decline toward VWAP, a small consolidation, an oversold RSI reading, and a later bullish candle as RSI improves.

Oversold means the selected RSI calculation is low relative to its threshold. It does not establish that price must rise. RSI can remain oversold during a continuing decline.

ObservationWhat it contributesWhat remains uncertain
Price near VWAPA session-average referenceWhether the area will hold
Small consolidationA local range to evaluateWhich direction will resolve
Recent oversold RSIEvidence of measured downside momentumWhether that momentum has ended
RSI rises and price breaks upwardA defined improvement and triggerWhether continuation will reach the target

A longer sideways pause is not automatically stronger support. It can also precede a breakdown. RSI and price patterns are derived from related price observations, so several agreeing labels need not represent independent evidence.

Plan the Exit Before Seeing the Best Price

The source contrasts ideal highs and lows with more realistic exits on subsequent candles. That is an important distinction, but the exact candle-exit rule is not consistently specified.

For an original long example, entry at 100.40 with a stop at 99.90 carries 0.50 per share of price risk. A fixed 2R target is 101.40. A hypothetical $100 price-risk budget permits 200 shares before costs.

If the actual entry is 100.60 with the same stop, risk rises to 0.70. A fill-based 2R target becomes 102.00. The previously drawn 101.40 target now offers only about 1.14R.

Decide whether the target is a fixed multiple, a recorded resistance area, a moving band, or a candle-based exit. A dynamic band that changes after entry is not the same as a fixed price target.

Pine Script Research Strategy

Expand the complete Pine Script research strategy

//@version=6
strategy("Session VWAP reaction with recent oversold RSI - research proxy",
     overlay=true, initial_capital=25000, pyramiding=0, margin_long=100,
     commission_type=strategy.commission.percent, commission_value=0.01,
     slippage=2, calc_on_order_fills=true, calc_on_every_tick=false,
     process_orders_on_close=false)
useRSI = input.bool(true, "Require recent oversold RSI and recovery")
rsiLength = input.int(14, "RSI length", minval=1)
recentBars = input.int(10, "Recent RSI window", minval=1)
oversold = input.float(30, "Oversold threshold", minval=0, maxval=100)
baseBars = input.int(3, "Completed consolidation bars", minval=2, maxval=20)
tolerance = input.float(0.25, "Close-to-VWAP tolerance / ATR", minval=0)
useSlope = input.bool(false, "Require rising VWAP")
reward = input.float(2, "Target R from actual fill", minval=0.1)
cashRisk = input.float(100, "Estimated cash risk before costs", minval=1)
maxShares = input.int(1000, "Maximum shares", minval=1)
flattenMinute = input.int(960, "NY session close (780 = 13:00)", minval=571, maxval=1440)
if barstate.isfirst and (not chart.is_standard or not timeframe.isintraday)
    runtime.error("Use standard intraday US stock candles.")
if session.ispremarket or session.ispostmarket
    runtime.error("Disable extended hours for this regular-session test.")
newSession = timeframe.change("D")
vwap = ta.vwap(hlc3, newSession)
atr = ta.atr(14)
rsi = ta.rsi(close, rsiLength)
recentRSI = ta.lowest(rsi, recentBars)[1]
rangeHigh = ta.highest(high, baseBars)[1]
rangeLow = ta.lowest(low, baseBars + 1)
varip int barsInSession = 0
varip bool used = false
varip float stopPrice = na
varip float targetPrice = na
varip float seenPosition = 0.0
fillPass = strategy.position_size != seenPosition
seenPosition := strategy.position_size
if fillPass and strategy.position_size > 0
    distance = strategy.position_avg_price - stopPrice
    if distance > 0
        targetPrice := strategy.position_avg_price + reward * distance
    else
        targetPrice := na
        strategy.close("L", comment="Invalid gap fill", immediately=true)
if not fillPass and barstate.isconfirmed
    if newSession
        barsInSession := 0
        used := false
    barsInSession += 1
    bool nearVWAP = true
    for i = 1 to baseBars
        nearVWAP := nearVWAP and not na(vwap[i]) and math.abs(close[i] - vwap[i]) <= tolerance * atr[i]
    rsiOK = not useRSI or (recentRSI < oversold and rsi > rsi[1])
    slopeOK = not useSlope or vwap > vwap[1]
    minutesClose = hour(time_close, "America/New_York") * 60 + minute(time_close, "America/New_York")
    signal = barsInSession > math.max(baseBars, recentBars) and nearVWAP and rsiOK and slopeOK and
         close > rangeHigh and close > vwap and close > open
    if strategy.position_size == 0 and not used and signal and minutesClose < flattenMinute
        candidateStop = rangeLow - syminfo.mintick
        unitRisk = (close - candidateStop) * syminfo.pointvalue
        shares = unitRisk > 0 ? math.floor(math.min(maxShares, cashRisk / unitRisk)) : 0
        if shares >= 1
            stopPrice := candidateStop
            targetPrice := na
            used := true
            strategy.entry("L", strategy.long, qty=shares)
            strategy.exit("L-bracket", "L", stop=stopPrice)
    if minutesClose == flattenMinute
        strategy.cancel_all()
        strategy.close_all(comment="Session flatten", immediately=true)
if strategy.position_size > 0 and not na(targetPrice)
    strategy.exit("L-bracket", "L", stop=stopPrice, limit=targetPrice)
cumulativeVolume = ta.cum(nz(volume))
if barstate.islast and cumulativeVolume == 0
    runtime.error("No usable volume is provided by this feed.")
plot(vwap, "Regular-session VWAP", color=color.blue, linewidth=2)
plot(strategy.position_size > 0 ? stopPrice : na, "Stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size > 0 ? targetPrice : na, "Target", color=color.green, style=plot.style_linebr)

The following original long-only strategy tests the source’s VWAP-and-RSI reaction idea on standard intraday US stock candles. It uses regular-session VWAP based on typical price and volume, rather than inventing the unspecified outer bands.

Our definitions: the previous three closes must remain within 0.25 ATR of their contemporaneous VWAP. RSI(14) must have been below 30 within the previous ten bars and must now rise. The trigger candle must close bullish, above VWAP, and above the consolidation’s prior high.

The prior-window requirements must lie within the current session. Optional rising-VWAP confirmation can be toggled. The stop is one tick below the lowest price across the consolidation and trigger candle; the default target is 2R from actual entry. Defaults allow one submitted entry per session, estimated $100 cash risk, and a 1,000-share cap.

Execution QA

Disable extended hours so the daily reset corresponds to the regular session. Use an intraday interval aligned with the market session and sufficient RSI and ATR history. The script requires usable feed volume; it does not turn missing volume into a true traded-volume VWAP.

The consolidation uses prior completed bars, with each close compared against the VWAP then available. It does not recalculate those earlier interactions using the final session VWAP.

The trigger is confirmed at candle close. A market order normally fills at the next bar’s open, with initial protection submitted alongside entry. A fill-only recalculation sets the target from actual entry and frozen stop without selecting another setup from that fill bar’s completed high or low. A fill beyond the stop prompts an immediate simulated exit.

Quantity is estimated from the signal close, so actual cash risk can change with gaps or adverse fills. Commission defaults to 0.01% per fill and slippage to two ticks, adjustable in Strategy Properties. Spreads, partial fills, and every broker restriction are not modeled. The 100% margin assumption can prevent a qualifying order from filling.

The session flatten uses an immediate simulated closing fill, an optimistic assumption requiring cost stress. Set 780 minutes after midnight for a 13:00 early close; holidays are not detected automatically. Same-bar bracket outcomes depend on emulator assumptions and should be inspected with Bar Magnifier where available.

The code has been reviewed but has not been compiled or backtested in TradingView. It does not reproduce the source’s shorts, outer bands, discretionary candle exits, or selected returns. No performance result is claimed.

Backtest Lab

ComparisonChange one assumptionEvaluate
RSI contributionToggle the oversold-and-recovery requirementNet expectancy and excluded opportunities
VWAP directionToggle the rising-slope conditionWhether broader alignment helps
ConsolidationVary its length or toleranceSensitivity and failed breakouts
Execution stressIncrease commission and slippageWhether small intraday gains survive friction

Keep instruments, sessions, and dates fixed. Include losses and validate unchanged rules on later data. A source example’s ideal peak or trough is a favorable excursion, not an executable exit policy or verified return.

Final Takeaway

VWAP describes a volume-weighted reference within a defined interval. Its trading value depends on the response you require, the data behind the line, and the exit and risk rules around the trade. Use RSI as a testable condition rather than a promise of reversal, and verify any outer-band formula before interpreting its labels.


Risk Disclosure: This material is for educational and research purposes only and is not financial or investment advice. Trading can result in substantial losses. Backtests are hypothetical, depend heavily on their assumptions, and cannot reproduce every aspect of live execution. Commissions, spreads, slippage, liquidity, gaps, volume-data quality, order behavior, market regime changes, and discretionary decisions can materially affect results. Indicator levels and oversold readings do not guarantee a reversal. Stops do not guarantee an execution price. Historical results do not guarantee future performance.

This article is an independent educational companion to the video and is not affiliated with, sponsored by, endorsed by, or authorized by Data Trader.

As an Amazon Associate I earn from qualifying purchases.