VWAP is the average transaction price weighted by volume
Volume-weighted average price gives more influence to prices where more volume traded. A price associated with 1,000 units contributes ten times as much as a price associated with 100 units. The result is therefore an average of the declared data—not a line that the market is required to respect.
Over a declared set of observations:
Here, is the price assigned to observation and is its volume. With trade data, may be the transaction price. With bars, the implementation may use a representative bar price and aggregate volume. Those are related approximations, not identical records.
VWAP tells the reader where volume-weighted trading occurred over its window. It is a reference, not a universal estimate of fair value and not a prediction that price will return to it.
The anchor defines the market memory
Session VWAP
Session VWAP begins at a declared session boundary and resets at the next one. It asks where volume has traded during this session. The session calendar, timezone, and treatment of overnight activity are part of the signal.
Rolling VWAP
Rolling VWAP keeps a fixed recent window and continuously removes old observations. It has no hard session reset, but its value can change when a high-volume observation leaves the window.
Anchored VWAP
Anchored VWAP begins at an explicit timestamp chosen to represent an event, such as a session open or a known announcement. Arizmic's shipped signal accepts that timestamp; it does not discover swings or events on its own. The calculation is objective after the anchor is declared. Selecting a visually attractive anchor after seeing the chart is not.
The three references can sit at different prices on the same bar because they remember different trading histories.
A session anchor keeps every eligible observation since the reset. A rolling anchor forgets one old observation as each new one enters. A timestamp anchor keeps everything after one declared event. When the lines disagree, the first question is not which is correct; it is which memory matches the intended use.
A weighted example
Illustrative example. Assume three transactions:
| Price | Volume | Price × volume |
|---|---|---|
| 100 | 10 | 1,000 |
| 101 | 30 | 3,030 |
| 103 | 10 | 1,030 |
Total volume is 50 and volume-weighted value is 5,060, so VWAP is 101.20. The simple average of the three prices is 101.33. The larger trade at 101 pulls the volume-weighted reference toward it.
This example does not imply that 101.20 is the correct next price. It explains what information the calculation summarizes.
Distance must have units
Price minus VWAP is a distance in price units. That can be useful within one instrument but is difficult to compare across prices and volatility regimes.
Common normalizations include:
- percentage distance from VWAP;
- distance divided by rolling volatility;
- distance divided by volume-weighted dispersion;
- location inside VWAP standard-deviation bands.
A z-score expresses distance in units of the chosen dispersion estimate. Early in a session, that estimate may be based on very little data. A large score can therefore reflect unstable warm-up rather than a mature extreme.
Two shipped normalizations deserve special care. Session VWAP Distance z-scores the distance series around its own rolling mean, so a z-score of zero can occur while price remains above VWAP. Session VWAP Weighted-Dispersion Z-Score divides raw distance directly by the session's cumulative volume-weighted dispersion. The first asks whether today's distance is unusual relative to recent distances; the second asks how many weighted session dispersion units price is from the anchor.
VWAP bands use rolling dispersion around a supplied VWAP to create an envelope. The extreme/block signal adds sequence memory: it records a sufficiently large distance and a later cross back through VWAP. Neither output supplies an order unless a strategy assigns it one.
Reference, distance, and event outputs differ
| Output | What it says | What it does not say |
|---|---|---|
| VWAP level | Volume-weighted reference for the anchor | Price must revert |
| Raw distance | Price units above or below reference | Comparable extremity across assets |
| Percentage distance | Relative displacement | Whether volatility is unusual |
| Standardized distance | Displacement relative to chosen spread estimate | Probability of reversion |
| Band position | Location relative to an envelope | Direction of next move |
| Extreme/block flag | A declared threshold or eligibility condition | Complete entry and exit rule |
The output chosen by the strategy must match its threshold and units. Comparing a raw distance with a z-score threshold is a type error in economic terms even if software accepts both numbers.
VWAP can play several roles
- Execution benchmark: compare realized trades with market volume-weighted activity over a specified interval.
- Market-state reference: describe whether price is above or below a session or event anchor.
- Reversion input: test whether large normalized displacement contracts.
- Continuation context: test whether price accepts above a reference after a breakout.
- Risk or exit reference: define a live condition that moves as VWAP updates.
A live recalculated VWAP exit is not the same as a fixed target set at entry. The reference can move after the trade begins, so the exit price is not known in advance.
Data and session choices dominate interpretation
Bar-based VWAP depends on the bar price convention and can hide transaction detail. A session signal needs an instrument calendar, correct timezone, and clear treatment of breaks. Volume from different venues or feed coverage can change the reference.
Futures research must define contract and roll handling. Equity research must consider auctions and extended hours. Crypto has no natural exchange-wide session reset unless the strategy declares one.
False readings to avoid
- Calling VWAP fair value.
- Comparing session and rolling VWAP as if only their labels differ.
- Choosing an anchor after seeing the result.
- Treating a z-score as a reversion probability.
- Ignoring early-session warm-up.
- Using a completed session reading for an earlier fill.
- Treating a moving VWAP exit as a fixed entry bracket.
- Assuming bar VWAP reconstructs every transaction.
Shipped signals in this family
Try it in Arizmic
Included with Arizmic
9 prebuilt signals in this family
Use shipped VWAP signals as session, rolling, or timestamp-anchored price references, with separate distance and normalization outputs.
- The anchor determines which trades the average remembers.
- Raw distance, rolling-normalized distance, and direct weighted-dispersion z-score are not interchangeable.
- A price reference is not an entry, exit, or execution benchmark until a strategy assigns that role.
Ask the AI Companion
Draft a custom anchored signal
Create a typed price-anchor draft with explicit memory, reset, and normalization semantics.
Draft a custom volume-weighted anchor signal for [market and bar interval]. The anchor should be [session boundary, rolling window, or explicit event supplied as an input], using [price field] and [volume field]. Emit the reference, raw distance, and [optional normalization] as separate outputs. Define reset behavior, zero-volume handling, warmup, and completed-bar timing, and compare it with the nearest shipped VWAP signal. Return a typed signal_draft for review only; do not infer unsupported swing anchors, save, run, generate arbitrary Python, or execute anything.
Ask the AI Companion
Explore VWAP and anchor uses
Choose a shipped anchor and use its outputs without confusing reference, displacement, and event semantics.
For [session, rolling, or anchored shipped VWAP signal] on [market and horizon], explain exactly what history the anchor includes and what each distance or z-score output means. Suggest one location use, one acceptance or rejection use, and one exit-context use. Identify which output represents an actual touch, name a nearby shipped comparator, and flag reset and normalization mistakes. Do not turn the reference into an automatic trade or execute anything.
Personal notebook
Extend it in Marimo
Open typed price, volume, session identifiers, and selected VWAP outputs in a personal Marimo notebook.
Show what each anchor remembers and why its distance outputs disagree.
- Bring in
- price and volume, session identifiers or anchor timestamp, two selected VWAP references, raw and normalized distance outputs
- Build
- price with multiple VWAP anchors, anchor-memory and reset timeline, raw-distance versus z-score comparison
How to read it: Inspect disagreement periods and z-score-zero observations with nonzero raw distance. Those cases reveal the exact question each normalization answers.
Value origin: Only retained signal columns are engine-reported; alternate anchors or normalizations computed in Marimo are notebook-derived.
With Companion: Request a reviewed cell draft for the anchor comparison, inspect the selected timestamps and diff, then apply it explicitly.
Further reading
- Perold, “The Implementation Shortfall: Paper Versus Reality” (1988) — Defines an execution benchmark from the investment decision through completed and missed trades. It helps distinguish VWAP used as a descriptive price anchor from a benchmark chosen to judge execution.
- Białkowski, Darolles, and Le Fol, “Improving VWAP Strategies: A Dynamic Volume Approach” (2008) — Models intraday volume and dynamically updates a VWAP execution schedule. It shows why the anchor depends on a volume process rather than being an ordinary unweighted average.
- Mitchell, Białkowski, and Tompaidis, “Volume-Weighted Average Price Tracking: A Theoretical and Empirical Study” (2020) — Compares static and dynamic VWAP tracking under price, volume, transaction-cost, and impact assumptions. It provides execution context while leaving strategy uses of anchored VWAP as separate hypotheses to test.