TAMomentum
TA.MFI()
资金流量指标 (Money Flow Index)
结合价格和成交量的动量指标,被称为"带成交量的 RSI"。
语法
python
TA.MFI(high, low, close, volume, timeperiod=14)参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| high | any | 否 | - | 最高价数组 |
| low | any | 否 | - | 最低价数组 |
| close | any | 否 | - | 收盘价数组 |
| volume | any | 否 | - | 成交量数组 |
| timeperiod | any | 否 | - | 时间周期,默认 14 |
返回值
返回 MFI 值数组,范围 0-100
计算方法
- 典型价格 = (High + Low + Close) / 3
- 资金流量 = 典型价格 × Volume
- MFI = 100 - (100 / (1 + 正资金流量 / 负资金流量))
解读
- MFI > 80: 超买,资金流入过多
- MFI < 20: 超卖,资金流出过多
- MFI 背离: 价格创新高但 MFI 未创新高
基础示例
python
def main():
records = exchange.GetRecords()
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
mfi = TA.MFI(highs, lows, closes, volumes, 14)
Log(f"MFI: {mfi[-1]:.2f}")
if mfi[-1] > 80:
Log("MFI 超买,资金流入过多")
elif mfi[-1] < 20:
Log("MFI 超卖,资金流出过多")高级应用
1. MFI 背离检测
python
def detect_mfi_divergence(prices, mfi_values, period=10):
"""检测 MFI 背离"""
if len(prices) < period or len(mfi_values) < period:
return None
# 顶背离
if (prices[-1] > max(prices[-period:-1]) and
mfi_values[-1] < max(mfi_values[-period:-1])):
return "顶背离"
# 底背离
if (prices[-1] < min(prices[-period:-1]) and
mfi_values[-1] > min(mfi_values[-period:-1])):
return "底背离"
return None
def main():
records = exchange.GetRecords()
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
mfi = TA.MFI(highs, lows, closes, volumes, 14)
divergence = detect_mfi_divergence(closes, mfi, 10)
if divergence == "顶背离":
Log("MFI 顶背离,价格可能回调")
elif divergence == "底背离":
Log("MFI 底背离,价格可能反弹")2. MFI 与价格趋势对比
python
def main():
records = exchange.GetRecords()
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
mfi = TA.MFI(highs, lows, closes, volumes, 14)
# 价格上涨但 MFI 下降
if closes[-1] > closes[-5] and mfi[-1] < mfi[-5]:
Log("价格上涨但资金流出,可能是假突破")
# 价格下跌但 MFI 上升
elif closes[-1] < closes[-5] and mfi[-1] > mfi[-5]:
Log("价格下跌但资金流入,可能是洗盘")3. MFI 极值策略
python
def main():
records = exchange.GetRecords()
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
mfi = TA.MFI(highs, lows, closes, volumes, 14)
# 极度超卖后反弹
if mfi[-2] < 20 and mfi[-1] >= 20:
Log("MFI 脱离超卖区,可能开始反弹")
# 极度超买后回落
elif mfi[-2] > 80 and mfi[-1] <= 80:
Log("MFI 脱离超买区,可能开始回调")参数优化建议
| 周期 | 推荐参数 | 特点 |
|---|---|---|
| 短线 | MFI(10) | 敏感 |
| 标准 | MFI(14) | 经典配置 |
| 长线 | MFI(20) | 平滑 |
与其他指标配合
MFI + RSI
python
mfi = TA.MFI(highs, lows, closes, volumes, 14)
rsi = TA.RSI(closes, 14)
# 双重超卖确认
if mfi[-1] < 20 and rsi[-1] < 30:
Log("MFI + RSI 双重超卖")
# 背离对比
if closes[-1] > closes[-10]:
if mfi[-1] < mfi[-10] and rsi[-1] < rsi[-10]:
Log("MFI + RSI 双重顶背离,强卖出信号")MFI + OBV
python
mfi = TA.MFI(highs, lows, closes, volumes, 14)
obv = TA.OBV(closes, volumes)
# 资金流向确认
if mfi[-1] > 50 and obv[-1] > obv[-5]:
Log("MFI和OBV均显示资金流入")注意事项
⚠️ 重要提醒:
- 需要成交量: 必须有可靠的成交量数据
- 与 RSI 区别: MFI 考虑成交量,更全面
- 背离重要: MFI 背离是强反转信号
- 假突破识别: 价涨量缩时 MFI 会警示
相关指标
- RSI - 相对强弱指标 - 不考虑成交量的版本
- OBV - 能量潮 - 纯成交量指标