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.

Volume / Momentum Oscillator
Category
Intermediate
Difficulty
0 to 100
Output Range
14 bars
Default Period
Moderate — repaints on live (unclosed) bar
Repaint Risk
Simple — High, Low, Close, Volume
Data Need
VOLUME · MOMENTUM · LAGGING · BEGINNER_FRIENDLY · REPAINT_RISK · REAL_TIME
Tags

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.

💡 TIP
MFI divergence carries more weight than RSI divergence because it requires the second peak or trough to have less volume force behind it — not just less price movement. This filters out situations where selling pressure is declining on price but not on money flow terms.

False Signals

⚠️ WARNING
MFI can stay in the overbought (above 80) or oversold (below 20) zone for extended periods during strong trends. In a genuine institutional uptrend, MFI may hover between 70 and 90 for weeks. Selling every time it hits 80 in an uptrend is a losing strategy. Always confirm with a reversal signal (bearish engulfing candle, break below support) before acting on overbought readings.

Section 3: Pass vs. Live — Real-Time Reliability

Moderate — MFI repaints on the live (unclosed) bar throughout the session
Repaint Risk
Moderate — 14-bar lookback delays signal by several bars
Lag
ALWAYS wait for bar close before acting — live bar MFI is unreliable
Confirmation Timing
Divergence detection on closed bars; overbought/oversold at key price levels
Best Use
Making decisions based on MFI reading during an open (live) bar
Avoid

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.

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 WithAvoid Combining With
RSIMFI 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 levelsMFI 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 patternsBullish engulfing candle at MFI below 20 = highly actionable. The pattern provides structure; MFI provides money-flow confirmation.
OBVOBV 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.
StochasticBoth 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

ℹ️ INFO
**Money Flow Index (MFI)**

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