What is anchored VWAP?
VWAP — volume-weighted average price — is the average price paid per share over a period, weighting each price by the volume traded there. Standard VWAP resets every session. Anchored VWAP (AVWAP) starts from a bar you choose and keeps running from there.
VWAP = Σ(price × volume) ÷ Σ(volume), summed from the anchor bar to now
That choice is the whole idea. Anchor to an earnings gap and the line tracks the average cost basis of everyone who has traded since that earnings report. When price sits above it, that cohort is collectively in profit; below it, collectively underwater. The technique was popularised by Brian Shannon, whose framing is that price and volume tell you what participants actually did, not what they said.
The running calculation, bar by bar
AVWAP is a cumulative statistic, not a rolling one. Both sums run from the anchor and never reset, which is why the line gets progressively less sensitive to any single new bar — a hundred bars after the anchor, one day's volume moves it very little. Typical price is the standard input: (high + low + close) ÷ 3.
Eight daily bars, anchored on bar 1, which is the earnings gap. Volumes are in millions and every column is shown so the arithmetic is reproducible:
| Bar | High | Low | Close | Typical price | Vol (M) | TP × Vol | Cum TP×Vol | Cum Vol | AVWAP | Close vs line |
| 1 | 52.40 | 49.10 | 51.80 | 51.1000 | 18.0 | 919.800 | 919.800 | 18.0 | 51.1000 | above |
| 2 | 52.10 | 50.60 | 50.90 | 51.2000 | 9.0 | 460.800 | 1,380.600 | 27.0 | 51.1333 | below |
| 3 | 51.20 | 49.40 | 49.60 | 50.0667 | 11.0 | 550.733 | 1,931.333 | 38.0 | 50.8246 | below |
| 4 | 50.00 | 48.20 | 48.50 | 48.9000 | 14.0 | 684.600 | 2,615.933 | 52.0 | 50.3064 | below |
| 5 | 49.60 | 47.90 | 49.40 | 48.9667 | 8.0 | 391.733 | 3,007.667 | 60.0 | 50.1278 | below |
| 6 | 50.80 | 49.20 | 50.60 | 50.2000 | 12.0 | 602.400 | 3,610.067 | 72.0 | 50.1398 | above — reclaim |
| 7 | 51.60 | 50.30 | 51.40 | 51.1000 | 16.0 | 817.600 | 4,427.667 | 88.0 | 50.3144 | above — confirms |
| 8 | 52.20 | 51.00 | 52.00 | 51.7333 | 13.0 | 672.533 | 5,100.200 | 101.0 | 50.4970 | above |
Bar 6, worked in full:
typical price = (50.80 + 49.20 + 50.60) ÷ 3 = 150.60 ÷ 3 = 50.2000
TP × volume = 50.2000 × 12.0 = 602.400
cumulative = 3,007.667 + 602.400 = 3,610.067
cum volume = 60.0 + 12.0 = 72.0
AVWAP = 3,610.067 ÷ 72.0 = 50.1398
close 50.60 is above 50.1398 → the line is reclaimed
Two structural things are visible in that table. Price lost the line on bar 2 and spent four bars underneath it, so everyone who bought since the earnings gap was collectively underwater for four sessions. And the AVWAP itself drifted down from 51.13 to 50.13 while price fell, because the heavy volume on bars 3 and 4 traded below the existing average. The line is not a fixed level; it is dragged toward wherever the volume actually transacts. That is the property that makes it different from a moving average, which weights a quiet day and a capitulation day identically.
Where do you anchor?
An anchor is only meaningful if the event changed who owns the stock. Useful anchors:
- The earnings gap — the most common one, because it resets the story and usually prints the highest volume bar of the quarter
- A 52-week high or low, where a lot of positioning changed hands
- The first bar of a major news event, index inclusion, guidance change, or an analyst-day repricing
- The start of a base or consolidation, to see whether the base is being absorbed or distributed
- The exact bar of a prior failed breakout, to measure whether trapped buyers are back to breakeven
- A capitulation bar — the highest-volume down day of a decline — which anchors to the cohort most likely to sell into any bounce
Anchoring to a random Tuesday produces a line that looks meaningful and means nothing. If you cannot say in one sentence why that bar mattered, it is not an anchor.
Scoring a candidate anchor
The discipline that stops anchor selection from becoming after-the-fact chart drawing is to score candidates on criteria fixed in advance, before you look at where the resulting line sits. Four criteria, 0 to 2 each:
| Criterion | 0 points | 1 point | 2 points |
| Volume at the anchor bar | Below the 50-day average | 1–2× average | More than 2× average |
| Did the story change? | No identifiable event | Technical event only (new high, base start) | A named fundamental event: earnings, guidance, index inclusion |
| Age of the anchor | Older than about a year, or fewer than 10 bars ago | 3–12 months | 1–3 months, still the dominant narrative |
| Has price respected the line? | Price has crossed it repeatedly with no reaction | One or two clean reactions | Three or more clean touches or rejections |
Six or more out of eight is worth trading. Below four, the line is decoration. The fourth criterion is the one people skip and it is the most informative: an anchor nobody is trading against is just a curve on a chart, and the evidence that participants care is that price has already reacted to it more than once.
The age criterion cuts both ways for a reason. A very fresh anchor has too little volume behind it, so the line whips around on every new bar and generates signals that reverse the next day. A very old one has so much cumulative volume that a full day of trading barely moves it, and the cohort it represents has largely turned over anyway.
Multi-anchor confluence, and why it is mostly an illusion
The seductive pattern is two or three AVWAPs from different anchors converging at the same price. The claim is that this marks a level where several cohorts share a breakeven. Sometimes that is real. Usually it is a counting artefact, and the arithmetic shows why.
Suppose a stock trades in a $20 range around $50 and you call it confluence when an AVWAP sits within ±1% of current price — a $1.00-wide band out of a $20 range, so roughly a 5% chance per anchor if the lines were placed at random:
| Anchors on the chart | P(at least one within ±0.5%) | P(at least one within ±1%) |
| 1 | 2.5% | 5.0% |
| 3 | 7.3% | 14.3% |
| 5 | 11.9% | 22.6% |
| 8 | 18.3% | 33.7% |
Put eight anchors on a chart and a third of the time one of them is sitting near price for no reason at all. That is the same multiple-comparisons problem that ruins backtests, applied to a chart — the treatment is identical and it is covered properly in the backtest overfitting guide. The working rules:
- One anchor per thesis, chosen before entry. If the thesis is "buyers since the Q2 gap are back to breakeven", there is exactly one line that tests it.
- Confluence only counts if each anchor was independently scored above the threshold. Two 7-out-of-8 anchors converging is information. A 7 and a 2 converging is one anchor and a coincidence.
- Never add an anchor after seeing where price is. That is drawing the target around the arrow.
- Cap the chart at three lines. Not because three is magic, but because a hard cap forces the selection decision to happen consciously.
What is an AVWAP reclaim?
A reclaim is price crossing back above an anchored VWAP it had been trading under, and then holding. The reading is simple: the average buyer since that event has gone from losing to breaking even. Supply that was overhead — people waiting to get out flat — is either gone or has stopped pressing.
Stated mechanically enough to code, which is the only version that can be tested:
ENTRY CONDITIONS (all must hold)
1. anchor is defined and scored 6 of 8 or better,
and it was defined before this bar existed
2. price closed BELOW the AVWAP for at least N bars
(N = 3 in my tests; fewer and it is noise, not a reclaim)
3. current bar CLOSES above the AVWAP
4. next bar also closes above the AVWAP -- confirmation
and does not close below the reclaim bar's low
5. volume on the reclaim bar is at or above its 20-bar average
6. fill is the OPEN of the bar after confirmation,
never the close that generated the signal
INVALIDATION
stop = AVWAP at entry − (0.5 × ATR14)
exit if price closes below the AVWAP for 2 consecutive bars
Everything above is knowable at the time it is used.
That is the property that makes it testable.
Condition 6 is the one that silently invents edges when you get it wrong. The reclaim is only known once the bar has closed, so the earliest honest fill is the following open. Filling at the signal close is the textbook lookahead bias, and on a mean-reverting signal it can flip a losing system into a spectacular one.
Condition 2 is the one that separates a reclaim from a routine oscillation. Without a minimum number of bars beneath the line, every intraday wiggle across a flat AVWAP registers as a signal, and you end up with hundreds of trades that are measuring nothing but the spread.
Stop placement, worked
The design property that makes this setup sizeable is that the signal and the invalidation are the same object. If the thesis is "the average buyer since the anchor is no longer underwater", then the thesis is wrong precisely when price is back below that line. You do not need a second, unrelated rule to tell you when to leave.
Continuing the worked example. Confirmation came on bar 7, so entry is the bar 8 open at $51.50, with the AVWAP at $50.3144 and ATR14 at $1.60:
buffer = 0.5 × ATR14 = 0.5 × 1.60 = 0.80
stop = 50.3144 − 0.80 = 49.5144 → 49.51
1R per share = 51.50 − 49.51 = 1.99 (3.86% of price)
$30,000 account at 1% risk = $300 budget
shares = 300 ÷ 1.99 = 150.75 → round DOWN to 150
risk = 150 × 1.99 = $298.50
position = 150 × 51.50 = $7,725 = 25.75% of the account
Targets: 1R = 53.49 2R = 55.48 3R = 57.47
Trailing, once bar 8 closes:
AVWAP has risen to 50.4970
new stop = 50.4970 − 0.80 = 49.70 (tightened $0.19)
Three things in that arithmetic are worth arguing with. The buffer must scale with volatility — a fixed cent amount gets run over on a wide-range name and sits too far away on a quiet one, which is why it is expressed as an ATR multiple. The share count rounds down, always, so the realised risk is $298.50 rather than something above the budget. And the position works out to 25.75% of the account, which is over the notional cap most sizing rules apply on top of the risk rule — that conflict is resolved by cutting share count, never by tightening the stop, and the logic is in the position sizing guide.
The trailing behaviour is a genuine feature of the technique. Because AVWAP rises when price rises on volume, a stop pinned to it tightens automatically without you choosing a percentage — the line does the trailing. The cost is that in a fast advance the line lags far behind, so it gives back a lot before stopping out. Pairing it with a structural stop from the stop placement guide, and taking whichever is tighter once you are past 1R, is the usual compromise.
AVWAP and volume profile
These two tools answer adjacent questions and are strongest together. AVWAP gives you one number: the average price paid since a specific event. Volume profile gives you the whole distribution: how much volume traded at each price over a period, regardless of when.
| Anchored VWAP | Volume profile |
| What it summarises | The mean of a cohort's cost basis | The full shape of transacted volume by price |
| Time dimension | Central — the anchor defines the cohort | Absent — it aggregates across the whole window |
| Answers | Is this cohort in profit? | Where is acceptance, and where is the gap? |
| Best signal | A reclaim of the line | A rejection at a low-volume node, or acceptance into a high-volume node |
| Weakness | A single number hides a bimodal distribution | Says nothing about who is holding, or when they bought |
The combination that carries real information is an AVWAP reclaim happening at the lower edge of a high-volume node. The AVWAP says the cohort has stopped losing; the profile says there is enough transacted volume at that price for the level to be defended rather than sliced through. The combination that should make you suspicious is an AVWAP sitting in a low-volume gap, because almost nothing changed hands there, so almost nobody has a decision to make at that price.
This is also the honest limit of AVWAP as a concept. A mean is a poor summary of a bimodal distribution: if half the volume since the anchor traded at $45 and half at $56, the AVWAP reads about $50 and describes precisely nobody. Overlaying the volume profile is how you find out whether the average you are trading against actually represents a real cluster of participants. When the same anchor sits inside a tightening range, the VCP base structure is often the better read of what is happening.
Timeframe and session inclusion
Two configuration choices change the line materially and neither has a universally correct answer, which means both must be fixed in advance and applied consistently.
- Bar interval. AVWAP computed from daily bars and from 5-minute bars over the same span will not match, because typical price is an approximation and the approximation error differs with bar size. Finer bars are more accurate and vastly more data. Pick the interval you will actually trade on and never mix them within one study.
- Extended hours. Including pre- and post-market volume changes both sums. Most large caps trade a modest share of volume outside regular hours, but it is concentrated around news and therefore at prices away from the regular-hours average, so it pulls the line disproportionately.
- Anchor bar inclusion. Does the anchor bar itself count, or does the sum start on the bar after? On a huge earnings gap this is not a rounding difference — the gap bar is often the largest single volume contribution in the whole series.
- Price input. Typical price (H+L+C)/3 is standard; some platforms use the close, others use (H+L)/2. On a wide-range bar these differ by a meaningful amount and the difference compounds through the cumulative sum.
- Adjustments. Splits and dividends must be applied consistently to prices and volumes across the whole series, or the cumulative sums are silently wrong from the adjustment date backwards.
Illustrative sensitivity to extended-hours inclusion:
shift in AVWAP ≈ (share of volume outside RTH)
× (its average price offset)
8% of volume trading 1.5% away from the RTH average
→ 0.08 × 1.5% = 0.12% shift = $0.06 on a $50 stock
15% of volume trading 3.0% away
→ 0.15 × 3.0% = 0.45% shift = $0.23 on a $50 stock
Against a stop buffer of $0.80, the first is noise and the
second is not. It is a configuration decision, not a detail.
The practical consequence: your platform's AVWAP and your backtest engine's AVWAP will disagree unless you have checked all five settings. Reconcile them on one symbol, one anchor, one date before you trust any result that spans the two, because a systematic offset of even a few cents changes which bars register as reclaims.
Does it actually work?
Partly, and less than the headline suggests. I built a screener and a no-lookahead backtest engine, then ran my own swing setups through walk-forward testing rather than a curve-fit in-sample check. Most of them did not survive.
| Setup | Walk-forward result | Verdict |
| AVWAP reclaim | +0.117R over 4,933 trades, 129-symbol 10-year universe, 95% CI [+0.057, +0.174] | The only survivor — but see the random-entry control below. An earlier, roughly double figure on ~100 hand-picked trades is retired: it failed my own adversarial re-test |
| VCP-style contraction | ≈ breakeven | Neutral, not traded mechanically |
| Gap / opening-range-breakout proxy | −0.28R | Dropped |
| Market-regime filter | Reduced expectancy | Rejected |
| Normalised-momentum-lag filter | Reduced expectancy | Rejected |
The control is the part that matters, and it is the part most write-ups omit. Running the same universe, the same dates, the same stops, the same exits and the same sizing with a risk-matched random entry instead of the AVWAP trigger already captured +0.086R:
AVWAP reclaim, walk-forward: +0.117R over 4,933 trades
Risk-matched random entry: +0.086R (73% of the headline)
─────────────────────────────────────────────────────────
Signal's own contribution: +0.030R
Implied σ_R from the published interval ≈ 2.10
SE of the difference = 2.10 × √(2 ÷ 4,933) = 0.042
95% CI on the difference = [−0.052, +0.114]
That interval CROSSES ZERO.
The AVWAP reclaim is NOT a validated edge.
For scale: detecting a genuine +0.030R at 95% confidence
would need roughly 18,758 trades.
So: nearly three quarters of a positive-looking result was available to a coin flip using the same exits and the same risk management. Whatever is working is mostly the exit discipline and the drift of a long-biased universe, not the trigger. +0.117R was never a windfall, and +0.030R with a confidence interval crossing zero is not an edge at all — it is a result consistent with there being no effect. It also gets erased entirely by ordinary costs: at five cents of slippage per side on a stock where 1R is $2.40, the round trip alone is 0.0417R, more than the whole residual.
The first pass at this result deserves an explicit label rather than quiet deletion. An earlier version, run on a handful of names I had picked myself over barely a hundred trades, came back at roughly twice the figure above. It did not survive my own adversarial re-test and it did not reproduce on a wider universe, so the number itself is retired and I no longer republish it — precisely so nobody quotes it back at me as a result. It stands here as an example of what a small sample plus an unstated number of variants produces.
Two filters I expected to help — a market-regime filter and a normalised-momentum-lag filter — were tested on the same data and cut expectancy, so both were rejected rather than retuned. That is the whole discipline: an honest test is one that is allowed to say no. The full write-up is here →
How to use it without fooling yourself
- Pick the anchor before you look at the outcome, and score it against fixed criteria. Anchoring after the fact is how every chart becomes a winning chart.
- Use one anchor per thesis, capped at three lines. Eight anchors put a line near price a third of the time for no reason at all.
- Define the stop as part of the signal, not after entry. If the AVWAP generated the entry, the AVWAP defines the invalidation.
- Fill on the bar after confirmation, never on the close that produced the signal. That single index is the difference between a test and a fantasy.
- Fix the session, bar interval, price input and anchor-inclusion settings once, and reconcile them between your platform and any testing tool.
- Log every trade in R and judge the setup on hundreds of trades, not five. A +0.20R edge needs several hundred trades before it is distinguishable from zero.
- Assume your edge is smaller than the backtest says, because costs, slippage, and your own hesitation are not in the backtest — and because on this setup a random entry captured most of it.
Everything above is a process for finding out whether something works, not a claim that this one does. The measurement side lives in the trading journal guide and TradeLog, the sizing side in the R-multiple and expectancy guide, and the step nobody should skip is paper to live — my own execution gate requires 60 closed paper trades with positive realised expectancy before any live broker, and the current record against that gate is zero.
Educational content, not financial advice. No live profit-and-loss figures are claimed anywhere on this site; backtest and walk-forward results are always labelled as such. Full terms: /terms.html
Tools referenced in this guide