Module 4 · Lesson 10 of 12 · Volume and indicators · About 5 minutes
OBV, Accumulation/Distribution and Relative Volume
On this page
Before you read: Trading Volume Explained: Volume vs Open Interest
What you will learn
- How on-balance volume and the accumulation/distribution line are built.
- How relative volume compares today’s volume with a baseline.
- Why these measures depend on choices and cannot show who was trading.
How is on-balance volume built?
If you added a day’s volume when price closed up and subtracted it when price closed down, what would the running total show?
On-balance volume (OBV) is a running total. On a day that closes higher than the day before, that day’s whole volume is added. On a day that closes lower, it is subtracted. Unchanged days add nothing. The level of OBV depends on where the count starts, so readers look at its direction and its swings rather than the number.
The rule is blunt: a day that closes one cent higher adds all of its volume, the same as a day that rises sharply.
Try it on a chart
- OBV is added below the price. Compare its direction with price over the same weeks.
- Find a stretch where the two move differently.
Charts and quotes are TradingView's data, not ours, and may be delayed.
How is accumulation/distribution built?
Where in the day’s range did the close land?
For a completed bar with H>L, define close-location value CLV=[(C−L)−(H−C)]/(H−L). Weighted “money-flow volume”=CLV×V; ADL=previous ADL+that amount. The historical label “money flow” does not make these net dollars or actual aggressor flow.
Declared zero-range convention: if H=L, set CLV=0 and add 0. This prevents division by zero in this exercise; check the actual platform implementation rather than assuming every platform does the same. Missing volume or malformed H/L data is not a valid zero-volume observation.
One shared fictional dataset, prices in points, V in contracts, complete bars A/B/C. Before A: previous close 100, OBV 0, ADL 0. There is no additional hidden bar in the calculation.
| Bar | O | H | L | C | V | OBV change | OBV total | CLV | CLV×V | ADL total |
|---|---|---|---|---|---|---|---|---|---|---|
| A | 101 | 104 | 100 | 101 | 1000 | +1000 | 1000 | −0.5 | −500 | −500 |
| B | 100 | 102 | 98 | 100 | 800 | −800 | 200 | 0 | 0 | −500 |
| C | 100 | 100 | 100 | 100 | 500 | 0 | 200 | 0 by convention | 0 | −500 |
A: close 101 exceeds previous 100, so OBV adds all 1000. But CLV=[(101−100)−(104−101)]/(104−100)=(1−3)/4=−0.5, so ADL adds −500. B: close 100<101 subtracts 800 from OBV, leaving 200; CLV=(2−2)/4=0, so ADL stays −500. C: close unchanged adds 0 to OBV; H=L invokes our CLV 0 convention, not 0/0, so both totals remain.
The arbitrary initial cumulative base shifts levels without changing these increments. The three columns use the same observations but answer different calculations.
What is relative volume?
Is 2 million shares a lot? Compared with what?
RVOL=current volume/comparable historical baseline. Declare whether volumes are single bars or cumulative session windows, which clock/session is used and whether bars are complete.
Separate fictional cumulative-window example: use completed 09:00–10:00 CST windows on three prior sessions, same instrument/session definition: 800, 1000, 1200 contracts. Baseline mean=(800+1000+1200)/3=1000 contracts. Today’s completed matching window has 2000 contracts. RVOL=2000/1000=2.0, dimensionless.
Comparing today’s first hour 2000 with a full-session baseline 5000 gives 0.4, but those unequal windows do not answer this same-time question. The 0.4 ratio is arithmetically valid and conceptually mismatched. Do not use a still-forming partial bar as if it were a completed matched window. A zero denominator makes the ratio undefined; missing baseline observations are not zero, and exclusions/imputations must be disclosed. This example does not claim three sessions are an adequate research sample or reproduce every platform’s default settings.
Volume measures diagram
Read the diagram step by step
- Authored fiction. Education only; not observations or a forecast.
- Exactly three completed bars A/B/C
- Before A: prior close 100, OBV 0, ADL 0. That is an initial state, NOT an extra hidden bar. Prices: points; raw V: contracts. C uses explicit H=L → CLV 0 convention.
- OHLC ranges · prices in points
- High/low wicks; left open / right close ticks
- A · OHLCV
- O101 H104 L100 C101; V1000 contracts. OBV change +1000, total 1000; CLV −0.5; ADL change −500, total −500.
- B · OHLCV
- O100 H102 L98 C100; V800 contracts. OBV change −800, total 200; CLV 0; ADL change 0, total −500.
- C · OHLCV
- O100 H100 L100 C100; V500 contracts. OBV change 0, total 200; H=L invokes CLV 0; ADL change 0, total −500.
- OBV uses close-to-close sign; ADL uses within-bar close location. These are different calculations, not trader identities, net dollars or a forecast.
- Cumulative volume units, NOT dollars
- Same instrument/session; completed 09:00–10:00 CST windows. Prior sessions 800/1000/1200 contracts; mean 1000. Today’s matching window 2000; RVOL=2000/1000=2.0, dimensionless.
- Completed matching windows only; no still-forming bar or full-session substitution.
- These three fictional OHLCV bars reproduce all OBV and ADL arithmetic. RVOL is a separate completed-window comparison; zero-range CLV 0 is an explicit exercise convention. Education only.
Illustrative diagram constructed for teaching. Not real market data.
These three fictional OHLCV bars reproduce all OBV and ADL arithmetic. RVOL is a separate completed-window comparison; zero-range CLV 0 is an explicit exercise convention.
How do these compare with price?
If price rises while OBV falls, what does that describe?
Bar A deliberately has an up close relative to the prior bar but a close in the lower half of its own range. OBV rises 1000 while ADL falls 500. Neither is arithmetically contradictory: OBV uses close-to-close sign, ADL uses within-bar location. B’s down close can leave ADL unchanged because it closes exactly at its own midpoint.
A gap between periods can affect OBV’s close comparison without being directly represented by ADL’s within-bar weighting. None of OBV, ADL or RVOL identifies the people trading, proves net cash entering the market, classifies every aggressor or forecasts the next move. See Trading Volume Explained: Volume vs Open Interest for what volume counts, and Order Flow Basics: DOM, Time and Sales, Delta for the separate order-flow concepts.
What this does not tell you about volume measures
- Who bought or sold. The names suggest intent that the math does not measure.
- Whether a gap between price and a volume line will close.
- Which baseline or start point is right.
- Nothing here suggests buying, selling or holding based on any volume reading.
Method in Practice: is today worth trading?
Fictional example. John, Harbor Index futures, the prices, times, costs and results are all invented for teaching. This shows how a written plan can be built and tested. It is not a recommendation, and nothing here says how often this idea works.
Try it on a real chart. Look at the chart in this lesson, then test this idea yourself on past sessions with bar replay. Keep your own count, including the days with no trade.
The idea. Relative volume compares activity with a baseline for the same time of day (this lesson). John uses it as a gate on his value re-entry plan from Volume Profile Explained: POC, Value Area, HVN, LVN. If the first hour is much quieter than usual, like the day after a holiday, the plan doesn't run at all.
John's plan
- Setup
- The Volume Profile Explained: POC, Value Area, HVN, LVN lesson's plan (prior value area 101.20 / 101.80 / 102.40, open below value)
- Gate
- first-hour relative volume of at least 0.7 (08:30–09:30, against the same window over 20 sessions)
- Enter if
- gate passes, and two 30-minute periods in a row close above 101.20. Buy.
- Wrong if
- a 30-minute period closes back below 101.20
- Manage
- take half at 101.80, the rest at 102.40 or by 14:30. Risk: $150 maximum, costs included
Three outcomes
-
Worked: gate passed (1.1), price came back into value → +$130
-
Failed: gate passed (0.9), then price fell back out → −$76, inside the limit
-
No trade: first hour at 0.5, so the gate was shut → $0
Show the full replays
| Item | Plan |
|---|---|
| Gate | Relative volume = first-hour volume (08:30–09:30) ÷ average first-hour volume over the prior 20 sessions. Plan runs only at 0.7 or more |
| Entry condition | Gate passes, and two 30-minute periods in a row close above 101.20. Buy 2 at market after the second close |
| Wrong if | A 30-minute period closes below 101.20. Exit at market after that close |
| Management | Take profit on half at 101.80 (limit) and move the exit for the rest to the entry price (stop). Rest at 102.40 (limit). Time limit 14:30 CT |
| Risk cap and size | $150. Exiting just under 101.20 is planned to cost about $50 per contract, so 2 contracts |
| Not trading if | Gate shut, a scheduled major release within the hour, the open more than 1 point below 101.20, or no setup by 12:00 CT |
Replay A: worked
| Time (CT) | What happened | John |
|---|---|---|
| 09:30 | First-hour relative volume 1.1 | Gate passes |
| 09:30–10:30 | Closes 101.28, then 101.35 | Two in a row: buys 2 at market, filled 101.40 |
| 10:30–11:50 | Trades 101.80 at 11:50 | Sells 1 at 101.80 (limit). Exit for the other moves to 101.40 |
| 11:50–13:30 | Never back to 101.40, trades 102.40 at 13:30 | Sells the last 1 at 102.40 (limit) |
Result after costs: +0.40 point = +$40, +1.00 point = +$100, commissions −$10. Net +$130.
Replay B: failed
| Time (CT) | What happened | John |
|---|---|---|
| 09:30 | First-hour relative volume 0.9 | Gate passes |
| 09:30–10:30 | Closes 101.25, then 101.28 | Buys 2 at market, filled 101.33 |
| 10:30–11:00 | Closes 101.05 | Wrong-if met: sells 2 at market, filled 101.00 |
Result after costs: 2 × −0.33 point = −$66, commissions −$10. Net −$76. Journal: "A normal day by volume, and the plan still lost. The gate decides which days run, not how they end."
Replay C: no trade
| Time (CT) | What happened | John |
|---|---|---|
| 09:30 | Day after a holiday. First-hour relative volume 0.5 | Gate shut: plan doesn't run |
| 09:30–15:00 | Price crosses 101.20 four times on thin trade | Watches only |
Result: $0. Journal: "Thin day, plan off. Four crossings of my line, and none of them counted."
Test it yourself
- Use the same time window for today and the baseline. This lesson shows how unequal windows mislead.
- Replay the plan with and without the gate, and count the days the gate removed.
- Try gates of 0.6 and 0.8. A gate that only helps at one exact number is fragile.
Where it breaks
- Volume lines don't show who traded, and names like "accumulation" suggest intent the math doesn't measure.
- A normal-volume day can still fail (the failed replay).
- Different baselines give different readings.
Calculators: position sizerisk/rewardexpectancy
Reflection question: Does your plan say which days it shouldn't run at all?
Check yourself
- Why does A add 1000 to OBV but subtract 500 from ADL? Hint: each uses a different part of the bar.
- Why is CLV at C not calculated as 0/0?
- Recompute the matching-window RVOL and explain the 0.4 counterexample.
- An economic-release session has observed volume above its matched-time baseline. Why might RVOL be high, and what does the release label fail to prove? Hint: compare with what is usual for that time of day.
Reflect on your own process
- If you use a volume line in your process, have you written down its exact formula and how it treats unchanged or zero-range bars?
- What baseline window does your journal use for relative volume, and is it the same time of day?
- How do your notes keep words like accumulation from implying who was trading?
- Does your plan say which days it shouldn't run at all?