OBV
- Price
- Volume
20-candle signal line
- OBV
- Signal line
Volume added up by price direction. The On-Balance Volume line adds each candle’s volume when the price rose and subtracts it when it fell. When it rises, the volume comes mainly on rising prices; when it falls, on falling ones. The height of the OBV depends on the candle where counting started, so on its own it means nothing. For alerts use its direction or its crossing with the signal line, its average over the last candles, not fixed thresholds. Example: “OBV crosses above OBV signal 20” fires when more volume comes on rising prices again, sometimes before the price breaks out.
What it looks like
Section titled “What it looks like”- Price (close of each candle)
- OBV
- Signal line, average of the last 20
- crosses above the signal line
Settings
Section titled “Settings”The settings appear on the right under “Properties” once you click the node on the board. Below each field you find the same explanation as here.
Signal line
Section titled “Signal line”How many candles the signal line averages the OBV over. 20 is usual. With fewer candles the OBV crosses its signal line more often, with more less often but on clearer shifts.
Example
Section titled “Example”Notifies you when the OBV crosses above its signal line, so more volume comes on rising prices again.
How to connect the nodes:
- Candle (Price) → OBV (Price)
- Candle (Volume) → OBV (Volume)
- OBV (OBV) → Compare A/B (A)
- OBV (Signal line) → Compare A/B (B)
- Compare A/B (true/false) → Push (Trigger)
On the board it reads: 20-candle signal line
Chain as JSON
To try it, copy it and paste it in the editor under “Import”. Importing creates a new chain.
{ "name": "Example: OBV", "version": 1, "nodes": [ { "id": "c1", "type": "core.candle", "position": { "x": 40, "y": 40 }, "settings": { "pair": "BTC/USDT", "timeframe": "1h" } }, { "id": "o1", "type": "core.obv", "position": { "x": 260, "y": 40 }, "settings": {} }, { "id": "k1", "type": "core.compare-ab", "position": { "x": 480, "y": 40 }, "settings": { "operator": "crossesAbove" } }, { "id": "p1", "type": "core.push", "position": { "x": 700, "y": 40 }, "settings": {} } ], "edges": [ { "from": "c1.close", "to": "o1.close" }, { "from": "c1.volume", "to": "o1.volume" }, { "from": "o1.out", "to": "k1.a" }, { "from": "o1.average", "to": "k1.b" }, { "from": "k1.out", "to": "p1.in" } ]}Inputs and outputs
Section titled “Inputs and outputs”Only matching types connect: number series to number series (round pin), signal to signal (square), message to message (diamond).
| Direction | Pin | Type | Note |
|---|---|---|---|
| Input | Price | Number series | required |
| Input | Volume | Number series | required |
| Output | OBV | Number series | – |
| Output | Signal line | Number series | – |
Good to know
Section titled “Good to know”- In messages the values are called “OBV”, “OBV signal 20”.
- Warm-up with the default settings: 21 candles (this many extra candles are loaded by the replay before the value is reliable).
- Search also finds it under: obv, on-balance volume, volume, accumulation, buying pressure, divergence.
Technical details
Section titled “Technical details”Running sum of the sign of the change in the close times volume, the first candle is 0, signal line as its SMA; the same formula as ta.obv in TradingView.
- Type in the chain:
core.obv· Version 1.0.0 · Category keyind - Settings in the chain:
length(Signal line) - Pins in the chain: Input
close,volume· Outputout,average - Reference tests in the manifest: 1 (with fixed price data: 500 candles of 1h)
- How a node is built
Version 2026.10.21.23 · Changelog