ATR(平均真实波幅)是如何计算的
在计算 ATR 之前,先理解其含义
ATR 是 平均真实波幅(Average True Range) 的缩写。它是一种基于 真实波幅(True Range, TR) 概念构建的 波动性指标,旨在捕捉一个周期内价格的波动幅度,包括与前一周期收盘价之间的潜在 缺口(gaps)。
ATR 不是预测工具,也不是方向性信号。它仅总结 近期已实现的价格波动性。当市场环境变化时,相同的 ATR 水平可能对应着不同的市场状态。
核心公式(TR 与 ATR)
大多数 ATR 的计算遵循以下结构:
- 计算每个周期的真实波幅(TR)
对于给定周期 t,TR 是以下三个数值中的最大值:
- 区间范围:(High_t - Low_t)
- 相对于前收盘的上涨缺口:( |High_t - Close_{t-1}| )
- 相对于前收盘的下跌缺口:( |Low_t - Close_{t-1}| )
因此: [ TR_t = \max\big((High_t - Low_t),\ |High_t - Close_{t-1}|,\ |Low_t - Close_{t-1}|\big) ]
- 在回溯窗口内对 TR 取平均,得到 ATR
设回溯周期长度为 N 个周期。该周期内的 ATR 可通过以下平均值计算: [ ATR_t = \frac{1}{N} \sum_{i=0}^{N-1} TR_{t-i} ]
某些系统也使用 平滑/近期加权 方法计算 ATR,但其核心数据依赖关系相同:即基于 最高价、最低价 和 前一周期收盘价 计算出的 TR 值。
所需输入与假设
要计算 ATR,你需要一致的 周期性 OHLC 数据(开盘价、最高价、最低价、收盘价),或至少需要连续周期的 最高价、最低价 和 收盘价。
必需参数:
- 时间周期/周期定义(例如日线、1 小时线)。ATR 的数值取决于“一个周期”所代表的时间长度。
- 回溯周期长度 N(例如实践中常用 14 个周期,但计算本身只要求选定某个 N 值)。
- 对齐 Close_{t-1} 的方法:必须确保前一周期的收盘价来自数据集中紧邻的前一个周期。
计算时必须明确的假设:
- 你的 OHLC 价格基于同一交易品种和相同的交易时段规则。
- 你使用的四舍五入/精度规则与对比系统一致。
- 需谨慎处理首个周期:计算第一个 TR 值需要 Close_{t-1},因此若无前一周期收盘价,则无法计算 TR。
简单计算示例(含明确假设)
假设你在周期 t 计算 TR,并使用前一周期 t−1 的数据。
假设:
- 前一周期收盘价 (Close_{t-1} = 1.1000)
- 当前周期最高价 (High_t = 1.1080)
- 当前周期最低价 (Low_t = 1.1020)
计算三个候选值:
- (High_t - Low_t = 1.1080 - 1.1020 = 0.0060)
- (|High_t - Close_{t-1}| = |1.1080 - 1.1000| = 0.0080)
- (|Low_t - Close_{t-1}| = |1.1020 - 1.1000| = 0.0020)
则: [ TR_t = \max(0.0060, 0.0080, 0.0020) = 0.0080 ]
若你的回溯周期为 N = 3,则需对 (TR_t)、(TR_{t-1}) 和 (TR_{t-2}) 取平均,以得到时间 t 的 ATR。
局限性与常见错误
-
ATR 衡量的是波动幅度,而非方向
ATR 无法告诉你价格是上涨还是下跌。两个周期可能具有相同的 ATR,但其价格走势和结构完全不同。 -
ATR 高度依赖所选时间周期
改变周期长度(例如使用 1 小时线而非日线)会改变 TR 序列,从而改变 ATR。若不进行调整,无法在不同时间周期之间直接比较 ATR 值。 -
回溯周期长度影响“响应速度”
较短的 N 值对 TR 的近期变化反应更快,而较长的 N 值则会平滑波动。若用 ATR 进行比较,必须确保“同类可比”:即相同时间周期、相同 N 值、相同 TR 定义。 -
数据质量与交易时段对齐可能扭曲 TR
由于 TR 使用最高价、最低价和前一周期收盘价,若 K 线构造不一致(如缺失周期、节假日缺口、不同交易时段截断),可能导致人为缺口,从而夸大 TR。 -
历史 ATR 水平不能保证未来行为
即使 ATR 过去呈现上升或下降趋势,也不能保证未来会重复相同模式。ATR 反映的是近期已实现的波动性,而非结构性规律。
如何独立验证 ATR
要验证你的 ATR 计算结果,可使用相同的 OHLC 输入数据独立复现:
- 选择特定时间周期和回溯长度 N。
- 对每个周期,严格按照三个候选值的最大值计算 (TR_t)。
- 对最近 N 个 TR 值取平均(或使用参考平台所用的相同平滑方法)。
- 确认边界处理:首个需要 Close_{t-1} 的 TR 值,以及首个需要足够 TR 观测值的 ATR 值。
若你计算的 ATR 与某工具结果不一致,最常见的原因是:时间周期不匹配、N 值不同、TR 定义变体(罕见但可能),或平滑/初始化方式不同。
一个值得思考的后续问题
在比较不同来源的 ATR 时,请问:两者是否使用了相同的时间周期、相同的回溯长度,以及相同的平滑方法(如有)?