考夫曼自适应移动平均(Kama)

增量式、因果技术分析文档

摘要

Kama 是 RTTA 对考夫曼自适应移动平均的流式实现。当价格沿一个方向高效移动 时,它会加快响应;当相同净位移中夹杂较多来回波动时,它会减慢平滑速度。

更新 API

result = rtta.Kama(
    window=10, fast_ema=2, slow_ema=30, fillna=True
).update(close)

advance(...) 使用同一个 close 推进状态,但不生成 Python 返回值; batch(...) 对数组逐项执行完全相同的状态转移。

工作原理

KAMA 用考夫曼效率比率(净位移除以路径长度)在快速和慢速 EMA 常数之间插值。 再将插值得到的常数平方,使均线在震荡噪声中更稳定,同时仍能快速跟随方向 清晰的趋势。

递推公式

令效率窗口为 \(n\),快速周期为 \(f\),慢速周期为 \(s\):

\[ER_t=\frac{|c_t-c_{t-n}|} {\sum_{i=0}^{n-1}|c_{t-i}-c_{t-i-1}|}\]
\[\alpha_f=\frac{2}{f+1},\qquad \alpha_s=\frac{2}{s+1}\]
\[SC_t=\left[ER_t(\alpha_f-\alpha_s)+\alpha_s\right]^2\]
\[KAMA_t=KAMA_{t-1}+SC_t(c_t-KAMA_{t-1}).\]

要取得 \(n\) 次真实的一步价格变化,需要 \(n+1\) 个收盘价。在此之前, 当前价格会作为 KAMA 的种子保存;fillna=True 时直接返回该价格, fillna=False 时返回 NaN。因此,第一个完整 KAMA 在第 \(n+1\) 次更新时 输出,与 TA-Lib 的经典序列一致。

组合使用的基础指标

EfficiencyRatio

实现说明

递推过程在 src/rtta/indicator.cppclass Kama 中实现。启动阶段的变化量 只由实际观测到的相邻收盘价计算,不会把虚构的零价格混入路径长度。

参考资料