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 Type | Indicator Condition | Market Meaning | Reliability |
|---|---|---|---|
| Oversold (<20) Reversal → Buy | MFI drops below 20 then crosses back above 20 | Volume-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 → Sell | MFI rises above 80 then crosses back below 80 | Buying 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 → Buy | Price makes lower low, MFI makes higher low | Price 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 → Sell | Price makes higher high, MFI makes lower high | Price 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 → Reversal | MFI exits overbought/oversold zone, pulls back, then fails to re-enter it | A 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.
//@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.
| Parameter | Default | Description |
|---|---|---|
| MFI Period | 14 | Lookback 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. |
| Source | HLC3 | Price 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 Level | 80 | Upper threshold. MFI above 80 signals buying climax. In strong bull markets on SPY I raise this to 90 to avoid premature exits. |
| Oversold Level | 20 | Lower 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 IndicatorRelated Resources
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