MFI is RSI with volume attached. Where RSI counts up-bars and down-bars by price alone, MFI weights each bar by the money that changed hands. A 2% rise on 4x normal volume counts for more than a 2% rise on a quiet day. The call is @MFI(high, low, close, volume, 14).
How it is computed
typical_price = (high + low + close) / 3
money_flow = typical_price * volume
A bar is positive when its typical price is above the previous bar’s, negative when below. Then:
money_ratio = sum(positive money flow over N) / sum(negative money flow over N)
MFI = 100 - (100 / (1 + money_ratio))
The scaling is identical to RSI, so the output is a unitless number between 0 and 100 and compares to a threshold:
@MFI(high, low, close, volume, 14) < 20
Typical parameters and thresholds
| Setting | Convention | Reads as |
|---|---|---|
| 14-period window | Wilder-era default | balanced |
| 7-period window | shorter | more extreme readings, more signals |
| Below 20 | described as oversold | recent selling dominated by value traded |
| Above 80 | described as overbought | recent buying dominated by value traded |
MFI uses 20 and 80 rather than RSI’s 30 and 70 because the volume weighting pushes readings further toward the extremes. Both pairs are conventions from the indicator’s authors. Neither was fitted to NSE data, and fitting them to NSE data on one sample is how you end up with a number that only works on that sample.
How to read the output
The claim behind MFI is that volume separates a move that institutions participated in from a move that drifted on thin trade. That is a plausible story. It is not a verified one, and a backtest with costs is the only way to know whether it holds for a given universe and holding period.
Note also that “positive money flow” is decided by the typical price rising, not by whether the trades were buys or sells. Nobody can see that split from an end-of-day bar. The label is a convention, not a measurement of who was on which side.
Risks and caveats
MFI inherits RSI’s central failure. It can sit below 20 through an extended decline while a stock keeps falling, and each reading looks like a fresh opportunity. Heavy volume on a collapsing stock is distress selling, and the indicator cannot tell that apart from accumulation.
Volume data quality is the second constraint. On thinly traded NSE small-caps a single large block can dominate a day’s money flow, and a stock that trades a few thousand shares produces readings driven by one participant rather than by broad interest. Restrict volume-weighted indicators to names with consistent daily turnover before you trust the output.
Corporate actions distort the series too. A split multiplies share volume without changing rupee turnover, so an unadjusted volume history breaks the ratio across the split date.