MFI(Money Flow Index,资金流量指数)是一条在 0 到 100 之间走的线,默认拿最近 14 根 K 线来算。线往上走,表示买压在增加;往下走,表示卖压在增加。传统上 80 以上算超买区,20 以下算超卖区。
它把每根 K 线的价格乘上成交量,再比涨的那几根和跌的那几根谁的分量大,放量的 K 线在读数里占得更多。公式里乘的是成交量,不是成交额;取错了列,读数会跟着变:同一组演示 K 线,乘成交量得 75.05,错拿成交额去乘是 75.45。
1. MFI 到 80 以上、20 以下代表什么
TradingView 帮助中心把 MFI 定义成衡量买卖压力的工具,靠同时分析价格和成交量得出;它列的信号有三类:超买和超卖、背离、失败摆动。两条线的位置,帮助页写的是「传统的超买区域从 80 以上开始,超卖区域从 20 以下开始」,紧接着说明这些值是主观的,技术分析师可以设成自己选的任何阈值。
80 和 20 落到公式上是什么意思,可以反推。MFI = 100 − 100 ÷ (1 + 资金流量比率),比率是正资金流量除以负资金流量:
| 资金流量比率 | 代入公式 | MFI |
|---|---|---|
| 4 | 100 − 100 ÷ 5 | 80 |
| 1 | 100 − 100 ÷ 2 | 50 |
| 0.25 | 100 − 100 ÷ 1.25 | 20 |
MFI 等于 80,就是这 14 根里典型价格上涨的那些 K 线,资金流量合计达到下跌那些的 4 倍。等于 20 是反过来,下跌的是上涨的 4 倍。50 是两边持平。
2. MFI 的计算公式分哪四步
- 典型价格:
(最高价 + 最低价 + 收盘价) ÷ 3 - 原始资金流量:
典型价格 × 成交量 - 资金流量比率:
14 期正资金流量 ÷ 14 期负资金流量。典型价格高于上一根的 K 线,它的原始资金流量计入正资金流量;低于上一根的,计入负资金流量。 - MFI:
100 − 100 ÷ (1 + 资金流量比率)
每根 K 线都要和上一根比,14 期的 MFI 至少要 15 根 K 线。把周期缩成 3,用 4 根 K 线演示(数字是编的,不对应任何币种和日期):
| 第几根 | 最高 | 最低 | 收盘 | 典型价格 | 成交量 | 原始资金流量 | 计入 |
|---|---|---|---|---|---|---|---|
| 1 | 102 | 98 | 100 | 100.00 | 1,000 | 100,000 | 只给第 2 根当比较对象 |
| 2 | 105 | 99 | 102 | 102.00 | 1,500 | 153,000 | 正(102 > 100) |
| 3 | 104 | 97 | 99 | 100.00 | 1,200 | 120,000 | 负(100 < 102) |
| 4 | 107 | 102 | 103 | 104.00 | 2,000 | 208,000 | 正(104 > 100) |
演示数据,周期取 3。
正资金流量 = 153,000 + 208,000 = 361,000,负资金流量 = 120,000,比率 = 361,000 ÷ 120,000 ≈ 3.008,MFI = 100 − 100 ÷ 4.008 ≈ 75.05。
分正负比的是典型价格。一根 K 线的收盘价比上一根低,最高价抬高了不少,典型价格照样可以高于上一根:上一根的典型价格是 100,这一根最高 106、最低 99、收盘 99.5,典型价格是 (106 + 99 + 99.5) ÷ 3 = 101.5,这根的资金流量记在正的一边。
3. MFI 公式里乘的是成交量还是成交额
乘的是成交量。TradingView 的公式写的是 Typical Price x Volume,第二项是 Volume。拿交易所的数据自己复算,要取对列:币安现货 K 线接口 GET /api/v3/klines 每根 K 线返回 12 个字段,文档给的下标从 [0] 数到 [11],带「量」的不止一列。下表的下标照文档原样写,从 0 起数:
| 文档下标 | 文档里的字段名 | 是什么 |
|---|---|---|
| [2] | High | 最高价 |
| [3] | Low | 最低价 |
| [4] | Close | 收盘价 |
| [5] | Volume | 成交量,按基础币计,BNBUSDT 里是多少个 BNB |
| [7] | Quote asset volume | 成交额,按计价币计,BNBUSDT 里是多少 USDT |
请求时 symbol 和 interval 必填,limit 默认 500、最大 1000;不带 startTime、endTime 时返回最近的 K 线,最后一根的收盘时间([6],Close time)还没到的,去掉再算。基础币和计价币的分法,同一份文档在 24 小时行情接口的字段注释里有:volume 是 Total trade volume (in base asset),quoteVolume 是 Total trade volume (in quote asset)。
取错成 [7] 会差多少,沿用第 2 节的 4 根 K 线来看:把那里的成交量当作 [5],再给每根配一个成交额当 [7],同样是演示数字:
| 第几根 | 典型价格 | 成交量 | 成交额 | 典型价格 × 成交量 | 典型价格 × 成交额 | 计入 |
|---|---|---|---|---|---|---|
| 2 | 102 | 1,500 | 152,400 | 153,000 | 15,544,800 | 正 |
| 3 | 100 | 1,200 | 120,600 | 120,000 | 12,060,000 | 负 |
| 4 | 104 | 2,000 | 207,000 | 208,000 | 21,528,000 | 正 |
乘成交量,第 2 节已经得出 75.05。错拿成交额去乘:正资金流量 = 15,544,800 + 21,528,000 = 37,072,800,负资金流量 = 12,060,000,比率 ≈ 3.074,MFI = 100 − 100 ÷ 4.074 ≈ 75.45。
两个读数差 0.40。差得小,是因为这 4 根的价格都在 100 上下,成交额和成交量几乎按同一个倍数变。成交额本身已经含了价格,币安文档在滚动窗口行情接口里把 quoteVolume 注为 Sum of (price * volume) for all trades;再乘一次典型价格,价格高的 K 线分量更重。14 根里价格跨度大的时候,取错列的读数可能离得更远。
自己算出来的 MFI 和图表软件、和别人的截图对不上,交易对、K 线周期和长度都核过了,先查取的是不是 [5]:把 [7] 的成交额当成 Volume 乘进去,读数就对不齐。
4. MFI 背离和失败摆动怎么认
背离指价格和 MFI 给出的方向不一致。TradingView 分了两种:
- 看涨背离:价格创下新低,MFI 的低点却比上一个低点高;
- 看跌背离:价格创出新高,MFI 的高点却比上一个高点低。
失败摆动只看 MFI 自己,帮助页说它完全独立于价格,分四步:
| 步骤 | 看涨失败摆动 | 看跌失败摆动 |
|---|---|---|
| 1 | MFI 跌破 20 | MFI 升到 80 以上 |
| 2 | 反弹回 20 以上 | 回落到 80 以下 |
| 3 | 回调,但仍在 20 以上 | 小幅上升,但仍在 80 以下 |
| 4 | 向上突破之前的高点 | 跌到之前的低点下方 |
拿一串演示读数对看涨那一列:18、27、23、31。18 跌破了 20;27 回到 20 以上;23 是回调,还在 20 以上;31 高过了前面的 27,四步走完。第三个数要是 19,又掉回 20 以下,这一组就不成立。
帮助页对两者的措辞都留了余地:背离是「可以解释为即将发生的逆转」,失败摆动是「可能导致价格逆转的情况」。
5. MFI 和 RSI 的读数什么时候会不一样
TradingView 这样讲两者的关系:MFI 本质上是 RSI,增加了交易量,因此可以用非常相似的方式使用。RSI 自己怎么算、怎么读,站内《RSI 完整指南:从超买超卖到背离,70 不一定是卖》有完整一篇。MFI 由 Gene Quong 和 Avrum Soudack 创建。
多出来的成交量什么时候起作用,回到第 2 节的 4 根 K 线就能看到。把后三根的成交量都改成 1,000,其他不动:正资金流量 = 102,000 + 104,000 = 206,000,负资金流量 = 100,000,MFI = 100 − 100 ÷ (1 + 2.06) ≈ 67.32。原表里上涨的两根放了量,读数是 75.05,高出 7.73。
反过来,回到原表,让下跌的第 3 根放量到 4,000:负资金流量 = 100 × 4,000 = 400,000,正资金流量还是 361,000,比率 = 0.9025,MFI ≈ 47.44。三根里两根涨、一根跌,MFI 却落在 50 以下。
只看价格的指标分不出这两种情形,MFI 分得出。代价是它的读数和成交量数据绑在一起:数据源不同、乘的列不同,读数就不同。把成交量用进指标的还有 OBV,《OBV 能量潮:用成交量识破假突破》讲的是它的读法;Stoch RSI 乘以 100 的版本也画 80 和 20 两条线,比的却是 RSI 在自己最近一段里的位置,和成交量无关,算法在《Stoch RSI 怎么看?随机 RSI 的算法和超买超卖读法》里。
6. 关于 MFI 设置和超买的疑问
MFI 超过 80 以后价格一定会跌吗?
MFI 到了 80 以上,价格接下来怎么走并没有定数。TradingView 在总结里写明,MFI 不应单独用作交易信号的唯一来源,可以与其他指标或图表形态结合;moomoo 的课程页也提到 MFI 可能产生错误信号,背离并不总会引发价格反转。
MFI 的长度 14 可以改成别的数吗?
TradingView 内置 MFI 的「长度」输入项可以改,它是用于计算 MFI 的时间段,14 只是默认值。长度改小,参与比较的 K 线变少,单根放量 K 线对读数的影响变大;改大则相反。改过长度以后,和别人对读数要确认对方用的是同一个数。
同一个币的 MFI 在 1 小时图和日线图上为什么不一样?
因为 14 数的是 K 线根数。1 小时图上的 14 期 MFI,用的是最近 14 根 1 小时 K 线的价格和成交量;日线图上用的是最近 14 根日 K。两边喂进去的数据不同,读数没有理由相同。对读数之前,要确认两边看的是同一个 K 线周期。