ADX 策略是如何计算的?
直接答案
基于 ADX 的“趋势强度”值是通过结合以下三项从价格变化中计算得出的:(1) 两个方向上的方向性移动,(2) 称为真实波幅(true range)的波动性度量,(3) 在一个回溯周期内的平滑处理。结果是一条单一曲线(通常称为 ADX),当方向性移动持续强劲时上升,而在较弱时下降。
机制或定义
计算试图衡量的内容
ADX 类型的指标将原始价格变动转化为两个中间概念:
- 方向性移动:最近的高/低价变动中,有多少属于“向上”与“向下”。
- 波动性归一化:使用真实波幅(true range)衡量该变动相对于整体交易区间的大小。
然后将这些数据合并为方向性指标,最终得出ADX,其目的是表示趋势强度,而非趋势方向。
所需输入(数据要求)
要进行计算,你需要至少包含以下内容的时间序列数据:
- 最高价(High)
- 最低价(Low)
- 收盘价(Close)
至少需要足够的K线数量以完成回溯周期和平滑计算。如果历史K线数据不足,早期的值将未定义,或需积累足够数据后才能生成。
核心中间步骤(一种常见形式)
以下是常见的逐步结构。不同的图表软件可能使用略有不同的平滑方法,但核心组件相同。
1) 计算方向性移动分量
对于每个K线 t(从第二根K线开始),将当前K线的高/低价与前一根K线比较:
- 向上变动(Up move):当前最高价与前一根最高价比较。
- 向下变动(Down move):前一根最低价与当前最低价比较(通常视为下降)。
方向性移动随后被拆分,每根K线仅有一个方向贡献:
- +DM:当“向上”分量强于“向下”分量时,取“向上”分量。
- -DM:当“向下”分量强于“向上”分量时,取“向下”分量。
其余情况设为零。这种“选择主导方向”的规则很重要:防止同一根K线同时计入两个方向。
2) 计算真实波幅(TR)
真实波幅衡量价格移动的距离,并考虑跳空。标准定义基于三个候选值:
- 当前最高价减去当前最低价
- 当前最高价与前一收盘价之差的绝对值
- 当前最低价与前一收盘价之差的绝对值
TR 是这三个候选值在K线 t 上的最大值。
3) 在回溯周期内对 +DM、-DM 和 TR 进行平滑处理
ADX 计算通常不会每次都使用原始总和,而是对周期 N(通常称为回溯周期)应用平滑处理。平滑方法(通常是 Wilder 风格)会更新累计值,而不是每根K线都重新从头计算。
你可以理解为:
- 计算平滑后的 +DM 总和
- 计算平滑后的 -DM 总和
- 计算平滑后的 TR 总和
具体的平滑公式很重要,因为它会影响响应速度。
4) 计算方向性指标(+DI 和 -DI)
方向性指标通过将方向性移动除以平滑后的真实波幅,转换为类似百分比的数值:
- +DI = (平滑后的 +DM / 平滑后的 TR) × 100
- -DI = (平滑后的 -DM / 平滑后的 TR) × 100
如果平滑后的 TR 为零(在极端数据中罕见但可能发生),则除法未定义;实现时应妥善处理此情况。
5) 计算 DX(方向性指数)和 ADX
一个常见的中间步骤是:
- DX = (|+DI − -DI| / (+DI + -DI)) × 100
然后 ADX 是 DX 在回溯周期内的平滑平均值:
- ADX = DX 的平滑平均值
这会产生一条单一曲线:当 +DI 与 -DI 持续分离(一个方向占主导)时上升,当它们趋近时下降。
证据或示例
一个最小化的工作示例设置(含假设)
为了验证理解,你可以使用一个短窗口进行简单的“纸面验证”。假设你选择一个回溯周期 N,然后从第1根K线开始计算。
- 选择一个固定的 N(例如,14),并确保你至少有 N + 1 根K线。
- 对于第一根之后的每根K线:
- 使用向上/向下变动比较规则计算 +DM 和 -DM。
- 将三个 TR 候选值的最大值作为 TR。
- 对 +DM、-DM 和 TR 应用选定的平滑方法。
- 使用平滑后的值计算 +DI 和 -DI。
- 计算 DX,然后将 ADX 计算为 DX 的平滑平均值。
任何示例都必须明确的假设:
- 你使用特定的平滑约定。
- 你使用的索引(K线 t 和 t−1 的定义)与数据源一致。
由于不同平台可能以不同方式实现平滑细节,即使整体结构相同,数值输出也可能存在差异。
限制与风险
1) 趋势强度,而非方向
ADX 类型的输出旨在表达方向性移动的强度,而非自动指示未来价格方向。高值可能出现在上升趋势或下降趋势中;方向通常通过 +DI 与 -DI 的关系推断,而非仅靠 ADX。
2) 参数敏感性
回溯周期和平滑选择会显著影响行为:
- 较短周期通常对近期变动反应更快。
- 较长周期通常更能平滑噪音,但可能滞后。
这会影响指标上升或下降的频率,以及对市场状态变化的响应速度。
3) 数据与实现的失效模式
常见的实际问题包括:
- 历史数据不足:早期 ADX 值可能未定义或基于不完整窗口。
- 定义不同:DM 分配或 TR 的替代公式可能导致结果偏移。
- 索引错误:混淆K线顺序(时间序列)或使用错误的前收盘价引用,会导致计算错误。
4) 波动性与噪音
由于该计算通过真实波幅对方向性移动进行归一化,它可能对波动性飙升敏感。在震荡或高波动条件下,+DI 和 -DI 可能频繁交替,这可能降低单个 ADX 读数的解释价值。
验证或下一步问题
为独立验证你的理解,请执行以下检查清单:
- 确认你的数据源提供时间有序的最高价、最低价、收盘价序列,且无缺失K线。
- 写下目标平台使用的精确公式:
- +DM 和 -DM 规则
- TR 定义
- 平滑方法
- 在一个小样本窗口上重新计算 ADX,并比较中间输出(+DI、-DI、DX),而不仅仅是最终曲线。
如果你想更进一步,一个有用的后续问题是:设置如何改变指标的响应性和尺度(回溯周期和平滑),或 ADX 类型读数如何与 +DI 和 -DI 结合解读。