Chaikin Money Flow scores where each bar closed inside its own range, weights that by the bar’s volume, and sums the result over a lookback window, usually 20 or 21 periods. Marc Chaikin built it, and the output oscillates around zero: positive suggests accumulation, negative suggests distribution. On a scalping time frame it is a useful confirmation filter and a poor entry trigger, and the reason comes straight out of the formula.
Understanding that last sentence is most of the work. CMF is not measuring buying versus selling in any order flow sense. Nobody is tagging trades as buys or sells here. It is measuring how close to the top of its range each bar finished, weighted by how much volume traded in that bar. That is a reasonable proxy for pressure on daily charts and a much shakier one when your bars are sixty seconds long.
The formula step by step
| Step | Calculation | Range of the result |
|---|---|---|
| 1 | Multiplier = [(Close minus Low) minus (High minus Close)] / (High minus Low) | Negative 1 to positive 1 |
| 2 | Money Flow Volume = Multiplier x Volume | Bounded by the bar’s volume |
| 3 | CMF = N period sum of Money Flow Volume / N period sum of Volume | Negative 1 to positive 1, rarely beyond 0.5 |
A bar closing exactly at its high scores positive 1, at its low negative 1, and at the midpoint zero. Because step three divides by total volume, CMF is a weighted average and cannot run away the way an unbounded accumulation line can.
A worked example
Five bars with a 5 period CMF, so the arithmetic closes on the page. The default is 20 or 21, but the mechanics do not change with the window length.
| Bar | High | Low | Close | Volume | Multiplier | Money Flow Volume |
|---|---|---|---|---|---|---|
| 1 | 50.40 | 50.00 | 50.30 | 8,000 | 0.500 | 4,000 |
| 2 | 50.55 | 50.20 | 50.25 | 12,000 | negative 0.714 | negative 8,571 |
| 3 | 50.60 | 50.10 | 50.55 | 9,000 | 0.800 | 7,200 |
| 4 | 50.70 | 50.40 | 50.45 | 6,000 | negative 0.667 | negative 4,000 |
| 5 | 50.80 | 50.35 | 50.75 | 15,000 | 0.778 | 11,667 |
Summing the last column gives 10,296. Total volume is 50,000. CMF is 10,296 divided by 50,000, which is 0.21. That is a mildly positive reading: three of the five bars finished in the upper half of their ranges, and the two that did not carried less combined volume than bar 5 alone.
import pandas as pd
def cmf(df, period=20):
rng = (df["high"] - df["low"]).replace(0, pd.NA) # avoid divide by zero
mult = ((df["close"] - df["low"]) - (df["high"] - df["close"])) / rng
mfv = (mult.fillna(0) * df["volume"])
return mfv.rolling(period).sum() / df["volume"].rolling(period).sum()
df["cmf20"] = cmf(df)The gap blind spot
The multiplier looks only inside a single bar. It never references the previous close. A stock that gaps down 4 percent and then grinds up all day to close near its high will score close to positive 1 for that bar, even though every holder from yesterday is underwater.
On daily charts this is a known quirk you can work around. On intraday charts it becomes a real problem at the open, when the first bars of the session carry huge volume and are being scored purely on internal position while ignoring the overnight move that actually mattered. If you need gaps included in the measurement, the Money Flow Index uses typical price compared bar to bar and does account for them.
Why CMF is noisy on scalping time frames
Four things go wrong as you compress the bar interval.
Ranges get small relative to the spread. On a one minute bar with a range of three ticks, moving the close by one tick swings the multiplier from 0.33 to 1.00. You are measuring the bid ask bounce, not pressure.
Volume clusters at the open and close. The weighting means a handful of bars near 9:30 and 16:00 Eastern dominate a 20 period window, so CMF can look strongly positive because of one opening print that has nothing to do with the last fifteen minutes.
The window is short in clock time. A 20 period CMF on one minute bars covers twenty minutes. That is a sample far too small for a volume weighted average to stabilize, and the reading will swing between positive and negative several times an hour with no change in the underlying trend.
Zero line crosses become meaningless. Because of the three points above, a scalper watching for CMF to cross zero will see it cross dozens of times per session. Chaikin’s own convention of using buffer levels around positive 0.05 and negative 0.05 exists precisely to suppress that, and on fast charts even those buffers are not enough.
Practical filters for fast charts
If you are going to use CMF while scalping, these constraints make it behave.
| Filter | Setting | Reason |
|---|---|---|
| Bar interval | 5 minutes rather than 1 | Ranges wide enough that one tick does not dominate the multiplier |
| Lookback | 21 periods, left alone | Shorter windows swing wildly, longer ones stop responding |
| Session window | Skip the first 15 minutes | Opening volume distorts the weighted average for the rest of the window |
| Liquidity floor | Require a minimum average volume and a tight spread | Zero range bars and spread noise break the multiplier |
| Role in the setup | Confirmation only, never the trigger | CMF lags price by the length of its own window |
What the evidence supports
There is no peer reviewed evidence that a CMF threshold rule produces excess returns after costs, and for scalping the cost question is decisive rather than incidental. A strategy holding for minutes pays the spread and commission on every trade, so an edge that looks real on mid prices frequently disappears entirely once you fill at the offer.
The broader literature is instructive here. Sullivan, Timmermann and White re examined a large universe of technical rules with a data snooping correction in the Journal of Finance in 1999 and found that results significant in one sample did not persist afterward. Bajgrowicz and Scaillet reached a similar conclusion in the Journal of Financial Economics in 2012 using a false discovery rate approach, with transaction costs doing much of the damage. Park and Irwin’s survey in the Journal of Economic Surveys counted 95 modern studies, 56 positive, 20 negative and 19 mixed, and named selective reporting as the main reason to discount that split.
The SEC’s own investor publication Day Trading: Your Dollars at Risk is worth reading alongside any of this. Short holding periods amplify costs and losses in a way that indicator articles rarely mention.
Common problems and fixes
| Problem | Cause | Fix |
|---|---|---|
| CMF blanks out or shows infinity | A bar where high equals low | Treat the multiplier as zero for that bar. |
| Strongly positive while price falls | Gaps ignored by the multiplier | Cross check with an indicator that compares bar to bar prices. |
| Dozens of zero crosses per session | Bar interval too short for the window | Move to 5 minute bars and use the 0.05 buffer levels. |
| Reading stuck near an extreme all day | One huge opening bar dominates the volume weighting | Start the calculation after the opening range completes. |
Frequently asked questions
What is a good CMF setting for scalping?
Keep the standard 21 periods and move up to 5 minute bars rather than shortening the lookback. Cutting the window below about 14 makes every reading a function of the last few bars, which defeats the purpose of a volume weighted average and produces constant zero line crossings.
What does a CMF reading of 0.25 mean?
It means that across the lookback window, bars closed on average one quarter of the way toward the top of their ranges once weighted by volume. Sustained readings above roughly 0.05 are conventionally read as accumulation. Values beyond about 0.5 in either direction are uncommon outside of event driven sessions.
Is CMF the same as the Accumulation Distribution Line?
They share the same money flow multiplier, but the Accumulation Distribution Line is a running cumulative total with no window and no division by volume, so it trends indefinitely. CMF is bounded and windowed, which makes it comparable across instruments while the cumulative line is not.
Can CMF predict reversals?
No indicator predicts reversals. CMF can show that the closing location of recent bars has deteriorated while price is still making highs, which is a divergence and describes weakening participation. Divergences persist for long stretches and resolve without a reversal often enough that trading them alone is expensive.
Should I use CMF or a breadth indicator?
They answer different questions. CMF describes flow inside one instrument, while a breadth ratio such as the Arms Index describes the whole exchange. Scalpers trading index products often watch both, since a divergence between them is more informative than either reading alone.
The bottom line
CMF is a clean, bounded, volume weighted measure of where bars close inside their ranges. On daily and hourly charts that is genuinely useful context, and the formula is simple enough to verify by hand in a minute. On one minute charts it mostly measures the spread.
Use it as a filter rather than a trigger, move up to 5 minute bars, skip the open, and remember that it cannot see gaps at all. If you want an entry signal, take it from price and use CMF only to tell you which direction you are allowed to take that signal in. Trend context from MACD completes a reasonable three part picture.
