Pharos
TATrend

TA.MAMA() - MESA自适应移动平均线

MESA Adaptive Moving Average (MAMA) 和 FAMA (Following Adaptive Moving Average),动态调整周期的自适应移动平均线。

返回趋势指标目录


语法

python
TA.MAMA(data)
TA.MAMA(data, fastlimit=0.5, slowlimit=0.05)

参数

参数类型说明默认值
dataarray价格数据-
fastlimitfloat快速限制(最大调整速度)0.5
slowlimitfloat慢速限制(最小调整速度)0.05

返回值

返回二维数组:[MAMA数组, FAMA数组]

  • MAMA:母线(快线)
  • FAMA:跟随线(慢线)

计算方法

基于希尔伯特变换和相位分析,动态计算主导周期,根据市场周期自动调整平滑参数。计算较复杂,核心是:

plaintext
1. 通过希尔伯特变换计算市场相位
2. 确定主导周期
3. 根据周期动态调整alpha值
4. MAMA = alpha × Price + (1-alpha) × MAMA[-1]
5. FAMA = 0.5 × alpha × MAMA + (1-0.5×alpha) × FAMA[-1]

特点

  • 周期自适应:自动识别市场周期
  • 双线系统:MAMA快线 + FAMA慢线
  • 趋势敏感:快速响应趋势变化
  • 复杂算法:基于信号处理理论

基础示例

python
def main():
    records = exchange.GetRecords()
    if len(records) < 50:
        return
    
    closes = [r['Close'] for r in records]
    
    mama_fama = TA.MAMA(closes, 0.5, 0.05)
    mama = mama_fama[0]
    fama = mama_fama[1]
    
    # MAMA与FAMA交叉
    if mama[-1] > fama[-1] and mama[-2] <= fama[-2]:
        Log("MAMA上穿FAMA,看涨信号")
    elif mama[-1] < fama[-1] and mama[-2] >= fama[-2]:
        Log("MAMA下穿FAMA,看跌信号")

高级应用

MAMA交叉策略

python
def mama_crossover_strategy():
    records = exchange.GetRecords()
    closes = [r['Close'] for r in records]
    
    mama_fama = TA.MAMA(closes, 0.5, 0.05)
    mama = mama_fama[0]
    fama = mama_fama[1]
    
    atr = TA.ATR(records, 14)
    
    # 金叉做多
    if mama[-1] > fama[-1] and mama[-2] <= fama[-2]:
        stop_loss = closes[-1] - 2 * atr[-1]
        exchange.Buy(-1, 1)
        Log(f"MAMA金叉做多,止损: {stop_loss}")
    
    # 死叉做空
    elif mama[-1] < fama[-1] and mama[-2] >= fama[-2]:
        stop_loss = closes[-1] + 2 * atr[-1]
        exchange.Sell(-1, 1)
        Log(f"MAMA死叉做空,止损: {stop_loss}")

MAMA趋势过滤

python
def mama_trend_filter():
    records = exchange.GetRecords()
    closes = [r['Close'] for r in records]
    
    mama_fama = TA.MAMA(closes)
    mama = mama_fama[0]
    fama = mama_fama[1]
    
    # 趋势方向
    if mama[-1] > fama[-1]:
        trend = "多头"
        # 仅做多
        rsi = TA.RSI(closes, 14)
        if rsi[-1] < 30:  # 超卖回调
            exchange.Buy(-1, 0.5)
            Log("多头趋势中回调买入")
    
    elif mama[-1] < fama[-1]:
        trend = "空头"
        # 仅做空
        rsi = TA.RSI(closes, 14)
        if rsi[-1] > 70:  # 超买反弹
            exchange.Sell(-1, 0.5)
            Log("空头趋势中反弹卖出")

参数调整

参数推荐值效果
fastlimit0.5标准快速响应
fastlimit0.8更快响应(更多噪音)
fastlimit0.3较慢响应(更平滑)
slowlimit0.05标准慢速平滑

与其他自适应MA对比

指标自适应方式复杂度效果
KAMA效率比率
MAMA希尔伯特变换优秀
T3多重平滑

注意事项

  1. 计算复杂,资源消耗较大
  2. 参数调整对结果影响大
  3. 建议先用默认参数测试
  4. 适合趋势市场,震荡市慎用

实战技巧

  1. 交叉信号:等待K线确认
  2. 趋势过滤:仅顺MAMA/FAMA方向
  3. 止损设置:FAMA下方1-2个ATR
  4. 时间周期:建议4小时以上

相关指标

  • KAMA - 考夫曼自适应移动平均线
  • T3 - T3移动平均线
  • TEMA - 三重指数移动平均线

返回趋势指标目录 | 返回 TA 指标总目录