ATR

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

摘要

ATR 计算平均真实波幅(Average True Range),用于衡量 OHLC 数据流的波动性。RTTA 的实现严格遵循因果顺序:每次调用 update(close, high, low) 只接收一根 K 线,更新已保存的状态,并返回当前 ATR。

更新 API

value = rtta.ATR(window=14.0, fillna=True).update(close, high, low)

输入为当前 K 线的收盘价、最高价和最低价。实现会保存上一收盘价、预热阶段的真实波幅累计值,以及最新的 ATR。

工作原理

真实波幅在单根 K 线高低价差的基础上,还计入相对上一收盘价的隔夜或跨 K 线跳空。ATR 再对真实波幅进行平滑。RTTA 在预热阶段返回截至当前所有真实波幅的算术平均;样本数达到 window 后,改用 Wilder 平滑。

递推公式

令 \(C_t\)、\(H_t\) 和 \(L_t\) 分别为第 \(t\) 次更新的收盘价、最高价和最低价,\(n\) 为 window

\[TR_t = \begin{cases} H_t - L_t, & t = 0 \\ \max(H_t - L_t,\ |H_t - C_{t-1}|,\ |L_t - C_{t-1}|), & t > 0 \end{cases}\]

预热阶段,令 \(m_t = t + 1 \le n\):

\[ATR_t = \frac{\sum_{i=0}^{t} TR_i}{m_t}\]

预热结束后:

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

fillna=False 时,对象在预热阶段仍会更新全部内部状态,但在接收至少 window 个样本之前返回 NaN

实现说明

递推公式在 src/rtta/indicator.cppclass ATR 中实现。

参考资料