MACD算法

MACD指标是股票技术中最实用最重要的指标之一,其中涉及EMADIFDEABAR几个指标。然而,对MACD指标的定义及分解算法,书上和网上的资料乱七八糟,有的说法互相矛盾,特别是对于指标的分解(即股价与指标值之间的关系),我查了很多资料,要么是有漏洞,要么是错的,而且有的错误的说法流毒甚广。事实上,这些有错误的说法,只要拿实际案例检验一下,就知道是错误的了。可惜中国人做学问,不求甚解,人云亦云的多,踏踏实实钻研的少。 如果对一个指标的来由都没搞清楚,如何能够深刻理解其各种信号的含义?如何能够深刻理解操作策略运用的道理?

我(爱因迪生)到现在还没有发现一个对MACD指标公式及其分解说得完全正确的资料,没办法,只好自己研究,最后我得到了正确可以验证的算法,现在公布在这里,以供参考。

一、EMA

MACD指标中,EMA指标虽然没有直接出现在股票软件的MACD指标界面上,但是EMA指标却是所有MACD指标的基础。而正是这个EMA指标,对其定义和分解的说法是最乱的。所以首先要搞透EMA

EMA即英文Exponential Moving Average的缩写,即指数移动平均指标,也叫EXPMA指标。

EMA的定义为,当日EMA等于当日收盘价减去昨日EMA之后乘以平滑系数,然后再加上昨日的EMA。写成通用公式如下:MACD指标公式及其分解-网上其他资料几乎全是错的


    其中MACD指标公式及其分解-网上其他资料几乎全是错的为平滑系数, C为今日收盘价,EMA’表示昨日的EMAEMAN)表示如果要算的是N日的EMA,则平滑系数要套入公式MACD指标公式及其分解-网上其他资料几乎全是错的,比如要算12日的EMA,即EMA(12),则其平滑系数MACD指标公式及其分解-网上其他资料几乎全是错的

EMA通用公式也可以变形为以下形式:

MACD指标公式及其分解-网上其他资料几乎全是错的
EMA(12)EMA(26)公式如下:

MACD指标公式及其分解-网上其他资料几乎全是错的

看到这个EMA定义,大家可能会疑惑,这个定义不是死循环吗?定义中还包含昨日的EMA,那么昨日的EMA又包含前日的EMA,何时是尽头呀!事实上,有尽头,尽头就是新股上市首日,那么新股上市首日的EMA是多少呢?这里有个人为规定,规定把首日收盘价当成是首日EMA,从次日开始,其EMA开始套用以上公式进行计算。

大家可以随便找一只股票从股票上市日开始来验证这个定义。注意,由于股票的MACD界面上并不出现EMA指标,大家可以在股票软件个股股价走势图界面上用键盘输入EXPMA前面说过,EMA也称为EXPMA),就可以调出EMA指标,一般软件默认的是EMA(12)EMA(50)两个指标。大家可以用EMA(12)来验证,如果会修改指标的还可以把EMA(50)修改成EMA(26)来验证。上市首日的EMA是首日收盘价,然后第二日开始用EMA(12)=0.1538C+0.8462 EMA’公式来计算,以后都套用此公式算下去。

注意,如果股价不复权,那么得出来的EMA数据是不复权的数据。如果股价采用了前复权处理,那么得出来的EMA数据也是前复权的数据。也就是说,如果一只股票除权过,那么其复权与不复权的EMA也是不同的!除权与复权应该不用我解释吧?如果你不知道什么叫除权复权,那么你不应该炒股!还想炒股的话,赶紧先学会除权复权知识。

掌握了以上的知识,你对EMA的算法的了解还远远不够。比如一只股票上市了很多年了,它今天的EMA数值你知道是多少吗?要知道今天的EMA,得知道昨天的EMA,要知道昨天的EMA,得知道前天的EMA,这样类推下去,岂不是有得追溯到上市首日,那数据量太大了!事实上,我们直观的知道,离当日时间越久,其股价和MEA对今天的EMA的影响就越小,所以,EMA与股价之间应该有个展开式,而且展开式中离今日的日期很远的股价应该可以省略。根据EMA的定义,EMA确实可以得到一个展开式,假设要计算从股票上市起第n日的EMA,计为EMAn,则有:MACD指标公式及其分解-网上其他资料几乎全是错的


其中MACD指标公式及其分解-网上其他资料几乎全是错的 为平滑系数,Cn表示股票上市第n日的收盘价,Cn-1表示股票上市第n-1日的收盘价,Cn-2表示股票上市第n-2日的收盘价……C2表示股票上市第2日的收盘价,C1表示股票上市首日的收盘价。当然,上市很久的股票,要追溯到上市首日的话时间太久了,不现实,那么追溯到多少天比较合适呢?对于N日的EMA,即EMA(N),其股价追溯到前3.45*(N+1)日的就可以了,更早的股价可以忽略。比如说EMA(12)追溯到前45日的股价就可以了,EMA(26)追随到前94日的股价就可以了。根据验证,如果想误差更小,可以追溯到前5N日的股价。

注意,这里涉及到了两个概念,N日的EMAEMA(N)表示,为防止混淆,这里的N用大写字母表示,N决定了平滑系数MACD指标公式及其分解-网上其他资料几乎全是错的 ,比如我们说EMA(12),则其平滑系数为MACD指标公式及其分解-网上其他资料几乎全是错的n日的EMAEMAn表示,这里的n是指从股票上市日计起的第n个交易日,为防止混淆,这里的n用小写字母表示。

