What Is Cumulative Volume Delta (CVD) and How Do You Read It?
By TickDistill โ order-flow microstructure signals. Educational content, not financial advice.
The short answer
Cumulative Volume Delta (CVD) is the running sum of signed taker volume โ buy-aggressor volume minus sell-aggressor volume โ accumulated over time. CVD tells you whether buyers or sellers have been the aggressive side of the tape across a session, and by how much. The key diagnostic use is comparing CVD's direction with price's direction: when they diverge, the market is revealing a mismatch between aggression and outcome that experienced traders call an absorption tell.
What is signed taker volume and why does it matter?
Signed taker volume is the volume of each trade tagged with the direction of the aggressor โ the participant who crossed the spread and consumed resting liquidity. A buy-aggressor trade receives a positive sign; a sell-aggressor trade receives a negative sign.
The sign comes from the exchange's own tape. On Binance, for example, the aggTrades feed records the isBuyerMaker flag per trade: if isBuyerMaker is false, the buyer was the taker (aggressive side) and the trade signs positive; if isBuyerMaker is true, the seller was the taker and the trade signs negative.
Signed volume is the input that separates order-flow analysis from pure price analysis. Price tells you where the market ended up. Signed volume tells you who drove it there โ and at what cost in aggression.
What is the CVD formula?
CVD is the running cumulative sum of signed taker volume. For a sequence of trades i = 1, 2, โฆ, t, each with size v_i and aggressor sign s_i โ {+1, โ1}:
CVD(t) = ฮฃ_{i=1}^{t} s_i ยท v_i
where s_i = +1 for buy-aggressor trades and s_i = โ1 for sell-aggressor trades.
This is public, textbook math. The formula is standard across microstructure practitioners and appears in order-flow literature under various names โ "delta," "cumulative delta," or "signed flow" โ all referring to the same accumulation of directional taker pressure.
Over a fixed session window [0, T], CVD equals the total buy-aggressor volume minus the total sell-aggressor volume:
CVD(T) = V_buy_aggressor โ V_sell_aggressor
A positive CVD means buyers have been more aggressive than sellers over the window. A negative CVD means sellers have been more aggressive. CVD of zero means aggression has been balanced, regardless of where price moved.
How do you reset or window CVD?
CVD is defined relative to a starting point. Practitioners reset it at:
- Session open โ accumulates intraday aggression from the first print.
- Fixed time windows โ e.g., rolling 1-hour or 4-hour CVD to capture regime changes within a session.
- Candle boundaries โ per-bar delta (the signed volume of a single candle) is the incremental building block; summing across candles reconstructs session CVD.
The choice of reset window is a calibration decision. A short window is more reactive but noisier; a long window integrates more signal but can obscure intraday shifts. TickDistill's computation applies a causal baseline โ using only past data โ so that the z-score of CVD at any point reflects its rarity relative to its own recent history, not a hard-coded threshold. See Sigma-Normalization: Why Order-Flow Signals Should Be Measured in Standard Deviations, Not Raw Numbers for the method.
What does CVD-vs-price divergence mean?
CVD-vs-price divergence is the condition where price and CVD move in opposite directions over the same window. It is the primary diagnostic use of CVD in order-flow analysis.
Bearish divergence โ price makes a higher high but CVD makes a lower high (or fails to confirm): buy-side aggression is weakening even as price moves up. Someone is selling passively into the aggressive buying.
Bullish divergence โ price makes a lower low but CVD makes a higher low (or flattens): sell-side aggression is weakening even as price moves down. Someone is buying passively into the aggressive selling.
Divergence is a necessary observation, not a trading signal by itself. The textbook interpretation is that a large passive order โ a "wall" of resting liquidity โ is absorbing the aggressive flow without yielding price movement proportional to the pressure applied.
| CVD direction | Price direction | Reading |
|---|---|---|
| Rising | Rising | Confirmed upside aggression |
| Falling | Falling | Confirmed downside aggression |
| Flat or falling | Rising | Passive selling absorbing buys (bearish divergence) |
| Flat or rising | Falling | Passive buying absorbing sells (bullish divergence) |
| Rising sharply | Price contained | Potential absorption: aggression without price progress |
What is the aggressor side and why is it the right input?
The aggressor side is the party who initiated the trade by submitting a market order or marketable limit order that crossed the spread. The aggressor consumes resting liquidity; the passive side provides it.
Aggressor identification is the correct input for CVD for two reasons. First, the aggressor's decision is unconditional โ they chose to trade at the prevailing price, revealing genuine directional intent. Second, the passive side's resting order has no direction information encoded in the act of being filled; a limit order sitting at the bid reveals nothing about the limit-order poster's view of the next move.
Without aggressor-side tagging, signed volume is approximation. Methods like the Lee-Ready rule (Lee and Ready, 1991, Journal of Finance) classify trades by comparing the transaction price to the prevailing bid-ask midpoint โ buys above midpoint, sells below, with a tick test for trades at the midpoint โ and are used when exchange tape does not include the flag. Centralized exchanges publishing the raw aggTrades feed (as Binance does) provide the clean input directly, making tick-classification algorithms unnecessary for those venues.
For decentralized markets and OTC venues where no central tape exists, CVD cannot be computed in its clean form. CVD is a centralized-exchange signal.
How does TickDistill compute CVD?
TickDistill sources aggressor-tagged trades from the Binance Vision aggTrades historical dumps (the isBuyerMaker field per trade), which record the aggressor side directly from the exchange matching engine. This is the L1 data layer โ the same layer that powers trade imbalance and big-order detection (see What Is Trade Imbalance in Order Flow?).
The raw CVD accumulation is public math. TickDistill's value-add is in expressing CVD in causal sigma units โ recomputing a rolling z-score of the running delta so that "high CVD" means high relative to what this market has been doing lately, not high in absolute terms. A $100M positive CVD on BTC is very different information in a low-volume regime than in a high-volume regime. The z-score makes both comparable and the rarity reading stable across market conditions.
The calibration of the baseline window is proprietary. What matters conceptually is that every baseline uses only past data (no look-ahead) and excludes mechanical windows โ such as perpetual funding settlements at 00:00, 08:00, and 16:00 UTC โ where volume spikes for structural reasons rather than informational ones.
How is CVD related to trade imbalance?
Trade imbalance is the per-window ratio of buy-aggressor volume to total volume, expressed as a fraction or percentage. CVD is the running sum of the signed delta. They measure the same underlying phenomenon โ directional taker pressure โ at different time horizons and in different units.
| CVD | Trade imbalance | |
|---|---|---|
| Unit | Signed volume (contracts / USD notional) | Fraction โ [โ1, +1] or percentage |
| Time scope | Accumulates across a session or window | Per fixed window (e.g., 30 s, 5 min) |
| Primary use | Trend of aggressor pressure over session | Snapshot of directional pressure in a window |
| Divergence read | vs price over the same session | vs recent baseline |
See What Is Trade Imbalance in Order Flow? for trade imbalance in detail.
What are the limits of CVD?
CVD cannot identify individual actors. The Binance aggTrades feed aggregates trades that execute within a short time window (100ms) at the same price and on the same aggressor side into a single record โ which is not necessarily a single order. It cannot prove that multiple aggressive prints on the same side are from one participant. High positive CVD means many buy-aggressor fills occurred; it does not prove a single large buyer.
CVD does not capture passive pressure. A market absorbed by large resting orders shows up as price containment in the face of CVD pressure โ that is the divergence read โ but CVD itself only accumulates the aggressive side. The passive actor's size is inferred, not measured, without a full order book (L2 data).
CVD is directional, not predictive. CVD measures the current state of signed aggressor accumulation. It does not predict future price direction. A strongly positive CVD means buyers have been aggressive; it says nothing about whether that aggression will continue or whether it has already been fully absorbed. See What Is Order Flow Absorption? for how absorption detection builds on this observation.
CVD resets matter. Two traders viewing "CVD" may disagree because they use different reset windows. Always specify the window when communicating CVD readings.
FAQ
Q: Is CVD the same as OBV (On-Balance Volume)?
No. OBV (Granville, 1963) adds the full candle volume if price closes up and subtracts it if price closes down โ it uses price direction to sign the volume. CVD uses the exchange tape's aggressor flag to sign each individual trade. CVD is more granular and more accurate about who initiated each trade; OBV is an approximation available wherever OHLCV data exists.
Q: Can CVD be computed for spot forex or equities?
CVD in its precise form requires a centralized tape that records the aggressor side. Spot forex has no single central tape, so clean CVD is not available there. Equity markets publish signed trade data via their own tape (e.g., NYSE TAQ) and Lee-Ready classification is widely applied where the flag is absent. TickDistill currently covers centralized crypto venues where the aggressor flag is available natively.
Q: What does it mean when CVD is flat but price moves sharply?
Flat CVD with sharp price movement means aggressor pressure was balanced, but price moved anyway. This often reflects a large passive order being pulled (removed from the book) rather than absorbed โ the market found no resting liquidity at a level and price gapped through it. It is a different condition from absorption and can signal fragility rather than a strong passive actor.
Q: Does a large positive CVD mean the market will go higher?
No. CVD is a measure of past aggressor accumulation, not a forecast. Large positive CVD means buyers have been aggressive over the measurement window. Whether that aggression has already been absorbed, whether it is exhausted, or whether it will continue is a separate question requiring additional context โ including price behavior, absorption signals, and regime state.
Q: Where does CVD fit in a broader order-flow stack?
CVD is a foundational L1 metric โ it requires only the trade tape with aggressor tagging, no order book. It sits above pure OHLCV (which has no aggressor information) and below L2 signals that use full book depth. It feeds divergence reads, absorption detection, and trade imbalance analysis. See What Is Order Flow Microstructure? for the full hierarchy.
TickDistill sells clean, computed order-flow inputs โ not trading advice or guaranteed alpha. Backtests are illustrative and not a promise of future results.









