MACD(指数平滑异同移动平均线)

MACD 即指数平滑异同移动平均线(Moving Average Convergence Divergence,macd)是股票交易中一种常见的技术分析工具,是从双移动平均线发展而来的,由 Gerald Appel 于 1970 年代提出,用于研判价格或指数变化的强度、方向、能量以及趋势周期,以便把握买进和卖出的时机。

MACD 利用收盘价的短期(常用为 12 日)指数移动平均线(EMA)与长期(常用为 26 日)指数移动平均线 (EMA) 之间的聚合与分离状况,对买进、卖出时机作出研判。

计算方法:
1、 离差值 DIF:
MACD _DIF=EMA(收盘价,12)-EMA(收盘价,26),EMA 采用收盘价计算
2、 根据离差值 DIF 计算其 9 日的 EMA,即离差平均值,是所求的 MACD 值。为了不与指标原名相混淆,此值又名 DEA 或 DEM。
MACD_DEA = EMA(MACD_DIF, 9)
3、 MACD 柱状值 = 2 *(MACD_DIFF - MACD_DEA)
故 MACD 指标是由两线一柱组合起来形成,快速线为 DIF,慢速线为 DEA,柱状图为 MACD。

例如计算浦发银行 2024 年的 [12,26,9] 日 MACD 值:


A
1 600000
2 2024-01-01
3 2024-12-31
4 =call("adjustprice.splx", "", call("loadkday.splx", A1, A2,A3) )
5 =call@f("index.splx")
6 =ema(A4,"close",12)
7 =ema(A4,"close",26)
8 =A4.new(code,tdate,A6(#).ema_12-A7(#).ema_26:macd_dif)
9 =ema(A8,"macd_dif",9)
10 =A8.derive(A9(#).ema_9:macd_dea,2*(macd_dif-macd_dea):macd)

A1-A4 读取股票数据

A5 登记 index.splx 脚本中的函数

A6-A7 计算短期和长期 ema

A8 计算 macd_dif

A9 计算 macd_dif 的 9 日 ema

A10 计算 macd_dea 和 macd

..

也可以将 macd 的计算方法封装为脚本 macd.splx,使用起来更加方便。

脚本代码:


A
1 =call@f("index.splx")
2 =ema(data,field,N(1))
3 =ema(data,field,N(2))
4 =data.new(code,tdate,A2(#).ema_${N(1)}-A3(#).ema_${N(2)}:macd_dif)
5 =ema(A4,"macd_dif",N(3))
6 =A4.derive(A5(#).ema_${N(3)}:macd_dea,2*(macd_dif-macd_dea):macd)

脚本参数:

data 序表,某支股票的日线数据
field 字符串,字段名如 "close"
N 序列,移动平均周期,如 [12,26,9]

返回数据集结构:

code 股票代码
tdate 日期
macd_dif 差离值 DIF
macd_dea 讯号线 DEA
macd MACD柱状值

例如调用脚本计算浦发银行 2024 年的 [12,26,9] 日 MACD 值:


A B
…… 读取股票数据
5 =call("macd.splx",A4,"close",[12,26,9]) 调用脚本计算 macd

运行效果:

..