MACD策略是如何计算的?
直接答案
MACD(“移动平均收敛发散”)是基于同一价格序列计算的两个指数移动平均线(EMA)得出的。基本步骤为:计算快EMA、计算慢EMA,两者相减得到MACD线,对MACD线再计算EMA得到信号线,最后用MACD减去信号线得到柱状图。
“MACD策略”通常指将这些MACD数值作为规则逻辑的输入(例如,比较MACD线与其信号线,或分析柱状图变化)。其核心计算即上述指标数学公式。
机制与定义
1) 选择输入价格序列
首先,确定计算中的“价格”含义。常见选择包括收盘价,有时也使用平均价格。选定输入序列后,必须在整个MACD计算中一致地使用该序列。
任何示例的前提假设:所有计算使用固定频率采样的单一价格时间序列(例如,每根K线的收盘价)。若数据频率或序列改变,MACD值也会随之改变。
2) 计算快慢EMA
设:
n_fast= 快EMA周期(参数)n_slow= 慢EMA周期(参数)P_t= 时间t的选定价格
EMA是一种加权移动平均,赋予近期数据更高权重。在多数定义中,EMA可递归表示为:
EMA_fast(t) = EMA_fast(t-1) + α_fast * (P_t - EMA_fast(t-1))EMA_slow(t) = EMA_slow(t-1) + α_slow * (P_t - EMA_slow(t-1))
其中平滑因子α_fast和α_slow取决于周期长度:
α_fast = 2 / (n_fast + 1)α_slow = 2 / (n_slow + 1)
初始化说明(重要限制):EMA需要初始值。不同平台可能采用不同初始化方式(例如,从首个价格开始,或用简单移动平均作为初始EMA)。这意味着早期MACD值在不同实现中可能不完全一致。
3) 计算MACD线
时间t的MACD线为快慢EMA之差:
MACD(t) = EMA_fast(t) - EMA_slow(t)
该差值可正可负,其大小取决于价格尺度和所选EMA周期。
4) 计算信号线(MACD的EMA)
设n_signal为信号EMA周期(参数)。信号线是对MACD序列应用EMA:
Signal(t) = Signal(t-1) + α_signal * (MACD(t) - Signal(t-1))α_signal = 2 / (n_signal + 1)
同样,信号EMA也需要初始化方法。
5) 计算柱状图
柱状图突出显示MACD线与其信号线之间的距离:
Histogram(t) = MACD(t) - Signal(t)
若柱状图为正,MACD在信号线上方;若为负,则在下方。
参数总结
MACD计算依赖三个主要周期:
n_fast(快EMA周期)n_slow(慢EMA周期)n_signal(信号EMA周期)
还依赖于:
- 所选价格序列
P_t - EMA在实现中的初始化方式
- 数据的采样频率
可验证的证据或示例
以下为使用简化假设的通用数值示例,可供复现。
假设:
- 使用时间
t = 1..6的短价格序列 n_fast = 3,n_slow = 6,n_signal = 2- 使用EMA递归公式并选择一种初始化方式(需一致使用)
选取输入价格序列(示例值):
P_1, P_2, P_3, P_4, P_5, P_6
步骤A:计算α_fast = 2/(3+1) = 0.5,α_slow = 2/(6+1) ≈ 0.2857。
步骤B:初始值设定。
- 一种方式为
EMA_fast(1) = P_1,EMA_slow(1) = P_1。
步骤C:对t = 2..6迭代:
EMA_fast(t) = EMA_fast(t-1) + 0.5*(P_t - EMA_fast(t-1))EMA_slow(t) = EMA_slow(t-1) + 0.2857*(P_t - EMA_slow(t-1))
步骤D:MACD线:
MACD(t) = EMA_fast(t) - EMA_slow(t)(对每个t)
步骤E:信号线:
α_signal = 2/(2+1) = 2/3 ≈ 0.6667- 设
Signal(1) = MACD(1)(或其他一致初始化),然后迭代:Signal(t) = Signal(t-1) + 0.6667*(MACD(t) - Signal(t-1))
步骤F:柱状图:
Histogram(t) = MACD(t) - Signal(t)。
计算时应注意:
- 改变
n_fast、n_slow或n_signal会影响MACD和信号线的平滑度与滞后性。 - 柱状图非独立序列,而是由MACD与信号线数学推导得出。
若计算结果与图表工具不符,最常见原因为EMA初始化方式、价格字段(收盘价vs典型价)或参数解释不同。
局限性与风险(实质性失效模式)
1) EMA初始化差异
由于EMA需要初始值,不同软件在序列初期可能产生略有不同的MACD值。这可能传递至信号EMA和柱状图,尤其在短数据集上更明显。
2) 参数敏感性
MACD直接依赖n_fast、n_slow和n_signal。微小变化可能改变:
- 振幅(数值大小)
- 时机(MACD响应速度)
- 转折点频率
因此,若在不同参数集间比较MACD值,结果可能产生误导。
3) 价格序列与时间频率选择
MACD基于特定输入序列P_t和采样间隔计算。若使用不同价格定义或时间框架,结果指标值将不匹配。
4) 使用MACD制定规则无法消除不确定性
即使指标计算正确,将其转化为决策仍引入不确定性。实盘结果受多种MACD公式外因素影响(如执行质量、市场状况、操作成本)。历史关系不保证未来结果。
验证与后续检查
为独立验证你(或服务商)是否正确计算MACD,可执行以下步骤,无需依赖交易建议:
- 确认确切的输入价格序列(例如,收盘价)和数据频率。
- 确认快EMA、慢EMA和信号EMA的参数值。
- 使用你认为实现所采用的相同初始化方法重新计算EMA。
- 计算
MACD = EMA_fast − EMA_slow,再计算Signal为MACD的EMA,最后计算Histogram = MACD − Signal。
在任何“MACD策略”讨论中值得进一步澄清的问题:在MACD值之上应用了何种规则逻辑(例如,哪些比较或柱状图条件)?计算在给定输入下是确定性的,而策略层决定如何解释这些数值。