AlphaFeed Blog

如何用 Python 计算 MFI 资金流量指标?(带成交量的 RSI)

分析与指标 · 代码验证于 2026-09-20

如何用 Python 计算 MFI 资金流量指标?(带成交量的 RSI)

一句话回答: MFI(资金流量指标)可以理解为「带成交量的 RSI」:用 典型价=(高+低+收)/3 乘成交量得到资金流,再按典型价涨跌把资金流分成正/负,取 14 日比值套进 100 − 100/(1+比值)。用 AlphaFeed 取复权日线,几行就能算出 MFI,并用 80/20 判断超买/超卖。

为什么会有这个问题 / 传统做法的痛点

RSI 只看价格涨跌,忽略了「有没有量配合」。MFI 把成交量加进来,衡量的是资金推动的强弱:

数据用 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(高+低+收)/3MFI 的价格基准
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,都在中性区间。

关键坑与注意事项

常见问题(FAQ)

Q:MFI 和 RSI 到底选哪个? A:想看纯价格动能用 RSI;想看「涨跌有没有资金配合」用 MFI。实战常两者并看,背离时更有参考价值。

Q:MFI 用几日周期? A:默认 14 日。周期越短越灵敏、噪声越多;越长越平滑、越滞后。

Q:为什么我的 MFI 和行情软件差一点? A:多因平盘日处理、复权口径不同。确认都用前复权、平盘不计入,再对比即可。

Q:需要付费吗? A:单只标的日线在免费额度内即可试算;批量/全市场需 Starter 及以上,详见 AlphaFeed 定价页。

小结

MFI 的本质是「把成交量加权进 RSI」,用典型价的涨跌方向给资金流分正负,再算一段时间的占比。写起来只需几行,但要记住它对量敏感、会因缩量失真、超买不等于卖点。AlphaFeed 提供口径一致、含真实成交量的复权日线,让你几行算出 MFI——当资金强弱参考、配合价格与趋势用。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。