Volume · 100-300/mo

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 TypeIndicator ConditionMarket MeaningReliability
Positive CMF (+0.05+) → AccumulationCMF stays above +0.05 over 20+ periods while price moves sideways or upBuying pressure dominates. Smart money is accumulating. Expect the uptrend to continue or accelerate.4/5
Negative CMF (-0.05-) → DistributionCMF stays below -0.05 over 20+ periods while price trades flat or declinesSelling pressure is in control. Large players distribute shares. Trend is weak or about to reverse down.4/5
Bullish Divergence → Trend Reversal UpPrice makes a lower low, CMF makes a higher lowPrice 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 DownPrice makes a higher high, CMF makes a lower highPrice reaches new highs but CMF weakens. Fewer dollars support the rally. Distribution is underway.4/5
CMF Cross Above Zero → BullishCMF crosses from negative to positive territoryMomentum shifts from selling to buying. Good entry point when confirmed by price breaking a resistance level.3/5
CMF Cross Below Zero → BearishCMF crosses from positive to negative territoryBuying pressure fades and selling takes over. Best used as an exit signal, not a short entry.3/5
Zero Line Rejection → ContinuationCMF approaches zero line from above or below and bounces back without crossingThe 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.

Pine Script v5
//@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.

Feature comparison table: Default vs Description
ParameterDefaultDescription
CMF Period21Number 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 Level0.05Threshold 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.05Threshold 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 DivergencesTrueToggle divergence markers on and off. Keep it on for swing trades, off for high-frequency scalping where divergences are too slow to develop.
Divergence Lookback20Number 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 Indicator

FAQ

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