EMAn的展开式可以看出来,算EMA时,从当日的股价开始,比其更早的交易日的股价之前的系数,随时间是按MACD指标公式及其分解-网上其他资料几乎全是错的的指数递减的,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值。到这里,我们就明白为什么EMA会称为指数移动平均指标了。

如果项数比较多,那么分母MACD指标公式及其分解-网上其他资料几乎全是错的趋向于等于MACD指标公式及其分解-网上其他资料几乎全是错的。于是以上公式可以简化为:

MACD指标公式及其分解-网上其他资料几乎全是错的

但是根据验证,这个简化式对验证EMA(12)EMA(26)只能精确到小数点后第二位数字,如果要算DIF= EMA12- EMA26),则精确度不够,不能简化!

网上有个流毒甚广的EMA展开算法,我在本文附录上会指出其错误之处。

二、DIF

EMA搞透了,其他指标就比较简单了。DIF指标公式如下:

DIF= EMA12- EMA26

新股上市首日,其首日DIF0。从次日开始,全部都用当天的EMA12- EMA26)得到当天的DIF

  注意,研究MACD指标要尽量采用股价前复权之后的数据来研究。

三、DEA

DEA通用公式:

MACD指标公式及其分解-网上其他资料几乎全是错的
DEA’表示昨日的DEA

    这个公式可以模仿普通EMA的展开式展开,这里不再详述。

默认的DEADIF线的9日指数平滑移动平均线,也可以表示为MEA(DIF9)

MACD指标公式及其分解-网上其他资料几乎全是错的
新股上市首日,其首日DEA0。从次日开始,由于首日DEA0,因此次日的DEA=0.2* DIF+0=0.2* DIF。后续日子的DEA可以套用0.2* DIF + 0.8* DEA’计算。

四、BAR

BAR=2* (DIF-DEA)

 

 

附录:一个流毒甚广的EMA指标分解公式

网上有个流毒甚广的EMA分解算法,其内容如下:

EMA(X,N)指数平滑移动平均

XN日指数平滑移动平均,它真正的公式表达是:当日指数平均值=平滑系数*(当日指数值-昨日指数平均值)+昨日指数平均值;平滑系数=2/(周期单位+1);由以上公式( EMA=2/(N=+1)*(C-EMA’) - EMA’ )推导开,得到:EMA(C,N)=2*C/(N+1)+(N-1)/(N+1)*昨天的EMA

算法是:若Y=EMA(XN),则Y=2*X+(N-1)*Y’/(N+1),其中Y’表示上一周期的Y值。

EMA引用函数在计算机上使用递归算法很容易实现,但不容易理解。例举分析说明EMA函数。

X是变量,每天的X值都不同,从远到近地标记,它们分别记为X1X2X3….Xn

如果N=1,则EMA(X1)=2*X1+(1-1)*Y’/(1+1)=X1

如果N=2,则EMA(X2)=2*X2+(2-1)*Y’/(2+1)=(2/3)*X2+(1/3)X1

如果N=3,则EMA(X3)=2*X3+(3-1)*Y’/(3+1)=2*X3+2*((2/3)*X2+(1/3)*X1)/4=(1 /2)*X3+(1/3)*X2+(1/6)*X1

如果N=4,则EMA(X4)=2*X4+(4-1)*Y’/(4+1)=2/5*X4+3/5*((1/2)*X3+(1/3)*X2+(1 /6)*X1)

=2/5*X4+3/10*X3+1/5*X2+1/10*X1

如果N=5,则EMA(X5)=2/(5+1)*X5+(5-1)/(5+1)(2/5*X4+3/10*X3+3/15*X2+3/30*X1)
=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1
…………
循环

整理一下更容易看清楚

X1                      
(2/3)*X2  +(1/3)X1                      
(3/6)*X3 +(2/6)*X2 +(1/6)*X1                      
(4/10)*X4+(3/10)*X3+(2/10)*X2+(1/10)*X1                       
(5/15)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1                      



这篇文章整理后的EMAn股价之间的展开式可以表达为

MACD指标公式及其分解-网上其他资料几乎全是错的
其中XnX1表示当日到前n日的收盘价。

按照这个算法,EMA(12)可以表达为:

MACD指标公式及其分解-网上其他资料几乎全是错的
从这个展开式来看,似乎nEMA只与最近n日的股价有关,与更早的股价无关,然而根据上面的知识,我们知道这是不对的。

这个文章的前提“若Y=EMA(XN),则Y=2*X+(N-1)*Y’/(N+1),其中Y’表示上一周期的Y值。”是没问题的。

这个展开式的推导过程表面看起来没错,实际上大错特错!

问题出在哪里呢?事实上,原作者把NEMA(即EMA(n))与nEMA混为一谈了。

我们以EMA(12)为例。其表达式应该为:EMA(12)=2*X+(12-1)*Y’/(12+1)

第一日的股价为X1,我就假设第一日就是股票上市,第一日的EMA(12)= EMA1=X1

第二日的EMA(12)= EMA2=2*X+(12-1)*Y’/(12+1)=2*X2+(12-1)*X1/(12+1)= (2/13)*X2+(11/13)X1

原作者算的算法如下:

如果N=1,则EMA(X1)=2*X1+(1-1)*Y’/(1+1)=X1

如果N=2,则EMA(X2)=2*X2+(2-1)*Y’/(2+1)=(2/3)*X2+(1/3)X1

看出问题没有?作者认为第一日的EMAEMA1用的是EMA(1)的公式,第二日的EMAEMA2用的是EMA(2)的公式。而我们知道,如果我们要算EMA(12),则不管是第一日还是第二日的EMA,都必须套用EMA(12)的公式!

所以这个展开式完全是错误的!可惜网上到处流传这个错误的展开式!


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值