Debated1 min read
◆ The PatternStandard-deviation bands around VWAP: how far price has drifted from where volume puts fair value
VWAP Bands — standard deviation envelopes around VWAP.
VWAP ± 1σ, ± 2σ, ± 3σ
where σ = standard deviation of (Price − VWAP) weighted by volume
where σ = standard deviation of (Price − VWAP) weighted by volume
Institutional levels:
• ±1σ → ~68% of volume if prices were normal → short-term mean reversion zone
• ±2σ → ~95% if normal (fewer in practice) → stretched
• ±3σ → extreme → strong rubber-band effect
Day traders use these as dynamic support/resistance levels that adapt to volume distribution.
• ±1σ → ~68% of volume if prices were normal → short-term mean reversion zone
• ±2σ → ~95% if normal (fewer in practice) → stretched
• ±3σ → extreme → strong rubber-band effect
Day traders use these as dynamic support/resistance levels that adapt to volume distribution.
Worked example
Bands two volume-weighted standard deviations of the typical price either side of VWAP. Day 15: VWAP 103.80, bands 98.64 to 108.97. On day 13 the low of 98 dipped below the lower band (98.80), on the heaviest volume of the period.
The example data: 15 days, used in every indicator here
| Day | High | Low | Close | Volume |
|---|---|---|---|---|
| 1 | 101 | 99 | 100 | 50,000 |
| 2 | 103 | 100 | 102 | 62,000 |
| 3 | 103 | 100 | 101 | 48,000 |
| 4 | 105 | 101 | 104 | 70,000 |
| 5 | 108 | 104 | 107 | 85,000 |
| 6 | 108 | 105 | 106 | 60,000 |
| 7 | 110 | 106 | 109 | 90,000 |
| 8 | 110 | 107 | 108 | 72,000 |
| 9 | 108 | 104 | 105 | 80,000 |
| 10 | 105 | 102 | 103 | 66,000 |
| 11 | 105 | 102 | 104 | 55,000 |
| 12 | 104 | 101 | 102 | 75,000 |
| 13 | 102 | 98 | 99 | 95,000 |
| 14 | 102 | 99 | 101 | 64,000 |
| 15 | 105 | 101 | 104 | 71,000 |
Where it misleads
- The “68% within one band, 95% within two” rule assumes a bell curve; intraday prices rarely follow one.
- Early in a session there is too little volume behind the bands, and they swing widely in the first bars.
- Like VWAP itself, they are a reference for execution and context, not a signal with a tested edge.
In code
tp = (df['high'] + df['low'] + df['close']) / 3 v = df['volume'] vwap = (tp * v).cumsum() / v.cumsum() sd = np.sqrt((v * (tp - vwap) ** 2).cumsum() / v.cumsum()) # volume-weighted SD df['vwap'], df['vb_up'], df['vb_lo'] = vwap, vwap + 2 * sd, vwap - 2 * sd
Assumes import numpy as np, import pandas as pd, and a DataFrame df with columns high, low, close and volume — the 15 days above.
Sources
- S. Berkowitz, D. Logue & E. Noser, “The Total Cost of Transactions on the NYSE”, Journal of Finance 43(1), 1988 — VWAP as an execution benchmark
- The bands are a practitioner construction; there is no canonical paper for them.
Last reviewed October 2026 · How this site checks its content · Report a mistake
Pattern bridge: VWAP ± standard deviation bands combine weighted mean with dispersion. The same construction as batch norm’s mean-and-variance framing.
Linked from 1