Pharos
TAMomentum

TA.MFI()

资金流量指标 (Money Flow Index)

结合价格和成交量的动量指标,被称为"带成交量的 RSI"。

语法

python
TA.MFI(high, low, close, volume, timeperiod=14)

参数

参数名类型必选默认值说明
highany-最高价数组
lowany-最低价数组
closeany-收盘价数组
volumeany-成交量数组
timeperiodany-时间周期,默认 14

返回值

返回 MFI 值数组,范围 0-100

计算方法

  1. 典型价格 = (High + Low + Close) / 3
  2. 资金流量 = 典型价格 × Volume
  3. 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均显示资金流入")

注意事项

⚠️ 重要提醒

  1. 需要成交量: 必须有可靠的成交量数据
  2. 与 RSI 区别: MFI 考虑成交量,更全面
  3. 背离重要: MFI 背离是强反转信号
  4. 假突破识别: 价涨量缩时 MFI 会警示

相关指标

返回目录

← 返回动量指标目录