MACD,中文名称为指数平滑移动平均线,是最常用的技术指标之一。该指标由双指数移动平均线发展而来,其意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势。与双指数移动平均线相比,MACD采用红绿柱的表现形式,阅读起来更加方便。其计算方法如下:
1、由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到DIF;
2、计算DIF的9日指数移动平均线DEA;
3、MACD = 2×(DIF - DEA)。
值得注意的是,在一般的计算方法中,DIF是EMA12和EMA26之间的绝对差别,即DIF = EMA12 – EMA26,但是这种算法易受股价大小的影响,在对股价进行除权或复权操作后,尽管K线走势没有变化,但DIF的值也会随着除权或复权产生相应的变化;为了避免这种变化,DIF也可以考虑EMA12和EMA26之间的相对差别,即DIF = EMA12/EMA26 × 100 - 100。
在R语言中,MACD可以通过TTR包中的MACD函数计算。MACD函数的输出值有两个:macd和signal。但是这里的macd其实并不是各种常用股票软件中显示的MACD,而是DIF,而signal实际上是DEA。
MACD函数的用法如下:
MACD(x, nFast = 12, nSlow = 26, nSig =9, maType, percent = TRUE, ...)
x:要处理的数据,可以是xts格式,也可以是matrix格式或vector格式;
nFast:快速平均线的计算天数;
nSlow:慢速平均线的计算天数;
nSig:计算DEA时的平均线计算天数;
maType:计算平均线的方法,默认为指数平均,即EMA;
percent:默认为TRUE,即计算DIF时采用相对差别的方法。
下面我们使用上证指数进行一下实际运算:
# 使用Wind下载上证指数
library(WindR)
w.start()
data_wind <- w.wsd(codes ='000001.SH', fields = 'open,high,low,close', startdate = '20100101', enddate ='20180327')
stock <- data_wind$Data
stock_use <- xts(stock$CLOSE,order.by = as.Date(stock$DATETIME))
# 使用TTR包计算MACD
li