肯特纳通道(KeltnerChannel)

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

摘要

KeltnerChannel 是现代肯特纳通道的流式实现:以收盘价 EMA 为中轨,在上下 两侧各加减若干倍 Wilder ATR。

更新 API

result = rtta.KeltnerChannel(
    span=20.0,
    window_atr=20.0,
    fillna=False,
    multiplier=2.0,
).update(close, high, low)
# result.middle, result.upper, result.lower

advance(...) 使用相同输入推进状态,但不生成 Python 结果。Chester Keltner 早期以典型价格计算的版本见 KeltnerChannelOriginal

工作原理

EMA 提供能较快响应趋势的中轴;ATR 衡量包含跳空在内的近期真实波幅,因此 通道会随波动率扩张或收缩。

递推公式

分别将 spanwindow_atrmultiplier 记为 \(s\)、\(n\) 和 \(k\)。

\[\alpha=\frac{2}{s+1},\qquad M_t=\alpha c_t+(1-\alpha)M_{t-1}\]
\[TR_t=\max(H_t-L_t,|H_t-C_{t-1}|,|L_t-C_{t-1}|)\]

ATR 在最初 \(n\) 个观测期间使用真实波幅的逐步均值初始化,之后采用 Wilder 平滑:

\[ATR_t=\frac{(n-1)ATR_{t-1}+TR_t}{n}.\]

通道为:

\[middle_t=M_t,\qquad upper_t=M_t+kATR_t,\qquad lower_t=M_t-kATR_t.\]

fillna=False 时,在取得 \(\max(\lfloor s\rfloor,\lfloor n\rfloor,1)\) 个观测之前,三个字段均为 NaN;当 fillna=True 时,从第一根 K 线起就返回当时可得的 EMA 与 ATR。

组合使用的基础指标

EWMAATR

实现说明

递推过程在 src/rtta/indicator.cppclass KeltnerChannel 中实现。

参考资料