K线技术指标实现详解—MACD

概念介绍

MACD称为指数平滑移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(通常为EMA12)减去慢的指数移动平均线(通常为EMA26)得到快线DIF;再用DIF的9日指数平滑移动得到慢线DEA;再用2×(快线DIF-加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。

EMA简介
EMA(Exponential Moving Average),指数平均数指标。也叫EXPMA指标,它也是一种趋向类指标,指数平均数指标是以指数式递减加权的移动平均。
1.计算公式:
EMAtoday=α * Pricetoday + ( 1 - α ) * EMAyesterday;
2.可变参数说明:
α为平滑指数,一般取作2/(N+1)。在计算MACD指标时,EMA计算中的N一般选取12和26天,因此α相应为2/13和2/27;在计算DEA时,EMA中的N一般选取为9天,即α为2/10。
3.初始化说明:
EMA1是没有定义的,通常情况下取EMA1为Price1,即数据的第一项填充为EMA的第一项。

计算及实现

计算公式

1.计算公式:
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD:(DIF-DEA)*2;
2.可变参数说明:
上式中,SHORT、LONG、MID是可变参数,三个参数都是EMA公式中α的取值(EMA计算公式在前文有介绍)。通常情况下,业内公认的三个取值为:12,26,9。
3.初始化说明:
通常DIF,DEA,MACD的初始值用0补足。不过这个0并不是刻意补上去的,而是根据EMA初始化规则,自然而然算出来的DIF,DEA,MACD初始值都为0。
4.计算举例:
以SHORT、LONG、MID参数取值为12,26,9为例,MACD的计算公式化简为:
EMA(12)=前一日EMA(12)X 11/13+今日收盘价X2/13;
EMA(26)=前一日EMA(26)X 25/27+今日收盘价X2/27;
DIF=EMA(12)-EMA(26);
DEA=(前一日DEA X 8/10+今日DIF X 2/10);
MACD=(DIF-DEA)*2;

代码实现

以下我们以一组股市K线数据为输入,来计算这组K线数据的MACD数据(编程使用JavaScript语言实现):

var input,macd;
var calcEMA,calcDIF,calcDEA,calcMACD;
/** K线数据* 开盘价,收盘价,最低价,最高价*/
input=[{open:3.89,close:3.89,low:3.86,high:3.93},{open:3.88,close:3.85,low:3.81,high:3.89},{open:3.85,close:3.91,low:3.82,high:3.95},{open:3.89,close:4.02,low:3.89,high:4.07},{open:4.04,close:4.05,low:4.00,high:4.08},{open:4.05,close:4.00,low:3.98,high:4.08},{open:4.00,close:4.00,low:3.97,high:4.04},{open:3.99,close:3.90,low:3.88,high:4.00},{open:3.89,close:3.90,low:3.88,high:3.92},{open:3.89,close:3.98,low:3.88,high:3.98},{open:3.99,close:3.98,low:3.95,high:4.03},{open:3.98,close:4.06,low:3.96,high:4.08},{open:4.08,close:4.08,low:4.02,high:4.08}
];/** 计算EMA指数平滑移动平均线,用于MACD* @param {number} n 时间窗口* @param {array} data 输入数据* @param {string} field 计算字段配置*/
calcEMA=function(n,data,field){var i,l,ema,a;a=2/(n+1);if(field){//二维数组ema=[data[0][field]];for(i=1,l=data.length;i<l;i++){ema.push(a*data[i][field]+(1-a)*ema[i-1]);}}else{//普通一维数组ema=[data[0]];for(i=1,l=data.length;i<l;i++){ema.push(a*data[i]+(1-a)*ema[i-1]);}}return ema;
};/** 计算DIF快线,用于MACD* @param {number} short 快速EMA时间窗口* @param {number} long 慢速EMA时间窗口* @param {array} data 输入数据* @param {string} field 计算字段配置*/
calcDIF=function(short,long,data,field){var i,l,dif,emaShort,emaLong;dif=[];emaShort=calcEMA(short,data,field);emaLong=calcEMA(long,data,field);for(i=0,l=data.length;i<l;i++){dif.push(emaShort[i]-emaLong[i]);}return dif;
};/** 计算DEA慢线,用于MACD* @param {number} mid 对dif的时间窗口* @param {array} dif 输入数据*/
calcDEA=function(mid,dif){return calcEMA(mid,dif);
};/** 计算MACD* @param {number} short 快速EMA时间窗口* @param {number} long 慢速EMA时间窗口* @param {number} mid dea时间窗口* @param {array} data 输入数据* @param {string} field 计算字段配置*/
calcMACD=function(short,long,mid,data,field){var i,l,dif,dea,macd,result;result={};macd=[];dif=calcDIF(short,long,data,field);dea=calcDEA(mid,dif);for(i=0,l=data.length;i<l;i++){macd.push((dif[i]-dea[i])*2);}result.dif=dif;result.dea=dea;result.macd=macd;return result;
};macd=calcMACD(12,26,9,input,"close");
console.log("DIF:",macd.dif);
console.log("DEA:",macd.dea);
console.log("MACD:",macd.macd);

输出结果如下:

需要额外说明的是,因为MACD(EMA、DIF、DEA)的初始值和后续数据的取值方式不同(初始值是直接定义的),因此MACD需要经过一定数据量的计算才能渐渐趋于有效。又因为累计计算的这一特性,MACD的初始值取值为什么往往对后续结果影响不大(比如初始值设为0或者50,两种数据算到一定数据量之后就趋近相等),类似的KDJ指标也具有类似的特性。

技术指标使用建议

注意!
每个技术指标都有很多种使用方法,不同行情下适用情况也不尽相同。笔者在此处只给出自己的一些使用心得,经验不多,见解也不是很深,仅供参考。

1.MACD技术指标的使用非常简单,并且综合来看,MACD指标是中长线投资者受用度、精准度都相对来说最高的技术指标,因此MACD可以说是入市投资必知的一项技术指标。对于MACD指标,当出现MACD金叉(DIF上穿DEA;或MACD柱状图由负转正)时,并且DIF线为正并向上移动,提示买入;反之,MACD死叉(DIF下窜DEA;或MACD柱状图由正转负)提示卖出。这项使用技巧对所有周期的K线图均适用。

熬夜不易,请作者喝杯酒!

K线技术指标实现详解—MACD相关推荐

  1. K线技术指标实现详解—筹码分布

    K线技术指标实现详解-筹码分布 概念介绍 筹码分布是主流炒股软件中必不可少的一项技术指标.筹码分布表明了对应K线下的股民持仓价格分布情况,能让投资者据以判断个股的未来走势(压力位和支撑位).下图展示了 ...

  2. 怎么看k线图_详解下降三角形

    在黄金白银的价格走势K线图中,下降三角形并不罕见,不过大家是否了解它的技术要点和市场含义呢? 下降三角形的形状的上升三角形恰好相反.贵金属价格在某一水平价位处出获得了一定的买盘支持,因此每回落到该水平 ...

  3. 指标详解(3)-- K线九转指标详解

    一.定义:九转序列是根据TD马克序列的思想产生的趋势叠加反弹指标,因徐小明的交易师而成为股海中的"网红". 二.实现图解:(来源于网络) 下九转形态: 上九转形态: 三.运用技巧: ...

  4. 高位在前低位在后是啥意思_详解MACD指标的死叉卖点:低位死叉+高位死叉+零轴附近死叉...

    MACD最经典最简单的的用法就是金叉死叉了,但是对于这样简单的用法,想必还是有很多的股民不知道如何运用,所以今天越声攻略就给大家详细的讲解下详解MACD指标的死叉卖点:低位死叉+高位死叉+零轴附近死叉 ...

  5. DDA画线算法+代码详解-直线扫描算法之一

    #DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...

  6. 机箱主板跳线接法详解(图) (机箱面板的POWER LED线,POWER SW线,HD线,RESET线,usb线)

    机箱主板跳线接法详解(图) 作为一名新手,要真正从头组装好自己的电脑并不容易,也许你知道CPU应该插哪儿,内存应该插哪儿,但遇到一排排复杂跳线的时候,很多新手都不知道如何下手. 钥匙开机其实并不神秘 ...

  7. Java多线程之volatile详解

    Java多线程之volatile详解 目录: 什么是volatile? JMM内存模型之可见性 volatile三大特性之一:保证可见性 volatile三大特性之二:不保证原子性 volatile三 ...

  8. python移动平均线绘图_对python pandas 画移动平均线的方法详解

    数据文件 66001_.txt 内容格式: date,jz0,jz1,jz2,jz3,jz4,jz5 2012-12-28,0.9326,0.8835,1.0289,1.0027,1.1067,1.0 ...

  9. ftm模块linux驱动,飞思卡尔k系列_ftm模块详解.doc

    飞思卡尔k系列_ftm模块详解 1.5FTM模块1.5.1 FTM模块简介FTM模块是一个多功能定时器模块,主要功能有,PWM输出.输入捕捉.输出比较.定时中断.脉冲加减计数.脉冲周期脉宽测量.在K1 ...

  10. K线技术指标实现—同花顺多空趋势点

    K线技术指标实现-同花顺多空趋势点 概念介绍 当多空趋势发出多点信号时,表示行情看多,可积极做多,多点为最早的买点:当多空趋势发出空点信号时,表示行情看空,可持币观望等待机会,空点为最晚的卖点. 多空 ...

最新文章

  1. java在继承中父类的成员变量是否会被子类所覆盖
  2. java 之 面向对象
  3. Git_Eclipse:[3]Git初始化工程
  4. ubuntu安装Java开发环境
  5. 微软、UIUC韩家炜组联合出品:少样本NER最新综述
  6. Mysql高性能笔记(一):Schema与数据类型优化
  7. 三星中国区启动裁员计划,无奈回应:提升在中国市场的竞争力
  8. Servlet案例6:显示用户的上次访问时间
  9. 2020-10-24 pandas导入出现错误或者警告解决方案
  10. 用友凭证打印故障解决
  11. 中国石油大学《社交礼仪》在线考试
  12. 让360俯首称臣----详细教程含源码
  13. 「九章」刷屏的背后:万字长文解析,量子计算机和电子计算机各有何优劣?
  14. 计算机思维解决高数题,三类题型的21种解题思维定式,帮你解决数学“老大难”!...
  15. python数字精度自动变化_如何在python中将一个数字转换成12位精度?
  16. Ayo!Drop the beats!我说中秋快乐,你说……
  17. File类与IO流知识总结(三):缓冲流、转换流、序列化流
  18. 某宝虚拟CDK自动发货源码 易语言
  19. [SPSS]相应分析的SPSS实现——基于头发和瞳孔颜色的相应分析实例
  20. 防火墙GRE和NAT

热门文章

  1. 今晚9点!相约ISAC(6G通信感知一体化)在线研讨会!
  2. PythonーーJetBrains PyCharm安装
  3. 【贵州大学计算机考研1】三本学生考研上岸贵州大学软件工程专硕(附带真题与答案)
  4. Keep in mind用法
  5. H5js前端压缩图片
  6. python 读取pdf图片_Python如何读取pdf中的图片
  7. 无线射频收发芯片SI24R1技术相关问题解答
  8. Webpack 配置: 自定义网站图标 favicon
  9. 正则表达式:多选项匹配
  10. 求解-----组合优化问题