ADX 和移动平均线的计算方法:公式、输入与验证
ADX 和移动平均线是什么?它们之间有何关联?
ADX 和移动平均线是两个独立的技术指标,通常被结合使用。
- 移动平均线(MA) 是一条基于价格数据生成的平滑曲线。它通过取历史价格的平均值来降低噪音。最常见的是使用收盘价,但根据实现方式不同,也可应用于其他价格源(例如开盘价、最高价、最低价或中间价)。
- ADX(平均趋向指数) 是衡量趋势强度的指标,而非方向。它基于方向性移动和真实波幅构建,再经过平滑和平均处理形成指数。
这些指标本身并不“预测”未来走势,而是反映在特定计算规则下过去价格行为的表现。
移动平均线的计算(核心机制)
输入与参数
要计算移动平均线,您需要:
- 一个价格序列:通常为每个时间段的收盘价。
- 一个回溯周期长度(常称为周期或窗口),记作 N。
- 可选的平滑方法。
简单移动平均线(SMA)
最常见的基准是 N 期的简单移动平均线(SMA)。
设 (P_t) 为时间 (t) 的选定价格,则时间 (t) 的 SMA 为:
[ \text{SMA}t = \frac{1}{N}\sum{i=0}^{N-1} P_{t-i} ]
这意味着时间 (t) 的 MA 是过去 N 个价格值(包括 (t))的平均值。
指数移动平均线(EMA)(常用替代方案)
许多图表系统还提供 EMA,它对近期价格赋予更高权重。典型的 EMA 形式使用一个平滑因子:
- (\alpha = \frac{2}{N+1})
然后:
[ \text{EMA}t = \alpha P_t + (1-\alpha)\text{EMA}{t-1} ]
EMA 仍使用 N,但它不是每次重新计算完整平均值,而是基于前一个 EMA 值进行更新。
实际计算验证
要验证 MA 的计算:
- 确认使用了相同的价格源和相同的 N 值。
- 确认索引:MA 值仅在有足够的K线后才开始出现(SMA 至少需要 N 个数据点;EMA 仍需选择初始值)。
- 对于 EMA,确认平台如何初始化第一个 EMA 值(不同工具可能选择不同的起始点)。
ADX 的计算(核心机制)
ADX 使用多个中间序列。最标准的工作流程包括方向性移动(DM)、真实波幅(TR)、平滑处理,最后得到平均方向性强度。
第一步:计算方向性移动(+DM 和 -DM)
设时间 (t) 的最高价、最低价、收盘价分别为 (H_t)、(L_t) 和 (C_t)。
根据从 (t-1) 到 (t) 的变化计算方向性移动:
- 上涨幅度:(U_t = H_t - H_{t-1})
- 下跌幅度:(D_t = L_{t-1} - L_t)
然后定义:
[ +DM_t = \begin{cases} U_t, & \text{如果 } U_t > D_t \text{ 且 } U_t > 0 \ 0, & \text{否则} \end{cases} ]
[ -DM_t = \begin{cases} D_t, & \text{如果 } D_t > U_t \text{ 且 } D_t > 0 \ 0, & \text{否则} \end{cases} ]
不同实现方式在边缘情况处理上可能略有差异,但总体思路是:仅当上涨幅度占优时才记录正向移动,仅当下跌幅度占优时才记录负向移动。
第二步:计算真实波幅(TR)
真实波幅用于衡量相对于前一个收盘价的波动性。常见定义为:
[ \text{TR}t = \max\Big( H_t - L_t,; |H_t - C{t-1}|,; |L_t - C_{t-1}| \Big) ]
第三步:对 TR 和 DM 值进行平滑处理
ADX 通常使用回溯周期长度(通常记作 N,常称为“周期”)进行平滑处理。经典方法是 Wilder 式平滑。
设 (\text{TRS}_t)、(\text{+DMS}_t) 和 (-\text{DMS}_t) 表示平滑后的值。
一种常见的 Wilder 平滑形式为:
- 初始平滑值通常为前 N 个原始值的总和。
- 然后对于 (t > N):
[ \text{TRS}t = \text{TRS}{t-1} - \frac{\text{TRS}_{t-1}}{N} + \text{TR}_t ]
[ \text{+DMS}t = \text{+DMS}{t-1} - \frac{\text{+DMS}_{t-1}}{N} + \text{+DM}_t ]
[ \text{-DMS}t = \text{-DMS}{t-1} - \frac{\text{-DMS}_{t-1}}{N} + \text{-DM}_t ]
由于不同工具的初始化方式不同,验证 ADX 通常需要匹配确切的平滑方法和起始K线索引。
第四步:将平滑值转换为方向性指标
计算方向性强度指标:
[ +DI_t = 100\times \frac{\text{+DMS}_t}{\text{TRS}_t} ]
[ -DI_t = 100\times \frac{\text{-DMS}_t}{\text{TRS}_t} ]
第五步:计算 DX 和 ADX
方向性指数:
[ \text{DX}_t = 100\times \frac{|(+DI_t) - (-DI_t)|}{(+DI_t) + (-DI_t)} ]
然后 ADX 对 DX 值在一定周期内取平均(通常与上述 N 相同),得到:
[ \text{ADX}_t = \text{N 个周期内 DX 的平均值(采用选定的平滑方法)} ]
许多实现方式在初始平均后对 ADX 使用 Wilder 平滑。具体的平均/平滑步骤是不同计算器行为可能产生差异的另一个地方。
实证或示例:在明确假设下逐步重新计算
由于公式是代数形式,最可靠的“证据”是使用一小段历史 OHLC 数据和相同参数设置手动重新计算。
以下是一种不依赖任何市场结果的验证方法:
- 为 ADX 选择固定的窗口长度 (N),并确认 (N) 与您使用的图表工具中的“周期”一致。
- 在选定的时间 (t),根据 (H_t, H_{t-1}, L_t, L_{t-1}) 计算 (U_t) 和 (D_t)。
- 使用主导性和正值规则计算 (+DM_t) 和 (-DM_t)。
- 根据 (H_t, L_t, C_{t-1}) 计算 (\text{TR}_t)。
- 使用您工具所用的相同平滑方法,计算平滑后的 (\text{+DMS}_t)、(-\text{DMS}_t) 和 (\text{TRS}_t)。
- 计算 (+DI_t)、(-DI_t),然后是 (\text{DX}_t),最后使用工具的平均/平滑步骤计算 ADX 值。
对于移动平均线:
- 使用相同的 (N) 和相同的价格源。
- 通过取最近 N 个值的平均值重新计算 SMA,或通过应用 (\alpha) 并从前一个 EMA 更新来计算 EMA。
如果您的计算结果与图表显示不一致,差异通常来自以下之一:
- DM 和 TR 边缘情况的定义不同。
- 平滑方法不同(Wilder vs EMA 类似 vs 其他)。
- 第一个平滑值的初始化方式不同。
- 移动平均线所用价格源不同。
局限性与风险:计算可能误导或失败的情况
指标机制不能保证解释的正确性
ADX 的设计目的是在其公式下表达趋势强度,但其量表和含义取决于上下文。高值或上升的 ADX 并不自动意味着趋势方向将持续。
同样,移动平均线虽然能平滑噪音,但可能滞后于价格。如果您选择分析价格与 MA 的“距离”,该距离仍然是基于历史数据得出的。