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 |
运行效果: