Volume · 100-400/mo

Money Flow Index Buy Sell Signals - TradingView Guide

Money Flow Index buy sell signals for TradingView. Volume-weighted RSI signals, overbought/oversold levels, and divergences with Pine Script code and ES data.

Money Flow Index Signal Interpretation

Quick-reference guide to 5 signal types you will see on the chart.

Signal TypeIndicator ConditionMarket MeaningReliability
Oversold (<20) Reversal → BuyMFI drops below 20 then crosses back above 20Volume-weighted selling pressure is exhausted. Institutions are stepping back. Most reliable when preceded by a downtrend, not a grind lower.4/5
Overbought (>80) Reversal → SellMFI rises above 80 then crosses back below 80Buying climax on heavy volume. Smart money may be distributing. Weaker in strong uptrends where MFI can stay above 80 for extended periods.3/5
Bullish Divergence → BuyPrice makes lower low, MFI makes higher lowPrice keeps dropping but volume-weighted buying pressure increases. This is the most reliable MFI signal. The volume component makes it more trustworthy than RSI divergence alone.5/5
Bearish Divergence → SellPrice makes higher high, MFI makes lower highPrice pushes higher but the money flow behind it is shrinking. Volume tells you the rally lacks conviction. Works best on daily and 4h timeframes.4/5
80/20 Failure Swing → ReversalMFI exits overbought/oversold zone, pulls back, then fails to re-enter itA failed attempt to push MFI back into extreme territory signals momentum exhaustion. The MFI rejection zone acts as a reversal point.4/5

Money Flow Index 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("Money Flow Index Buy Sell Signals", overlay=false)

len = input.int(14, "MFI Period")
ob = input.int(80, "Overbought Level")
os = input.int(20, "Oversold Level")
src = input.source(hlc3, "Source")

// MFI Calculation
typicalPrice = src
rawMoneyFlow = typicalPrice * volume

// Positive and negative money flow based on price direction
posMF = typicalPrice > typicalPrice[1] ? rawMoneyFlow : 0
negMF = typicalPrice < typicalPrice[1] ? rawMoneyFlow : 0

posMFSum = ta.sma(posMF, len)
negMFSum = ta.sma(negMF, len)

moneyRatio = negMFSum == 0 ? 100 : posMFSum / negMFSum
mfi = 100 - (100 / (1 + moneyRatio))

// MFI Line Color
mfiColor = mfi > ob ? color.new(#FF5252, 0) : mfi < os ? color.new(#4CAF50, 0) : color.new(#2962FF, 0)

// Oversold / Overbought signals
buySignal = ta.crossover(mfi, os)
sellSignal = ta.crossunder(mfi, ob)

// Bullish Divergence
bullDiv = low[2] > low and mfi[2] < mfi and mfi < os

// Bearish Divergence
bearDiv = high[2] < high and mfi[2] > mfi and mfi > ob

// Failure Swing
buyFailSwing = ta.crossover(mfi, os) and mfi[1] > os and mfi[2] < os
sellFailSwing = ta.crossunder(mfi, ob) and mfi[1] < ob and mfi[2] > ob

plot(mfi, "MFI", mfiColor, linewidth=2)
hline(ob, "Overbought 80", color=#FF5252, linestyle=hline.style_dashed)
hline(50, "Midline", color=#757575, linestyle=hline.style_dotted)
hline(os, "Oversold 20", color=#4CAF50, linestyle=hline.style_dashed)

plotshape(buySignal, "Buy", shape.triangleup, location.bottom, color=#4CAF50, size=size.small)
plotshape(sellSignal, "Sell", shape.triangledown, location.top, color=#FF5252, size=size.small)
plotshape(bullDiv, "Bull Div", shape.labelup, location.bottom, color=#00BCD4, size=size.small)
plotshape(bearDiv, "Bear Div", shape.labeldown, location.top, color=#FF9800, size=size.small)

alertcondition(buySignal, "MFI Oversold Buy", "MFI crossed above oversold (20)")
alertcondition(sellSignal, "MFI Overbought Sell", "MFI crossed below overbought (80)")
alertcondition(bullDiv, "MFI Bullish Divergence", "Bullish MFI divergence detected")
alertcondition(bearDiv, "MFI Bearish Divergence", "Bearish MFI divergence detected")
alertcondition(buyFailSwing, "MFI Bullish Failure Swing", "MFI bullish failure swing detected")
alertcondition(sellFailSwing, "MFI Bearish Failure Swing", "MFI bearish failure swing detected")

Recommended Parameters for Money Flow Index

Parameter settings tested across different market conditions and timeframes.

Feature comparison table: Default vs Description
ParameterDefaultDescription
MFI Period14Lookback period for the money flow calculation. Default 14 matches RSI convention. I use 21 for daily swing trading to reduce noise on ES futures. Day traders on NQ 5m charts can drop to 9 for faster signals.
SourceHLC3Price source for the typical price calculation. HLC3 (high+low+close/3) gives a balanced view. Using just close changes the signal frequency significantly in my tests.
Overbought Level80Upper threshold. MFI above 80 signals buying climax. In strong bull markets on SPY I raise this to 90 to avoid premature exits.
Oversold Level20Lower threshold. MFI below 20 signals selling exhaustion. RSI uses 30, but MFI stays in range longer due to volume weighting so 20 is more appropriate.

Money Flow Index + Pineify Invite-Only: Better Together

Money Flow Index alone gives you one signal type. Pineify invite-only indicator combines Money Flow Index with RSI divergences, MACD confirmation, and Supertrend filters in one overlay. Fewer charts, clearer signals.

Instead of switching between 5 different signals on separate charts, you get a single multi-confirmation setup.

See the Invite-Only Indicator

FAQ

Money Flow Index Signals FAQ

Stop juggling Money Flow Index with 4 other charts

Pineify combines Money Flow Index, RSI, MACD, and Supertrend into one invite-only indicator. One click setup.

Try Pineify Free