Order flow imbalance and cumulative volume delta: signing the tape
Volume is unsigned. A million shares traded tells you nothing about who was in a hurry. Signing that volume is what turns a volume bar into an order flow reading, and the conventions for doing it are where most of the errors live.
Every trade has a buyer and a seller. That is why raw volume is directionless: a million shares traded means a million were bought and a million were sold.
What distinguishes the two sides is not who owned what. It is who was in a hurry. One party posted a resting order and waited. The other crossed the spread to trade immediately. The second party is the aggressor, and signing volume by aggressor is what turns volume into order flow.
Signing the tape
The standard approach compares the trade price to the prevailing quotes.
A trade printing at or above the ask means someone lifted the offer: they wanted in enough to pay up. Classify it buyer-initiated. A trade at or below the bid means someone hit the bid. Classify it seller-initiated. Trades at the midpoint are ambiguous and fall back to a tick test against the previous price.
This is the Lee-Ready approach and it works well. Its known weakness is worth stating: it assumes the quote is contemporaneous with the trade. If the quote feed lags the trade feed, a book that has not caught up to a rising market places every print above a stale offer, and the classifier reports a wall of buying that is really a wall of latency.
Cumulative volume delta
Once each trade is signed, delta is the difference and CVD is its running total:
`` delta = buy volume - sell volume CVD = running sum of delta over the session ``
CVD answers a question price alone cannot: was this move driven by aggressive participants, or did it drift? A rally on strongly positive CVD had buyers paying up. A rally on flat or negative CVD happened without them, which usually means sellers stepped away rather than buyers arriving.
The commonly cited reading is divergence: price makes a new high while CVD does not. The interpretation is that the move is not supported by aggressive buying. This is a reasonable observation about participation. It is not a reliable reversal signal, and it is presented as one far more often than the evidence supports.
Order flow imbalance is not the same thing
The two terms get used interchangeably and they measure different objects.
CVD is trade-based. It sums executions that already happened.
Order flow imbalance, in its strict sense, is quote-based. It measures changes in the resting depth at the best bid and offer: size added and pulled. Depth appearing on the bid and disappearing from the offer is imbalance in the book, and it can happen with no trades at all.
Both are informative and they answer different questions. Trades tell you what was done. Book changes tell you what was offered and withdrawn, which includes intent that never became a trade. Cancellations are information too.
Three traps that produce confidently wrong numbers
The names lie, and the convention is vendor-specific. This is the single biggest practical hazard in signed flow. Some data vendors label per-minute volume splits by the resting side rather than the aggressor. A field called bidVolume under that convention means volume that traded at the bid, which is seller-initiated. Read it as "buying" and every delta you compute is inverted, on every bar, forever, while looking completely plausible.
A conflated tape is a sample, not a census. Some last-sale feeds consolidate multiple executions into single prints, and some do not carry every venue. A CVD built from a partial tape is a directional reading of a subset. It can be useful for direction and it must never be quoted as volume.
A count-capped window is not a time window. If your tape buffer holds the last N prints and you compute "the last 10 minutes" from it, then on a fast instrument those N prints may span seconds. The window you named and the window you measured are different, and nothing errors.
The one check that catches all three
There is a simple test that requires no knowledge of the vendor's conventions:
**Correlate your signed flow against the price change over the same
intervals. It must be positive.**
Aggressive buying pushes price up. If your delta series correlates negatively with contemporaneous price movement, your sign convention is inverted, and it does not matter which of the three causes did it.
Two cautions on running it. Use a long window, on the order of hours rather than minutes, because a short same-sign window happens by chance constantly and is exactly the kind of false reassurance that lets an inverted feed ship. And run it per instrument, because conventions can differ by asset class within the same vendor.
What signed flow is good for
It is a participation and conviction read. It tells you whether a move involved people crossing the spread to get filled, or whether it happened in their absence. That is real information about the character of a move, and it is not available from price or unsigned volume.
What it does not do is forecast. The relationship between delta and subsequent returns is much weaker than the relationship between delta and contemporaneous returns, and the two get conflated constantly. Flow that moved price already moved it.
Related: reading the options tape, which covers aggressor classification in the options context, and VPIN and order flow toxicity.