Order flow and CVD: absorption, footprints and data quality · 1 / 5
Calculate cumulative volume delta from a trade tape
Cumulative volume delta is a running signed sum of classified trading activity. Its usefulness depends on what was counted, how the trade side was identified and where the sum started. A green line does not mean that more buyers than sellers exist.
Athenum7 minUpdated:
How CVD signs trades by taker side, in base or quote units
For a trade feed with a reliable taker-side field, assign positive size to buyer-initiated trades and negative size to seller-initiated trades. Delta for a window is the sum of those signed sizes; CVD accumulates successive deltas from a declared starting point. Every matched trade still has both a buyer and a seller. The sign identifies who crossed available liquidity.
Use either base quantity or quote notional consistently. For quote delta, multiply each trade's base size by its own execution price before summing. Multiplying the final base delta by the last price is generally a different calculation. If a vendor infers direction from price movements rather than exchange taker flags, document that method; the resulting series may differ even with the same total volume.
CVD is not a position ledger, and resets change its level
An aggressive buy may open a long, close a short or form one leg of a hedge. CVD cannot identify which of those happened. OI adds information about net outstanding exposure, but combining the two aggregates still does not reveal all participant-level transitions. Keep statements about flow separate from claims about inventory.
The reset convention also changes the level. A daily reset, session reset and continuous history can show different absolute values with the same recent slope. Compare changes over aligned windows. If a feed disconnects, a silently flat CVD line should not be interpreted as balanced trading until completeness is restored.
Example: four trades, 0.7 BTC of net aggressive buying
Start the running sum at zero. A buyer-initiated trade of 2 BTC gives +2. A seller-initiated 0.5 BTC reduces the sum to 1.5. Another buy of 1 BTC raises it to 2.5, and a sell of 1.8 BTC leaves 0.7. Total traded volume is 5.3 BTC, much larger than the net delta.
The last trade is a sell even though final CVD is positive. Both facts can be true: the whole window contains more buyer-initiated size, while its most recent event is seller-initiated. A decision about the next trade needs price response and context, rather than the final sign alone.
In a separate spot example, 2 asset units trade as aggressive buys at 100 USDT each, followed by an aggressive sale of 1 unit at 110 USDT. Base delta is +1 unit, but quote delta is 2 × 100 − 1 × 110 = +90 USDT. Multiplying the base delta by the final price gives +110 USDT instead, which is not the same measure.
| Trade | Taker side | Size BTC | Running CVD BTC |
|---|---|---|---|
| 1 | Buy | 2.0 | 2.0 |
| 2 | Sell | 0.5 | 1.5 |
| 3 | Buy | 1.0 | 2.5 |
| 4 | Sell | 1.8 | 0.7 |
Open full-size diagram- After trade 1: 2 BTC
- After trade 2: 1.5 BTC
- After trade 3: 2.5 BTC
- After trade 4: 0.7 BTC
Each bar shows the running sum after one trade. The final positive value does not erase the last seller-initiated trade.
CVD divergences caused by mismatched data coverage
Comparing a single exchange's CVD with a multi-exchange price index can produce an apparent divergence because the two series cover different markets. Quote/base conversions, filtering and missing intervals can do the same. First reproduce the calculation with aligned coverage; only then investigate whether the residual price/flow relationship has trading value.
Before acting
- Verify whether direction comes from taker flags or an estimation rule.
- Choose base quantity or per-trade quote notional.
- Align start time, reset convention, venues and product type.
- Check missing intervals and duplicate trade IDs.
- Describe aggressor behaviour without inventing opening-position intent.
Check your understanding
A fifth seller-initiated trade of 1.2 BTC follows the example. What are final CVD and total volume?
Show the explained answer
CVD becomes 0.7 − 1.2 = −0.5 BTC. Total volume becomes 5.3 + 1.2 = 6.5 BTC. The net sign switches, but the calculation still does not identify how many traders opened or closed positions.
Sources and further reading
Continue with Athenum
From the Athenum blog
Related lessons
- Volume delta: compare candle estimates with taker-side trades
Two tools called volume delta can disagree: +10 estimated from candles versus −2 from taker-side trades. Compare both on the same trades first.
- CVD resets: distinguish a new session from aggressive selling
A CVD line that drops to zero may just have restarted its session. Reconstruct continuous and session-anchored CVD and spot a false −6 reading.