MACD 和移动平均线的计算方法
直接答案
MACD(移动平均收敛发散指标)是基于选定价格序列的移动平均线计算得出的。在最常见的版本中,它使用同一输入价格的两个指数移动平均线(EMA):一个“快”EMA 和一个“慢”EMA。MACD 线是这两个 EMA 的差值。MACD 线的另一个 EMA 构成信号线,而直方图则是 MACD 线与信号线之间的差值。
在此上下文中,移动平均线是通过对定期采样的历史数据点应用加权规则来计算的。EMA 对近期数据赋予更高权重,因此相比单纯“随时间平均”的方法,MACD 反应更快。
机制或定义
1) 选择输入序列(用于平均的“价格”)
MACD 和移动平均线都需要一个定期采样的数值时间序列(例如,每根K线的收盘价)。常见的输入价格选择包括:
- 收盘价序列
- 其他价格组成部分(如开盘价、最高价、最低价或它们的平均值)
一旦选定输入序列,移动平均线的计算就是确定性的。
2) 移动平均线基础:EMA 公式
EMA 通过递归方式对时间序列进行平滑处理。
设输入序列为 (P_t),其中 (t) 表示时间步长。长度为 (N) 的 EMA 计算如下:
- 平滑因子:(\alpha = \frac{2}{N+1})
- 递归更新(在初始化之后): [ EMA_t = \alpha,P_t + (1-\alpha),EMA_{t-1} ]
初始化很重要。一种常见的实用初始化方法是使用第一个可用价格(或前 (N) 个点的简单平均值)来设定 (EMA_{N}) 或计算窗口中的最早 EMA 值。不同软件可能初始化方式略有不同,这可能导致早期数值出现偏差。
3) MACD 线与直方图(典型参数)
标准 MACD 结构包含三个绘制组件:
- MACD 线
- 信号线
- 直方图
设:
- (N_{fast}) 为快 EMA 长度
- (N_{slow}) 为慢 EMA 长度
- (N_{signal}) 为信号 EMA 长度
计算同一价格序列的两个 EMA:
- 使用 (N_{fast}) 计算 (EMA^{fast}_t)
- 使用 (N_{slow}) 计算 (EMA^{slow}_t)
然后 MACD 线为: [ MACD_t = EMA^{fast}_t - EMA^{slow}_t ]
接下来,将信号线计算为 MACD 线的 EMA: [ Signal_t = EMA(MACD)t\text{ 使用长度 }N{signal} ]
最后,直方图为差值: [ Histogram_t = MACD_t - Signal_t ]
这些公式展示了核心“机制”:MACD 不是单一移动平均线;它是两个移动平均线之间的差值,然后对该差值再应用另一个移动平均线。
证据或示例(带明确假设的计算步骤)
本示例的假设:
- 您有一个每根K线采样一次的时间序列 (P_t)。
- 使用收盘价作为 (P_t)。
- 选择 (N_{fast}=12)、(N_{slow}=26) 和 (N_{signal}=9) 作为典型长度。
逐步计算:
- 计算 (\alpha_{fast} = 2/(12+1)) 和 (\alpha_{slow} = 2/(26+1))。
- 创建 (EMA^{fast}t): [ EMA^{fast}t = \alpha{fast} P_t + (1-\alpha{fast}) EMA^{fast}_{t-1} ]
- 创建 (EMA^{slow}t): [ EMA^{slow}t = \alpha{slow} P_t + (1-\alpha{slow}) EMA^{slow}_{t-1} ]
- 在两个 EMA 都存在的时间点上计算 MACD 线: [ MACD_t = EMA^{fast}_t - EMA^{slow}_t ]
- 使用 (N_{signal}=9) 对 MACD 序列计算信号 EMA: [ Signal_t = \alpha_{signal} MACD_t + (1-\alpha_{signal}) Signal_{t-1} ] 其中 (\alpha_{signal} = 2/(9+1))。
- 计算直方图: [ Histogram_t = MACD_t - Signal_t ]
如果您独立实现这些步骤,并使用相同的输入序列 (P_t) 和相同的长度,应能重现相同的 MACD 结构。但如果使用不同的 EMA 初始化方法或不同的初始 EMA 定义,仍可能出现微小差异。
局限性和风险
-
参数敏感性 MACD 依赖于 (N_{fast})、(N_{slow}) 和 (N_{signal})。更改这些长度会改变值的响应速度和尺度,即使基础公式保持不变。
-
数据和对齐问题 MACD 计算需要一致的时间索引:
- 所有序列必须使用相同的采样频率。
- 所选输入价格序列必须与您的数据源和公式匹配。
- 如果在不同K线定义上计算 EMA(例如,“收盘价” vs. 其他价格),结果将不同。
-
历史数据不足和初始化问题 由于 EMA 需要先前的值,如果从数据集开头附近开始计算,早期 MACD 值可能不可靠。EMA 初始化选择(第一个值 vs. 前 (N) 个点的平均值)会影响早期读数。
-
解释失败模式 MACD 组件是数学变换;它们不会自动指示盈利或正确结果。应将其视为所选时间序列的描述性特征,而非独立的决策规则。
-
非平稳行为 市场时间序列可能随时间改变其统计特性(例如,波动率状态)。即使您的计算正确,相同的数值模式在不同状态下可能表现不同。
验证和下一个问题
要验证您自己的计算,请检查以下项目:
- 确认一致使用 EMA 平滑因子 (\alpha = 2/(N+1))。
- 确认使用相同的输入价格序列 (P_t)。
- 确保在计算信号 EMA 之前先应用 (MACD_t = EMA^{fast}_t - EMA^{slow}_t)。
- 确保直方图使用 (Histogram_t = MACD_t - Signal_t)。
- 将一小段计算值与第二个独立实现进行比较,以发现初始化或对齐差异。
如果需要,也可以查看当您更改输入价格或长度 (N_{fast})、(N_{slow}) 和 (N_{signal}) 时,MACD 的含义如何变化。您可以通过内部页面如 macd 和移动平均线 和设置如何改变 macd 和移动平均线设置如何变化 来探索相关解释。