标准化平均真实波动指标(Normalized ATR):统一量纲后的市场波动利器
在金融市场中,波动性 是衡量风险与机会的核心指标。然而,不同品种、不同价格等级的波动性常常难以直接比较。为了解决这一问题,标准化平均真实波动指标(Normalized Average True Range,简称 Normalized ATR) 应运而生。
本文将深入解析 Normalized ATR 的原理、pandas_ta
的使用方法,以及其在趋势强度判断、策略过滤与跨品种比较中的实战优势。
一、Normalized ATR 是什么?
Normalized ATR 是对经典的 Average True Range(ATR) 的进一步扩展,它的目标是:
将真实波动幅度(True Range)标准化,使其适用于不同价格水平的资产比较与分析。
传统 ATR 是绝对值,在高价资产中常常显得大,而在低价资产中偏小,无法横向比较。而 Normalized ATR 引入了一个归一化因子(scalar),通常是将 ATR 表示为占价格的一定百分比,使其具备跨品种适用性。
二、pandas_ta 中的参数说明
pandas_ta
中的 natr()
方法即为 Normalized ATR,支持以下参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
high |
Series | 最高价序列 | 必需 |
low |
Series | 最低价序列 | 必需 |
close |
Series | 收盘价序列 | 必需 |
length |
int | 计算 ATR 的周期 | 20 |
scalar |
float | 标准化比例倍数,一般设为 100(表示百分比) | 100 |
mamode |
str | 移动平均模式,如 "ema"、"sma" | "ema" |
prenan |
bool | 是否将初始空值设置为 NaN | False |
offset |
int | 平移输出结果 | 0 |
返回值
-
返回一个单列 Series,默认列名为:
NATR_20
三、Normalized ATR 的计算原理
✅ 第一步:计算 True Range
True Range 是以下三者的最大值:
- High - Low
- High - Previous Close(绝对值)
- Low - Previous Close(绝对值)
$$ \text{TR}_t = \max(\text{High}_t - \text{Low}_t, |\text{High}t - \text{Close}{t-1}|, |\text{Low}t - \text{Close}{t-1}|) $$
✅ 第二步:计算 ATR(平均真实波动)
ATR 为 TR 的移动平均,通常使用指数移动平均(EMA):
$$ \text{ATR}_t = EMA(\text{TR}_t, \text{length}) $$
✅ 第三步:标准化 ATR
将 ATR 除以收盘价,再乘以 scalar(如 100),得到标准化的百分比波动:
$$ \text{NATR}_t = \left( \frac{\text{ATR}_t}{\text{Close}_t} \right) \times \text{scalar} $$
四、Python 实战:使用 pandas_ta 快速调用 Normalized ATR
import pandas as pd
import pandas_ta as ta
import matplotlib.pyplot as plt
# 加载数据
df = pd.read_csv("AAPL.csv", index_col="Date", parse_dates=True)
# 计算标准化 ATR
df["NATR_20"] = ta.natr(high=df["High"], low=df["Low"], close=df["Close"], length=20, scalar=100)
# 可视化
plt.figure(figsize=(14, 6))
plt.plot(df["NATR_20"], label="标准化ATR (NATR_20)", color="blue")
plt.title("标准化平均真实波动指标(Normalized ATR)")
plt.axhline(y=2.5, linestyle="--", color="red", label="高波动阈值")
plt.grid(True)
plt.legend()
plt.show()
五、Normalized ATR 的交易策略应用
✅ 趋势强度过滤器
- 在趋势策略中,避免在波动性过低(如 NATR < 1.5%)时进场;
- 可在 NATR 突破某一阈值(如 2.5%)时视为“市场正在启动”。
✅ 回测条件筛选器
-
可在策略中作为筛选条件:
- 只交易 NATR 位于中等水平的时段;
- 规避临近财报等高波动时段。
✅ 跨资产比较
- 不同标的(如黄金 vs 原油 vs 比特币)因价格基数不同,ATR 差异大;
- 使用 Normalized ATR 后,可将它们的波动风险水平统一在一个尺度内进行比较与风控。
六、与其他波动指标对比
指标名称 | 类型 | 是否标准化 | 核心用途 |
---|---|---|---|
ATR | 绝对数值 | ❌ 否 | 波动性原始判断 |
Normalized ATR | 百分比 | ✅ 是 | 标准化波动分析 |
Bollinger Width | 相对宽度 | ✅ 是 | 区间扩张检测 |
Historical Volatility | 百分比 | ✅ 是 | 年化波动估算 |
Normalized ATR 的最大优势是 统一量纲,增强可比较性与策略适配性。
七、总结:Normalized ATR 是波动分析的标准武器
- 📏 标准化输出:方便在不同资产和价格区间中横向比较;
- 📉 风险预警系统:用于波动性过滤与风控设置;
- 🔧 与趋势策略兼容:配合 EMA、MACD 等指标使用效果更佳;
- ⚙️ 一行代码调用:
pandas_ta.natr()
即可快速部署。