You read Chaikin Money Flow by watching where the line sits relative to zero and how that compares with price: sustained readings above zero mean most of the recent volume arrived on bars that closed near their highs (buying pressure), sustained readings below zero mean volume arrived on bars that closed near their lows (selling pressure). The chaikin money flow indicator is a volume weighted oscillator, so the useful signals are persistence, divergence from price, and crosses of a small threshold around zero, not the exact value on any single bar.
Marc Chaikin built the indicator on a simple idea: a bar that closes near its high on heavy volume shows buyers in control, and a bar that closes near its low on heavy volume shows sellers in control. CMF turns that into a rolling ratio you can chart under price. This guide covers the formula, the default settings, how to read the zero line and thresholds, how to spot divergences, how to combine CMF with price action, and where the indicator breaks down.
The CMF formula
CMF is built in three steps, as documented in the StockCharts ChartSchool entry on Chaikin Money Flow.
1. Money Flow Multiplier = ((Close - Low) - (High - Close)) / (High - Low)
2. Money Flow Volume = Money Flow Multiplier * Volume
3. CMF (N periods) = Sum(Money Flow Volume, N) / Sum(Volume, N)The multiplier ranges from plus 1 (close exactly at the high) to minus 1 (close exactly at the low). A close in the middle of the range gives zero, regardless of volume. Multiplying by volume weights each bar by how much trading actually happened, and the final division by total volume normalizes the result so a high volume stock and a low volume stock produce comparable readings.
A quick Python implementation with pandas makes the mechanics explicit:
import pandas as pd
def cmf(df: pd.DataFrame, n: int = 20) -> pd.Series:
hl = (df["High"] - df["Low"]).replace(0, float("nan"))
mfm = ((df["Close"] - df["Low"]) - (df["High"] - df["Close"])) / hl
mfv = mfm.fillna(0) * df["Volume"]
return mfv.rolling(n).sum() / df["Volume"].rolling(n).sum()
df["CMF20"] = cmf(df, 20)The replace on the high minus low term avoids a divide by zero on bars where high equals low; most platforms treat that bar’s multiplier as zero, which the code above does too.
20 or 21 periods?
Chaikin’s original work used 21 days, roughly one trading month. StockCharts and TradingView default to 20. The difference in output is negligible; what matters is that the window is long enough to smooth single day spikes and short enough to respond within a few weeks. Shorter windows (10 to 14) make CMF twitchy and useful mostly to intraday and swing traders; longer windows (50 or more) turn it into a slow trend confirmation tool.
| Setting | Typical use | Tradeoff |
|---|---|---|
| 10 to 14 periods | Intraday and short swing trades | Fast but frequent zero line whipsaws |
| 20 or 21 periods (default) | Daily charts, swing and position trades | Balanced responsiveness and smoothing |
| 50 or more periods | Trend confirmation, weekly charts | Lags turns by weeks |
Reading the zero line
The zero line is the center of the indicator. When CMF is above zero, the 20 period sum of money flow volume is positive, which means bars closing in the upper half of their ranges carried more volume than bars closing in the lower half. When CMF is below zero, the reverse is true.
What you are looking for is persistence. A single bar above zero says nothing. CMF holding above zero for weeks during an uptrend confirms that buyers keep showing up on strength, which is the healthy version of a rally. CMF holding below zero during an uptrend is a warning: price is rising but the heavy volume days are closing weak, which often means the advance is being sold into.
Magnitude matters less than persistence. Readings rarely approach plus or minus 1; values beyond plus or minus 0.20 to 0.25 indicate strong pressure, and anything between minus 0.05 and plus 0.05 is effectively neutral.
Using a threshold instead of a zero cross
Because CMF spends a lot of time hovering near zero in choppy markets, many traders require a cross above plus 0.05 for a bullish signal and a cross below minus 0.05 for a bearish one. This filters out the flicker at the cost of slightly later entries. StockCharts explicitly recommends this approach to reduce whipsaws. On volatile names you can widen the band to plus or minus 0.10.
Divergences
Divergence is the most talked about CMF signal and the one most often misread. A bearish divergence occurs when price makes a higher high while CMF makes a lower high (or fails to get above zero at all). It says the second push up was made on weaker buying pressure. A bullish divergence occurs when price makes a lower low while CMF makes a higher low, usually staying closer to zero or even crossing above it.
Two cautions. First, a bullish divergence means less selling pressure, not necessarily buying pressure. If CMF is still negative on the second low, the sellers are tiring but the buyers have not arrived, and you want to see CMF actually cross above zero (or your threshold) before treating it as confirmation. Second, divergences can persist for a long time in strong trends. A stock in a powerful uptrend can print bearish divergences for months while continuing higher. Treat divergence as a reason to tighten risk management or look for a price trigger, not as a reason to fade the trend on its own.
Combining CMF with price action
CMF works best as a filter on a price based setup:
- Breakouts. When price breaks a resistance level, check that CMF is positive and ideally rising. A breakout with CMF below zero is far more likely to fail, because the volume that drove the move was closing weak.
- Pullbacks in a trend. In an uptrend, a pullback where CMF dips but stays above zero (or above minus 0.05) suggests the dip is being bought. A pullback where CMF collapses well below zero suggests distribution and a possible trend change.
- Support and resistance tests. A test of support with CMF turning up from a negative extreme is a classic reversal setup; combine it with a reversal candlestick and a clear stop below the low. Our guide to interpreting candlestick patterns covers the price side of that pairing.
CMF also pairs naturally with other volume tools. On Balance Volume is cumulative rather than windowed, so it tracks the long running trend of volume while CMF tracks recent pressure; we discuss the OBV side in how to use On Balance Volume for scalping. For pure momentum, a bounded oscillator like Williams %R (see how Williams %R is calculated) or the Elder Ray Index, covered in our piece on Elder Ray in day trading, measures something different from CMF, which is why they complement it rather than duplicate it.
| CMF reading | Price context | Interpretation |
|---|---|---|
| Above +0.05 and rising | Breakout or uptrend | Confirmed buying pressure |
| Above zero but falling | New price high | Possible bearish divergence, tighten stops |
| Below minus 0.05 and falling | Breakdown or downtrend | Confirmed selling pressure |
| Below zero but rising | New price low | Selling exhausting, wait for zero cross |
| Between minus 0.05 and +0.05 | Any | Neutral, no signal |
Limitations of Chaikin Money Flow
CMF has a structural blind spot: it only looks at where the close sits inside the bar’s own range. It ignores the change from the previous close. A stock that gaps up 5 percent and then drifts to close near the low of the day gets a negative multiplier for that bar even though the price rose sharply. After a series of gaps, CMF can disconnect from what price is obviously doing. Cross check with an indicator that uses close to close changes, such as OBV, when a chart is gappy.
It also treats all volume as equally informative. Index rebalancing days, options expiration and earnings sessions produce huge volume unrelated to accumulation or distribution, and one such bar can swing a 20 period CMF for weeks.
Finally, the evidence that CMF adds predictive value is thin. Published academic work on volume based technical indicators is mixed at best, and much of what circulates online is anecdote or curve fit backtests. Chaikin himself positioned the indicator as one input into a broader model, not a system. Treat it that way.
Troubleshooting common CMF problems
CMF looks flat or stuck near zero
Usually the stock is thinly traded or the period is too long for the timeframe. Check that the volume data is actually populated (some free data feeds omit volume for indices and forex pairs, which makes CMF meaningless), and try a shorter window.
CMF spikes on a single bar and stays there
One enormous volume day is dominating the window. Look for an earnings release, index inclusion, or a block trade on that date. The spike will roll off exactly N bars later, so note the date rather than reading the plateau as sustained pressure.
Different platforms show different values
Check the period (20 vs 21), whether the platform uses extended hours volume, and how it handles bars where high equals low. Small differences are normal; large ones usually mean a different volume source.
CMF and price disagree constantly
On a chart with frequent gaps, that is the gap quirk described above. Switch to a longer timeframe (weekly bars absorb daily gaps) or use a close to close volume indicator alongside it.
Frequently asked questions
What is a good CMF value?
There is no universal number. Readings above plus 0.20 signal strong buying pressure and readings below minus 0.20 signal strong selling pressure, while anything between minus 0.05 and plus 0.05 is neutral. The more useful question is whether CMF has stayed on one side of zero for several weeks and whether it agrees with the direction of price.
Is Chaikin Money Flow the same as the Chaikin Oscillator?
No. Both are built from the same money flow multiplier, but CMF is a windowed ratio of money flow volume to total volume, while the Chaikin Oscillator is the difference between a 3 day and a 10 day exponential moving average of the cumulative Accumulation Distribution Line. CMF is bounded; the oscillator is not.
Does CMF work on intraday charts?
It can, with a shorter period and the understanding that intraday volume is lumpy around the open and close. Many intraday traders use 10 to 14 bars and widen the neutral band to plus or minus 0.10. It works poorly on instruments without reliable volume, such as spot forex.
Should I buy when CMF crosses above zero?
Not on its own. A zero cross tells you recent volume is now weighted toward strong closes, which is supportive, but it says nothing about trend, support or risk. Use the cross (or a plus 0.05 cross) to confirm a price based entry such as a breakout or a bounce from support, and define your stop from the chart.
What period does Marc Chaikin recommend?
His original work used 21 periods, about one trading month of daily bars. Most charting platforms default to 20, and the two produce nearly identical lines. Choose the window based on your holding period rather than tradition.
The bottom line
Chaikin Money Flow compresses a month of volume and closing location into one line. Read it in zones: above plus 0.05 is accumulation, below minus 0.05 is distribution, and the middle is noise. Persistence on one side of zero and agreement with price are the signals worth acting on; a single cross or a lone divergence is not.
Use it as a confirmation layer over a price based plan, watch out for gaps and one off volume events, and remember that the evidence behind any single indicator is weak. If CMF earns a place on your chart, it will be because it kept you out of breakouts that lacked volume support, not because it called tops and bottoms by itself.

