具体计算公式及例子如下:
EMA(12)= 前一日EMA(12)×11/13+今日收盘价×2/13
EMA(26)= 前一日EMA(26)×25/27+今日收盘价×2/27
DIFF=今日EMA(12)- 今日EMA(26)
DEA(9)= 前一日DEA×8/10+今日DIF×2/10
BAR=2×(DIFF-DEA(9))
MACD在应用上,,先计算出快速移动平均线即12日的EMA1,和慢速移动平均线,即26日的EMA2,,以这两个数值之间的差值得出DIFF,,然后再求出DIFF的9日平滑移动平均线DEA(9),最后得出MACD=2×(DIFF-DEA(9)). 。
<1>计算12日和26日移动平均线EMA1和EMA2当日EMA(12)=前一日EMA(12)×11/13+当日收盘价×2/13当日EMA(26)=前一日EMA(26)×25/27+当日收盘价×2/27
<2>计算离差值(DIFF)DIFF=当日EMA(12)-当日EMA(26)
<3>计算9日离差平均值DEA当日DEA(9)=前一日DEA×8/10+当日DIFF×2/10
<4>计算MACD=2×(DIFF-DEA(9))
<5>新股上市首日,初始化ema12=当日收盘价,ema26=当日收盘价 , 其DIFF,DEA以及MACD都为0
close = [9.63, 8.54, 9.45, 8.58, 9.15, 11.82, 11.64, 11.29, 11.21, 11.74, 13.11, 12.24, 12.09, 12.22, 12.44, 14.61, 14.24, 15.16, 15.98, 15.03, 17.34, 17.18, 16.31, 16.8, 17.82, 18.68, 18.53, 18.25, 18.43, 19.19, 16.42, 17.32, 16.19, 16.14, 17.97, 14.33, 14.6, 14.05, 15.17, 14.23, 13.98, 13.25, 13.75, 13.75, 12.62, 11.15, 10.92, 11.46, 10.04, 11.04] ema12 = [] #短期移动平均线(12日) ema26 = [] #长期移动平均线(26日) diff = [] #diff = EMA(12)-EMA(26) dea9 = [] #DEA(9)= 前一日DEA×8/10+今日DIF×2/10 macd = [] #MACD=2×(DIFF-DEA(9)) #EMA(12)= 前一日EMA(12)×11/13 +当日收盘价×2/13 # EMA(26)= 前一日EMA(26)×25/27+当日收盘价×2/27 for i in range(len(close)): if 0==i: ema12.append(close[i]) ema26.append(close[i]) else: ema12.append(ema12[i-1]*(11/13)+close[i]*(2/13)) ema26.append(ema26[i-1]*(25/27)+close[i]*(2/27)) #DIFF=当日EMA(12)- 当日EMA(26) diff = list(map(lambda x:x[0]-x[1],zip(ema12,ema26))) #DEA(9)= 前一日DEA×8/10+今日DIF×2/10 for i in range(len(diff)): if 0==i: dea9.append(diff[i]) else: dea9.append(dea9[i-1]*(8/10)+diff[i]*(2/10)) macd = list(map(lambda x:2*(x[0]-x[1]),zip(diff,dea9)))