The Money Flow Index is a volume-weighted RSI. It measures both the direction and the force of money flowing into and out of an instrument — rejecting price moves that lack volume support. A price spike to overbought on RSI without volume behind it is ignored by MFI. That selectivity is the edge.
Section 1: Core Mechanics
MFI takes the typical price of each bar, multiplies it by volume (producing "money flow"), then sorts those bars into positive and negative buckets. The ratio of positive to negative money flow is converted to a 0–100 oscillator using the same mathematical structure as RSI.
What Is MFI?
Developed by Gene Quong and Avrum Soudack, MFI adds the missing dimension to RSI: volume. RSI tells you a stock rallied strongly over 14 days. MFI tells you whether that rally was driven by genuine buying power or thin-air price movement. MFI above 80 on heavy volume = confirmed overbought. MFI above 80 on low volume = potentially unreliable signal.
Formula
The full calculation chain:
Step 1 — Typical Price (TP):
Step 2 — Raw Money Flow (RMF):
Step 3 — Classify each bar:
- Positive Money Flow:
- Negative Money Flow:
- Neutral (no change): excluded from calculation
Step 4 — Sum over N periods:
Step 5 — Money Ratio:
Step 6 — MFI:
Inputs
- High, Low, Close: Used to calculate Typical Price for each bar
- Volume: Weights each bar's money flow contribution
- Period (N): Default 14 bars
Parameters
| Parameter | Default | Range | Impact |
|---|---|---|---|
| Period (N) | 14 | 7–25 | Shorter = more sensitive, more signals; Longer = fewer signals, more confirmation |
| Overbought level | 80 | 75–90 | Higher threshold = stricter, fewer false overbought readings |
| Oversold level | 20 | 10–25 | Lower threshold = stricter, fewer false oversold readings |
Output Range
MFI always falls between 0 and 100:
- Above 80: Overbought — heavy volume at high prices
- Below 20: Oversold — heavy volume at low prices
- 40–60: Neutral zone — no strong directional bias
Visual Behavior
MFI plots as a line oscillator in a separate pane. It moves between 0 and 100. Overbought (80+) and oversold (20−) zones are marked by horizontal lines. The indicator oscillates around the midpoint of 50.
Section 2: Interpretation & Signals
Signal Zones
| MFI Level | Condition | Action |
|---|---|---|
| Above 80 | Overbought | Watch for reversal signal or divergence — not automatic sell |
| 60–80 | Bullish momentum zone | Hold longs, avoid new shorts |
| 40–60 | Neutral | Wait for clearer signal |
| 20–40 | Bearish momentum zone | Hold shorts, avoid new longs |
| Below 20 | Oversold | Watch for reversal signal or divergence — not automatic buy |
The Core Advantage Over RSI
RSI treats a 1-point price gain on 1 million shares the same as a 1-point gain on 100 million shares. MFI multiplies the same 1-point gain by 100× more volume in the second scenario — producing a dramatically higher money flow reading. Low-volume price moves barely register in MFI. High-volume moves dominate the oscillator.
MFI Oversold Divergence — Bullish Reversal Setup
Divergence Signals
Bullish Divergence: Price makes a lower low, but MFI makes a higher low. The second selloff was on lighter volume — sellers are exhausting. Entry on the reversal candle after MFI crosses back above 20.
Bearish Divergence: Price makes a higher high, but MFI makes a lower high. The second rally was on lighter volume — buyers are retreating. Entry on the breakdown candle after MFI crosses back below 80.
False Signals
Section 3: Pass vs. Live — Real-Time Reliability
Critical repaint behavior — read this carefully.
MFI's Typical Price uses (High + Low + Close) / 3. All three inputs — High, Low, and Close — update continuously during a live bar. As a result:
- MFI for the live bar changes with every tick throughout the session
- An MFI reading of 22 at 10:00 AM can become 35 at 2:30 PM on the same bar
- An MFI showing "oversold" mid-session may close at a neutral 45
This is not the same as "repaint" on historical bars (which MFI does NOT do). This is live-bar calculation updating as inputs change — completely normal behavior. But it means any MFI reading you see during a live bar is provisional and should never trigger a trade entry.
Rule: Never act on MFI until the bar has closed and the reading is confirmed. Set alerts on bar close, not on real-time value.
Section 4: Practical Use Cases
Setup: MFI(14) on 1H chart + RSI(14) for comparison Signal: MFI drops below 20 on 1H while RSI is also below 30 — double confirmation of oversold on volume and price terms Entry: Close of the first 1H bar that shows MFI rising back above 25 from below 20 Exit: MFI rises to 50 or price reaches prior swing high Key Rule: WAIT for the 1H bar to close before reading MFI. Mid-bar readings are meaningless.
Setup: MFI(14) on daily chart + support/resistance levels Signal: MFI drops below 20 at a known support level (confluence). Or: MFI bearish divergence — price makes new high but MFI makes lower high. Entry: Day after MFI reversal bar closes below 20 — next day's open if bullish candle confirms Exit: MFI reaches 70–80 or price hits resistance zone Key Rule: Divergence entry requires MFI to cross back through the threshold (20 for bullish, 80 for bearish) after forming the divergence
Setup: MFI(14) on weekly chart Signal: Weekly MFI drops below 20 during a multi-week pullback in a primary uptrend — this is a major re-entry opportunity Entry: Weekly close with MFI reversing above 25 Exit: Weekly MFI reaches 80+ or position target hit Key Rule: Weekly MFI below 20 in a bull market occurs fewer than 5 times per year — treat each as a high-conviction accumulation zone
Real example: SPY during the October 2023 selloff — the daily MFI dropped to 14 on October 27, 2023, while price tested the 200-day moving average at $408. The extreme oversold MFI reading coincided with volume running 2.5× the 20-day average (heavy capitulation), and SPY reversed sharply from that level. Price rose from $408 to $479 over the next 10 weeks. The MFI oversold signal at a major support level with elevated volume was the entry indicator.
Section 5: Pseudo Code
INPUT: high[], low[], close[], volume[], period=14, ob=80, os=20
PROCESS:
Step 1: Calculate Typical Price
tp[i] = (high[i] + low[i] + close[i]) / 3
Step 2: Calculate Raw Money Flow
rmf[i] = tp[i] * volume[i]
Step 3: Classify each bar
if tp[i] > tp[i-1]: flow_type[i] = "positive"
elif tp[i] < tp[i-1]: flow_type[i] = "negative"
else: flow_type[i] = "neutral"
Step 4: Sum over lookback period
pos_mf[i] = sum(rmf[j] for j in range(i-period+1, i+1) if flow_type[j] == "positive")
neg_mf[i] = sum(rmf[j] for j in range(i-period+1, i+1) if flow_type[j] == "negative")
Step 5: Calculate MFI
if neg_mf[i] == 0:
mfi[i] = 100 # All positive money flow
else:
money_ratio = pos_mf[i] / neg_mf[i]
mfi[i] = 100 - (100 / (1 + money_ratio))
Step 6: Generate signals
if mfi[i] < os and mfi[i-1] < os and mfi[i] > mfi[i-1]:
signal = "Oversold Reversal"
elif mfi[i] > ob and mfi[i-1] > ob and mfi[i] < mfi[i-1]:
signal = "Overbought Reversal"
OUTPUT: mfi[], signal[]
EDGE CASES:
- All bars in period are negative MF: neg_mf = all, pos_mf = 0, MFI = 0
- All bars in period are positive MF: pos_mf = all, neg_mf = 0, MFI = 100
- Live bar: flag mfi[current] as provisional until bar close
- Zero volume bar: exclude from money flow sums, carry forward neutral classification
Section 6: Parameters & Optimization
Standard MFI Period Conventions
| Period | Signal Speed | False Signal Rate | Best For |
|---|---|---|---|
| 7 bars | Very fast | High | Day trading, 15m–1H scalping |
| 14 bars | Standard | Moderate | Swing trading, daily chart |
| 20 bars | Slower | Low | Confirmed reversals, position trading |
| 25 bars | Very slow | Very low | Major trend turning points only |
Threshold Adjustments
| Market Condition | Suggested Thresholds | Reason |
|---|---|---|
| Low volatility / blue chips | 70/30 | Standard range too extreme — rarely reached |
| High volatility / growth stocks | 85/15 | Standard too frequent — raise bar |
| Trending market | 80/20 with trend filter | Don't fade the trend on simple OB/OS readings |
How does MFI differ from RSI in practice?
The biggest difference appears during low-volume reversals. RSI will show a sharp oversold reading if price drops 5% over 14 days, regardless of volume. MFI will show a much milder oversold reading if that drop happened on declining volume — because light selling pressure is not a strong MFI signal. When MFI AND RSI are both deeply oversold simultaneously, the signal is dramatically stronger than either alone.
Why does MFI repaint on the live bar?
"Repaint" is used loosely here. Historical MFI values are permanently fixed — they do not change after the bar closes. What changes is the live bar's MFI, because High, Low, and Close are all still updating. This is expected behavior. It is NOT a platform bug. The solution is simple: only act on the previous bar's MFI reading (i.e., bar[-1], the most recent closed bar).
Section 7: Synergies & Conflicts
| Works Well With | Avoid Combining With | |
|---|---|---|
| RSI | MFI adds volume weighting to RSI's price-only calculation. When both show the same divergence simultaneously — double confirmation. One of the strongest signals in volume analysis. | — |
| Support/Resistance levels | MFI oversold at major support = high-probability bounce. MFI overbought at major resistance = high-probability rejection. Price level gives context; MFI gives force measurement. | — |
| Volume (Raw) | MFI below 20 on a day when raw volume is also above 2× average = capitulation. The combination of oversold MFI AND high raw volume identifies exhaustion reversals. | — |
| Candlestick patterns | Bullish engulfing candle at MFI below 20 = highly actionable. The pattern provides structure; MFI provides money-flow confirmation. | — |
| OBV | — | OBV is cumulative; MFI is oscillating. They are compatible in theory but rarely needed together — if you have MFI, you already have volume weighting. OBV adds directional cumulation but at the cost of dashboard complexity. |
| Stochastic | — | Both Stochastic and MFI are bounded oscillators. Both will show overbought and oversold in similar conditions. Combining them gives redundant signals with no additive information. |
Section 8: Common Mistakes
| Mistake | Root Cause | Solution |
|---|---|---|
| Reading MFI on a live (unclosed) bar | Misunderstanding live-bar repaint behavior | Set platform to show bar-close signals only. Never trade on live-bar MFI. |
| Shorting automatically at MFI 80 in an uptrend | Treating OB/OS as automatic reversal signals | Require a price-side reversal signal (bearish candle, breakdown) before shorting at MFI 80 |
| Ignoring divergence duration | Acting on a single-bar divergence | Require at least 3 bars of divergence to qualify as a tradeable signal |
| Using MFI alone without price context | MFI below 20 in a downtrend is not bullish until price confirms | Always locate MFI signals at a named support or resistance level |
| Applying equal thresholds to all instruments | High-beta stocks reach MFI extremes far more often than low-beta ones | Calibrate OB/OS thresholds per instrument using 90/10th percentile of historical MFI readings |
Section 9: Cheat Sheet
USE WHEN: Daily MFI drops below 20 at a known support level (oversold + location confluence), or MFI shows divergence vs. price over 3+ bars — indicating volume force and price are disagreeing
AVOID WHEN: Trading on live (unclosed) bar MFI — always wait for close. Avoid in very strong trends where MFI stays in OB zone for weeks. Avoid on instruments below 500K daily volume.
ENTRY SIGNAL: MFI crosses back above 20 (bullish) or below 80 (bearish) after divergence — confirmed on bar close only
EXIT SIGNAL: MFI reaches opposite extreme (80 for longs, 20 for shorts) OR divergence resolved in adverse direction
PARAMETERS: Period 14 (standard). Overbought: 80. Oversold: 20. Adjust to 85/15 for high-beta instruments.
CONFLUENCE: RSI (price-only confirmation) + Support/Resistance level + Raw volume spike (capitulation confirmation)
RISK: LIVE BAR REPAINT — MFI on an unclosed bar is provisional and should never trigger a trade. Always use bar[-1] (previous closed bar) for signal generation.
BEST TIMEFRAME: Daily chart for swing setups; weekly for major reversal signals; 1H minimum for short-term use