Order flow
CVD indicator: reading cumulative volume delta in crypto
What cumulative volume delta measures, spot versus perpetual CVD, the five-exchange Agg. CVD, its reset options and how to read divergences with care.
Volume tells you how much changed hands. It does not tell you which side was in a hurry. Cumulative volume delta (CVD) keeps that score: it adds up, bar after bar, how much more was bought at the market than sold at the market. When the line climbs, buyers have been crossing the spread more than sellers; when it falls, the reverse.
This guide explains what the number is made of, how to read it without overreading it, and how the two CVD tools in AlertaChart differ: the single-exchange pane and the five-exchange Agg. CVD. The Help Center's order-flow article lists them with the rest of the toolbox.
What CVD measures
Every trade has an aggressor: the side that sent a market order and took liquidity from the book. For each bar, delta is the volume bought by aggressors minus the volume sold by aggressors. CVD is the running sum of those deltas. Because it is a sum, its absolute level only means something relative to where the count started; what you read is the direction and the steepness of the line.
Exchanges do not label the aggressor in the same way. Binance marks each trade with "is the buyer the market maker?", Bybit and OKX report the side of the taker, and Coinbase reports the side of the maker order. Any total across venues has to bring these conventions to one meaning before it adds them up. It is a good reason to treat a CVD from an unfamiliar source with care until you know how it classifies trades.
How to read the line
- Slope over level. A steep rise means aggressive buying is outpacing aggressive selling in that window. A flat line during a rally means the move happened without much net aggression in either direction.
- Confirmation. Price and CVD rising together says that buyers taking liquidity are behind the move.
- Agreement with positioning. The Help Center notes that price and open interest rising together means new money is entering, and that price, CVD and open interest rising together is healthier than price rising alone on falling CVD.
Divergences, read carefully
The best-known CVD pattern is the divergence: price makes a higher high while CVD makes a lower high, or the other way round. The Help Center puts it plainly: a rising price with falling CVD can be a warning. "Can be" is the important part. A divergence may only mean that passive orders absorbed the aggression, that the move was driven on another exchange, or that the window you chose cuts the count at an awkward point. Before you give it weight, check that it lasts for more than a couple of bars, that it shows on more than one timeframe, and whether open interest and funding tell the same story.
Spot CVD and perpetual CVD
Spot markets exchange the coin itself; perpetual futures are leveraged contracts on its price. The same coin can therefore show two different deltas. When perpetual CVD runs ahead while spot CVD stays flat, the move is being carried by contracts rather than by buying of the coin; when spot leads, the reverse. Neither reading predicts the next move, but knowing which market pushed helps you judge what kind of move you are looking at.
In AlertaChart the Cumulative Volume Delta pane follows the chart you are on: a perpetual chart shows that exchange's perpetual CVD, a spot chart its spot CVD. Agg. CVD lets you choose under Markets: Perpetuals (the default), Spot, Both, which sums the two, or Separate, which keeps them apart: one panel, two lines, and each line keeps its own cumulative count.
Agg. CVD: one coin across five exchanges
Agg. CVD adds up a coin's buying minus selling on Binance, Bybit, OKX, Coinbase and Hyperliquid. Before you read the line, check what went into it:
- The count in the header. A figure such as 4/5 venues shows how complete the total is: the second number counts the exchange markets the panel found for this coin, the first those that delivered data. With Both or Separate, spot markets get their own logos, marked S, so the count can reach nine (Hyperliquid takes part with its perpetual only).
- When the count is short, hover the logos. Each tooltip names the pair, says since when the exchange has data and, if it is not counted, why: "Off — click to include", "No data for this coin" or "Could not load". Clicking a logo with a red "!" retries it. Until the count is full, do not compare the line with a stretch, or a coin, counted with a different set.
- Joins. By default the line starts with the earliest exchange that has data; each later one is labelled where it is first counted, for example +BYBIT. The line does not jump there, only its pace changes, because more volume now enters the sum. Before its first data an exchange is left out, not counted as zero.
- Units. Amounts are coins; contracts listed with a multiplier or under another ticker are converted, so one 1000PEPE contract counts as 1,000 PEPE. USD (≈) multiplies each bar's delta by its price, so it is an estimate.
How to set up CVD in AlertaChart
- In the AlertaChart app, open a crypto chart, spot or perpetual, for example the BTC/USDT perpetual.
- Click Orderflow in the chart toolbar to open the Orderflow Toolbox (on a phone, it is the last entry of the Indicators list) and click Cumulative Volume Delta. A pane with that exchange's CVD candles opens under the chart; above zero means net buying since the count began.
- For the cross-exchange view, click Agg. CVD under Aggregated (all venues) in the same toolbox and pick the Markets you want right there.
- Press the gear on the Agg. CVD panel for Reset, Units, Start, Plot and the Venues switches.
- Add Open Interest from the toolbox if you want to read CVD against positioning.
Open the BTC/USDT perpetual chart in the app; then add CVD from the Orderflow Toolbox →Pro
The order-flow tools are part of the Pro and Elite plans (compare plans). Scripts can read the same series through request.security: BINANCE:BTCUSDT.P_CVD for the perpetual, BINANCE:BTCUSDT_CVD for spot, and the AGG: prefix for every exchange together, as listed in the AlertaScript order flow data guide.
Settings that matter
| Agg. CVD setting | Default | Options and effect |
|---|---|---|
| Markets | Perpetuals | Perpetuals, Spot, Both (summed) or Separate (perpetuals and spot as two separately counted lines). |
| Reset | Never (continuous) | Daily, Weekly (on Monday) or Monthly, in UTC. A daily reset answers "who has been more aggressive today?". |
| Units | Coin amount | Or USD (≈): the delta valued at each bar's price, an estimate. |
| Start | From the first venue with data | Or When every venue has data, which avoids joins at the cost of a later start. |
| Plot | Line | Or Candles. |
| Mark where a venue joins | On | Shows the +BYBIT-style marks. |
| Venues | All five on | Binance, Bybit, OKX, Coinbase, Hyperliquid. |
The single-exchange pane has no reset setting: its count starts near zero at the first bar of the history loaded for that timeframe.
Common mistakes
- Comparing CVD levels between timeframes or charts. The level depends on where the count starts, which differs with the history each timeframe loads and with the Reset setting; compare slopes.
- Reading one exchange's CVD as the whole market, or reading Agg. CVD without checking how many venues the header counts.
- Ignoring a join mark and taking the change in slope for a change in behaviour.
- Forgetting which market is shown. A perpetual chart and a spot chart of the same coin have different CVD panes.
- Treating the USD (≈) figure as exact.
- Trading every divergence. Most are noise; some last; the line alone cannot tell you which.
Method and limitations
The product statements here come from the AlertaChart Help Center and the app's code as of 5 October 2026; the aggressor conventions come from each exchange's API documentation. Keep these limits in mind:
- Venue coverage. Agg. CVD counts five exchanges. Trading on any other venue is not in the line, so "the market" here means those five.
- Different starts. Exchanges join on different dates; before a join, that exchange simply is not counted.
- Classification. CVD is only as reliable as the buy or sell label on each trade, and those labels come from the exchanges' own trade feeds.
- Gaps. If trades of a period are missing from a feed, that period's delta lacks them, and a running total carries the error forward.
- Where it works. The single-exchange pane works on the standard timeframes from 1 minute to 1 month (1, 5, 15 and 30 minutes, 1, 2, 4 and 12 hours, 1 day, 1 week, 1 month). Agg. CVD works on crypto spot and perpetual time charts, not on stocks, forex, CME futures, tick charts or range bars.
Related guides and pages
- Footprint chart guide: the delta of one candle, price row by price row.
- Order book heatmap guide: the resting orders that aggressive trades run into.
- Order flow in the Help Center: the full toolbox, including Agg. Open Interest and Agg. Funding.
- Live funding rates: funding by exchange, useful next to a CVD divergence.
- Order flow on the features page: the whole toolbox at a glance.
Sources
- Order flow: CVD, open interest, funding and liquidations — AlertaChart Help Center (accessed Oct 5, 2026)
- WebSocket Streams for Binance — Aggregate Trade Streams (m: is the buyer the market maker?) — Binance (accessed Oct 5, 2026)
- Bybit API v5 — WebSocket public Trade (S: side of taker) — Bybit (accessed Oct 5, 2026)
- OKX API v5 — WS Trades channel (side: trade side of taker) — OKX (accessed Oct 5, 2026)
- Exchange WebSocket Channels — match messages (side: the maker order side) — Coinbase (accessed Oct 5, 2026)
- Order flow data (order-flow tickers for request.security) — AlertaScript documentation (accessed Oct 5, 2026)
This guide is for education only and is not investment advice.
How this guide was made Drafted with AI from AlertaChart's Help Center and source code; product facts checked against the code and the Help Center; external facts from the cited primary sources.
Changes · Version 1.0
- · 1.0 — First version.