Chaikin Money Flow Trading Signals — TradingView Guide
Chaikin Money Flow signals for TradingView. Accumulation, distribution, and divergence signals with Pine Script code and real examples from SPY and TSLA.
Chaikin Money Flow Signal Interpretation
Quick-reference guide to 7 signal types you will see on the chart.
| Signal Type | Indicator Condition | Market Meaning | Reliability |
|---|---|---|---|
| Positive CMF (+0.05+) → Accumulation | CMF stays above +0.05 over 20+ periods while price moves sideways or up | Buying pressure dominates. Smart money is accumulating. Expect the uptrend to continue or accelerate. | 4/5 |
| Negative CMF (-0.05-) → Distribution | CMF stays below -0.05 over 20+ periods while price trades flat or declines | Selling pressure is in control. Large players distribute shares. Trend is weak or about to reverse down. | 4/5 |
| Bullish Divergence → Trend Reversal Up | Price makes a lower low, CMF makes a higher low | Price drops further but money flow improves. The selling is not confirmed by volume. Reversal to the upside is likely. | 5/5 |
| Bearish Divergence → Trend Reversal Down | Price makes a higher high, CMF makes a lower high | Price reaches new highs but CMF weakens. Fewer dollars support the rally. Distribution is underway. | 4/5 |
| CMF Cross Above Zero → Bullish | CMF crosses from negative to positive territory | Momentum shifts from selling to buying. Good entry point when confirmed by price breaking a resistance level. | 3/5 |
| CMF Cross Below Zero → Bearish | CMF crosses from positive to negative territory | Buying pressure fades and selling takes over. Best used as an exit signal, not a short entry. | 3/5 |
| Zero Line Rejection → Continuation | CMF approaches zero line from above or below and bounces back without crossing | The dominant money flow direction stays intact. A rejection off zero in an uptrend confirms strong accumulation. | 4/5 |
Chaikin Money Flow Pine Script Signal Code
Ready-to-use Pine Script code for generating buy/sell signals. Copy and paste into your TradingView Pine Editor.
//@version=5
indicator("Chaikin Money Flow Signals", overlay=false)
cmfPeriod = input.int(21, "CMF Period")
obLevel = input.float(0.05, "Overbought Level")
osLevel = input.float(-0.05, "Oversold Level")
showDivergences = input.bool(true, "Show Divergences")
divLookback = input.int(20, "Divergence Lookback")
mfMultiplier = ((close - low) - (high - close)) / (high - low)
mfVolume = mfMultiplier * volume
cmf = math.sum(mfVolume, cmfPeriod) / math.sum(volume, cmfPeriod)
// Divergence detection
highestCMF = ta.highest(cmf, divLookback)
lowestCMF = ta.lowest(cmf, divLookback)
highestHigh = ta.highest(high, divLookback)
lowestLow = ta.lowest(low, divLookback)
bullDiv = low == lowestLow and cmf > lowestCMF and cmf > 0
bearDiv = high == highestHigh and cmf < highestCMF and cmf < 0
// Zero cross signals
crossAboveZero = ta.cross(cmf, 0) and cmf > 0
crossBelowZero = ta.cross(cmf, 0) and cmf < 0
// Accumulation / distribution zones
accumulation = cmf > obLevel
distribution = cmf < osLevel
plot(cmf, "CMF", color=cmf > 0 ? #26A69A : #EF5350, linewidth=2)
hline(obLevel, "Overbought", color=#66BB6A, linestyle=hline.style_dashed)
hline(0, "Zero Line", color=#757575, linestyle=hline.style_dotted)
hline(osLevel, "Oversold", color=#EF5350, linestyle=hline.style_dashed)
plotshape(crossAboveZero, "Cross Above Zero", shape.triangleup, location.bottom, color=#26A69A, size=size.small)
plotshape(crossBelowZero, "Cross Below Zero", shape.triangledown, location.top, color=#EF5350, size=size.small)
plotshape(bullDiv and showDivergences, "Bull Div", shape.labelup, location.bottom, color=#1565C0, size=size.small)
plotshape(bearDiv and showDivergences, "Bear Div", shape.labeldown, location.top, color=#E65100, size=size.small)
bgcolor(accumulation, color=color.new(#26A69A, 90))
bgcolor(distribution, color=color.new(#EF5350, 90))
alertcondition(crossAboveZero, "CMF Cross Above Zero", "CMF crossed above the zero line")
alertcondition(crossBelowZero, "CMF Cross Below Zero", "CMF crossed below the zero line")
alertcondition(bullDiv, "CMF Bullish Divergence", "Bullish CMF divergence detected")
alertcondition(bearDiv, "CMF Bearish Divergence", "Bearish CMF divergence detected")
alertcondition(cmf > obLevel, "CMF Accumulation", "CMF is in accumulation zone above " + str.tostring(obLevel))Recommended Parameters for Chaikin Money Flow
Parameter settings tested across different market conditions and timeframes.
| Parameter | Default | Description |
|---|---|---|
| CMF Period | 21 | Number of bars used in the CMF calculation. The default 21 covers about one trading month. Shorter values (13) react faster for day trading. Longer values (34) filter noise better on weekly charts. |
| Overbought Level | 0.05 | Threshold for strong accumulation. Tightening to 0.10 reduces signals to the strongest readings only. I use 0.05 on SPY and 0.08 on smaller caps where volume spikes are sharper. |
| Oversold Level | -0.05 | Threshold for strong distribution. Values below -0.10 signal heavy selling for NQ and ES intraday work. Adjust based on the instrument volatility and the timeframe. |
| Show Divergences | True | Toggle divergence markers on and off. Keep it on for swing trades, off for high-frequency scalping where divergences are too slow to develop. |
| Divergence Lookback | 20 | Number of bars to search for divergence extremes. A lookback of 20 on hourly charts catches multi-day divergences for TSLA and AAPL swing trades. |
Chaikin Money Flow + Pineify Invite-Only: Better Together
Chaikin Money Flow alone gives you one signal type. Pineify invite-only indicator combines Chaikin Money Flow with RSI divergences, MACD confirmation, and Supertrend filters in one overlay. Fewer charts, clearer signals.
Instead of switching between 7 different signals on separate charts, you get a single multi-confirmation setup.
See the Invite-Only IndicatorFAQ
Chaikin Money Flow Signals FAQ
Stop juggling Chaikin Money Flow with 4 other charts
Pineify combines Chaikin Money Flow, RSI, MACD, and Supertrend into one invite-only indicator. One click setup.
Try Pineify Free