摘要
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 衡量包含跳空在内的近期真实波幅,因此 通道会随波动率扩张或收缩。
递推公式
分别将 span、window_atr 和 multiplier 记为 \(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。
组合使用的基础指标
实现说明
递推过程在 src/rtta/indicator.cpp 的 class KeltnerChannel 中实现。
