Debated1 min read
◆ The PatternThe momentum of accumulation and distribution, the MACD idea applied to volume flow
The Chaikin Oscillator — "MACD applied to A/D" by Marc Chaikin.
Chaikin Osc = EMA(3) of A/D Line − EMA(10) of A/D Line
It measures the momentum of the Accumulation/Distribution line.
Signals:
• Crosses above zero → positive money flow momentum (buy)
• Crosses below zero → negative money flow momentum (sell)
• Divergence from price → early warning of trend change
Best used as confirmation alongside price-based indicators
• Crosses above zero → positive money flow momentum (buy)
• Crosses below zero → negative money flow momentum (sell)
• Divergence from price → early warning of trend change
Best used as confirmation alongside price-based indicators
Worked example
EMA(3) minus EMA(10) of the accumulation/distribution line — MACD’s idea applied to volume flow. It peaked at +37,902 on day 7 with the rally, turned negative on day 10, and on day 15 is still −11,315 but rising: money flow has turned up before the oscillator has crossed zero.
The example data: 15 days, used in every indicator here
| Day | High | Low | Close | Volume |
|---|---|---|---|---|
| 1 | 101 | 99 | 100 | 50,000 |
| 2 | 103 | 100 | 102 | 62,000 |
| 3 | 103 | 100 | 101 | 48,000 |
| 4 | 105 | 101 | 104 | 70,000 |
| 5 | 108 | 104 | 107 | 85,000 |
| 6 | 108 | 105 | 106 | 60,000 |
| 7 | 110 | 106 | 109 | 90,000 |
| 8 | 110 | 107 | 108 | 72,000 |
| 9 | 108 | 104 | 105 | 80,000 |
| 10 | 105 | 102 | 103 | 66,000 |
| 11 | 105 | 102 | 104 | 55,000 |
| 12 | 104 | 101 | 102 | 75,000 |
| 13 | 102 | 98 | 99 | 95,000 |
| 14 | 102 | 99 | 101 | 64,000 |
| 15 | 105 | 101 | 104 | 71,000 |
Where it misleads
- It is a difference of two averages of a running total, so noise in the A/D line is amplified.
- It is measured in shares, so readings cannot be compared across stocks with different volume.
- It inherits the A/D line’s blindness to gaps.
In code
clv = ((df['close'] - df['low']) - (df['high'] - df['close'])) / (df['high'] - df['low']) ad = (clv * df['volume']).cumsum() df['chaikin'] = ad.ewm(span=3, adjust=False).mean() - ad.ewm(span=10, adjust=False).mean()
Assumes import numpy as np, import pandas as pd, and a DataFrame df with columns high, low, close and volume — the 15 days above.
Sources
- Technical Analysis from A to Z (2nd ed.), S. B. Achelis, McGraw-Hill, 2000
- L. Blume, D. Easley & M. O’Hara, “Market Statistics and Technical Analysis: The Role of Volume”, Journal of Finance 49(1), 1994 — why volume can carry information
Last reviewed October 2026 · How this site checks its content · Report a mistake
Pattern bridge: The difference between fast and slow A/D smoothing is a MACD-like divergence applied to volume flow. In ML, bias correction in Adam compares fast and slow estimates the same way.
Linked from 1