一句话回答: MFI(资金流量指标)可以理解为「带成交量的 RSI」:用 典型价=(高+低+收)/3 乘成交量得到资金流,再按典型价涨跌把资金流分成正/负,取 14 日比值套进 100 − 100/(1+比值)。用 AlphaFeed 取复权日线,几行就能算出 MFI,并用 80/20 判断超买/超卖。
为什么会有这个问题 / 传统做法的痛点
RSI 只看价格涨跌,忽略了「有没有量配合」。MFI 把成交量加进来,衡量的是资金推动的强弱:
- 量价结合:同样是上涨,放量上涨的资金流权重更大;
- 参数:经典 14 日,也有人用 9/21;
- 复权:除权日的假跌会让典型价错判为下跌、资金流被误算,务必用前复权。
数据用 AlphaFeed 复权日线,计算用几行 pandas 即可。
分步骤解决(每步配可运行代码)
第 1 步:取复权日线(含高开低收与成交量)
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
df = af.klines.get("600519.SH", period="1d", count=120,
adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
第 2 步:计算 MFI
import numpy as np
def mfi(df, n=14):
tp = (df["high"] + df["low"] + df["close"]) / 3.0 # 典型价
mf = tp * df["volume"] # 资金流 = 典型价 × 成交量
up = mf.where(tp > tp.shift(), 0.0) # 典型价上涨 -> 正资金流
dn = mf.where(tp < tp.shift(), 0.0) # 典型价下跌 -> 负资金流
mr = up.rolling(n).sum() / dn.rolling(n).sum().replace(0, np.nan)
return 100 - 100 / (1 + mr)
df["mfi"] = mfi(df, 14)
print(df[["trade_date", "close", "mfi"]].tail(3).to_string(index=False))
字段与参数说明:
| 字段/参数 | 含义 | 备注 |
|---|---|---|
high/low/close | 最高/最低/收盘价 | AlphaFeed 复权日线列 |
volume | 成交量 | A股为真实量;美股/港股 amount=0,用 volume |
| 典型价 tp | (高+低+收)/3 | MFI 的价格基准 |
n | 统计周期 | 14(经典)、9/21 |
| MFI 区间 | 0~100 | >80 超买,<20 超卖 |
第 3 步:判断资金超买超卖
def mfi_state(symbol, count=120, n=14):
df = af.klines.get(symbol, period="1d", count=count,
adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
v = float(mfi(df, n).iloc[-1])
zone = "超买(>80)" if v > 80 else ("超卖(<20)" if v < 20 else "中性")
return {"mfi": round(v, 1), "zone": zone}
print(mfi_state("600519.SH")) # 例如 {'mfi': 38.0, 'zone': '中性'}
print(mfi_state("000001.SZ")) # 例如 {'mfi': 57.7, 'zone': '中性'}
上例实测茅台 MFI≈38.0、平安银行≈57.7,都在中性区间。
关键坑与注意事项
- 和 RSI 的区别:RSI 只用收盘价涨跌,MFI 用「典型价×成交量」。放量时 MFI 反应更剧烈,缩量时更钝——两者背离时往往说明「涨得没量」。
- 缩量失真:极端缩量日资金流很小,会让 MFI 上下跳动,注意结合成交额一起看。
- 80/20 不是买卖信号:强势股 MFI 可以长期贴在 80 以上,超买≠马上跌。它是资金强弱参考,需结合趋势。
- 平盘处理:典型价持平(
tp == tp.shift())的日子既不计正也不计负,本文按此实现,可能与个别软件略有差异。 - 复权:一律
adjust="forward",避免除权日假跌污染资金流。
常见问题(FAQ)
Q:MFI 和 RSI 到底选哪个? A:想看纯价格动能用 RSI;想看「涨跌有没有资金配合」用 MFI。实战常两者并看,背离时更有参考价值。
Q:MFI 用几日周期? A:默认 14 日。周期越短越灵敏、噪声越多;越长越平滑、越滞后。
Q:为什么我的 MFI 和行情软件差一点? A:多因平盘日处理、复权口径不同。确认都用前复权、平盘不计入,再对比即可。
Q:需要付费吗? A:单只标的日线在免费额度内即可试算;批量/全市场需 Starter 及以上,详见 AlphaFeed 定价页。
小结
MFI 的本质是「把成交量加权进 RSI」,用典型价的涨跌方向给资金流分正负,再算一段时间的占比。写起来只需几行,但要记住它对量敏感、会因缩量失真、超买不等于卖点。AlphaFeed 提供口径一致、含真实成交量的复权日线,让你几行算出 MFI——当资金强弱参考、配合价格与趋势用。
参考
- AlphaFeed Python SDK 文档:docs.alphafeed.org/zh-Hans/sdk…
- AlphaFeed 官网:alphafeed.org/