VWAP

Also written volume-weighted average price, volume weighted average price

Volume-weighted average price: the sum of price times size over a set of trades, divided by the total size. Every part of that set is a choice — which venues, which trading sessions, which sale conditions, and where the running sum starts. Neither US consolidated-tape specification defines a VWAP field, so two vendors' VWAPs for one stock on one day are two separate calculations.

How it works

The formula fits on one line: add up price times size for every trade in the window, add up the sizes, divide the first by the second. Everything interesting is in the words "every trade in the window", because for US stocks the tape does not hand you one uniform list of trades.

Each print on the consolidated tape carries a sale condition, and the two plans' output specifications say which conditions may update which statistic. In the UTP matrix, odd-lot trades, Form T trades from outside regular hours, late-reported extended-hours trades, average-price trades, contingent trades and qualified contingent trades all add to consolidated volume while moving neither the high, the low nor the last price. The CTA matrix treats its average-price and odd-lot conditions the same way. What neither specification contains is a fourth column for VWAP. A vendor computing one has to decide which of the existing rules to borrow, or write its own.

Alpaca writes its decision down. A trade adds to the bar's VWAP only if it passes both the high/low rule and the volume rule, and the VWAP keeps its own running volume for the purpose. So an odd lot counts in the bar's v and not in its vw, and the two volumes differ whenever a bar contains a print of that kind. A Form T trade updates a minute bar's prices but not the daily bar's. Hourly and weekly bars are not rebuilt from trades at all: their VWAP is the volume-weighted average of the minute or daily bars' VWAPs. Massive's custom-bars endpoint returns a vw described as "the volume weighted average price", which tells you it exists and not which prints went into it.

The average-price condition deserves its own sentence. CTA defines it as a trade whose reported price is based on an average of the prices for transactions in a security during all or any portion of the trading day — which is what a client fill at a day's VWAP looks like when it reaches the tape. Include those prints in your own VWAP and you are averaging averages. The UTP specification gives exactly that reason for keeping them out of the high, low and last: they reflect other transaction prices.

Two more sources of disagreement

The venue set. Alpaca's own documentation queries Apple's daily bar for 29 September 2023 on both of its feeds. On the consolidated feed the bar's VWAP is 171.599691 on 51,861,083 shares; on the IEX-only feed it is 171.716432 on 923,134 shares. Same stock, same day, same vendor, same formula: nearly twelve cents apart, because one exchange's trades are not the market's.

The anchor. A charting library usually computes VWAP from bars, not trades, and does not always anchor it to the session. Highcharts' VWAP indicator multiplies each bar's typical price — high, low and close averaged — by its volume, accumulates, and starts the sum again every period points, 30 by default. On a one-minute chart it restarts about every half hour, and on a daily chart every thirty sessions. Neither is the one-day figure in a vendor's daily bar.

Why it matters here

The word appears on cards in market data APIs in at least three senses. It is a field on a bar — Alpaca and Massive return one, and AlgoSeek carries VWAP among up to 90 fields on its equity bars. It is a way of producing a price, as in EODHD's disclaimer that its pricing is aggregated by VWAP from over a hundred sources. And it is an execution benchmark, as in the VWAP algorithms in NautilusTrader's Pro subscription and the Interactive Brokers VWAP algos QuantRocket can route. A fill judged against a VWAP is only judged fairly against the same VWAP the broker targeted.

Before comparing two VWAPs, or computing your own in something like ClickHouse from raw trades, pin down five things: the venues (consolidated or one exchange), the sessions (regular hours only, or from the pre-market), the sale conditions (odd lots, average-price and contingent prints in or out), the anchor (session open, or a fixed count of bars), and the input (trades, or bars approximated by a typical price). A backfill from a free single-venue feed, covered in how to backfill minute bars, gets the first of those wrong before any of the others are asked.

Where you will meet this

The cards where this changes a decision, then the rest that use the word.

Sources

  1. UTP Data Feed Services Specification, Version 4.1 (September 2026), section 3.14 Sale Condition — UTP Plan, read
  2. CTS Pillar Multicast Output Binary Specification, Version 2.11b — Consolidated Tape Association,
  3. Market Data FAQ — How are bars aggregated? and What's the difference between IEX and SIP data? — Alpaca, read
  4. Custom Bars (OHLC), Stocks REST API — Massive, read
  5. VWAPIndicator.ts — Highcharts (GitHub), read

FAQ

Why does my VWAP not match the one on my broker's chart?

Almost always because the two are computed over different trades. One may use a single exchange's prints and the other the consolidated tape; one may start the sum at the regular open and the other in the pre-market; one may include odd lots and average-price trades and the other exclude them; and a chart indicator may be built from bars rather than trades. Each choice moves the number, and none of them is an error.

Is there an official VWAP for a US stock?

Not on the tape. The CTA and UTP output specifications carry trades and their sale conditions — including each market center's official open and close — but no VWAP field. A daily VWAP you are quoted is the quoting vendor's own calculation, over the trades that vendor chose to include.

Updated