Pharos
TATrend

TA.KAMA() - 考夫曼自适应移动平均线

Kaufman Adaptive Moving Average (KAMA) 考夫曼自适应移动平均线,根据市场波动自动调整响应速度。

返回趋势指标目录


语法

python
TA.KAMA(data)
TA.KAMA(data, timeperiod=30)

参数

参数类型说明默认值
dataarray价格数据-
timeperiodint计算周期30

返回值

返回KAMA数组。


计算方法

plaintext
1. 效率比率(ER) = |Price - Price[N]| / Σ|Price[i] - Price[i-1]|
2. 快速平滑常数: SC_fast = 2/(2+1) = 0.6667
3. 慢速平滑常数: SC_slow = 2/(30+1) = 0.0645
4. 平滑常数(SC) = [ER × (SC_fast - SC_slow) + SC_slow]²
5. KAMA = KAMA[-1] + SC × (Price - KAMA[-1])

核心思想:趋势明确时响应快(类似EMA),震荡时响应慢(类似SMA)。


特点

  • 自适应性:根据市场状态调整
  • 智能平滑:趋势中快速跟踪,震荡中平滑过滤
  • 减少假信号:在震荡市中表现优于传统MA
  • 计算复杂:比普通MA复杂

基础示例

python
def main():
    records = exchange.GetRecords()
    if len(records) < 50:
        return
    
    closes = [r['Close'] for r in records]
    
    kama = TA.KAMA(closes, 30)
    price = closes[-1]
    
    # KAMA方向
    if kama[-1] > kama[-2]:
        direction = "上升"
    elif kama[-1] < kama[-2]:
        direction = "下降"
    else:
        direction = "横盘"
    
    Log(f"KAMA趋势: {direction}")
    
    # 价格与KAMA关系
    if price > kama[-1]:
        Log("价格在KAMA上方")
    else:
        Log("价格在KAMA下方")

高级应用

KAMA趋势跟踪策略

python
def kama_trend_strategy():
    records = exchange.GetRecords()
    closes = [r['Close'] for r in records]
    
    kama = TA.KAMA(closes, 30)
    atr = TA.ATR(records, 14)
    
    price = closes[-1]
    
    # 突破KAMA做多
    if price > kama[-1] and closes[-2] <= kama[-2]:
        stop_loss = price - 2 * atr[-1]
        exchange.Buy(-1, 1)
        Log(f"突破KAMA做多,止损: {stop_loss}")
    
    # 跌破KAMA做空
    elif price < kama[-1] and closes[-2] >= kama[-2]:
        stop_loss = price + 2 * atr[-1]
        exchange.Sell(-1, 1)
        Log(f"跌破KAMA做空,止损: {stop_loss}")

KAMA + ADX组合

python
def kama_adx_combo():
    records = exchange.GetRecords()
    closes = [r['Close'] for r in records]
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    
    kama = TA.KAMA(closes, 30)
    adx = TA.ADX(highs, lows, closes, 14)
    
    price = closes[-1]
    
    # 趋势强度确认
    strong_trend = adx[-1] > 25
    
    if strong_trend:
        # 趋势市场中使用KAMA
        if price > kama[-1] and kama[-1] > kama[-2]:
            exchange.Buy(-1, 1)
            Log("强趋势+KAMA上行,做多")
        elif price < kama[-1] and kama[-1] < kama[-2]:
            exchange.Sell(-1, 1)
            Log("强趋势+KAMA下行,做空")
    else:
        Log("趋势不明确,等待")

参数优化

场景周期说明
短期10-20快速响应
中期20-40平衡
长期40-60平滑跟踪

优势

  1. 自适应:市场状态变化时自动调整
  2. 减少假信号:震荡市中不频繁交易
  3. 趋势捕捉:趋势明确时快速跟进
  4. 适用性广:各类市场都有较好表现

注意事项

  1. 参数调优较复杂
  2. 计算量大于传统MA
  3. 仍需配合其他指标确认
  4. 强趋势市中可能不如TEMA快

实战技巧

  1. 与ADX配合判断趋势强度
  2. 突破KAMA后等待回踩确认
  3. 止损设在KAMA下方1-2个ATR
  4. 建议在日线级别以上使用

相关指标

  • TEMA - 三重指数移动平均线
  • MAMA - MESA自适应移动平均线
  • T3 - T3移动平均线
  • EMA - 指数移动平均线

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