EMA的计算原理
EMA 是MA(平滑移动平均线)的另一种形式。全名“加权指数移动平均线”。
2/13就是12日移动平均线的平滑因子,他的意思是指:给予新价格 2/13的权重,给予过去的EMA 11/13的权重。
在计算的时候第一天的MACD是0,从第2天开始。第一天的EMA12和EMA26都等于收盘价。
我们用这种方法可以在只看收盘价格的情况下准备画出任何一个股票的MACD。因为我详细的算过,哈哈,真的对理解MACD有很大的帮助。
至于为什么是2/(12+1)*今日收盘价+11(/12+11)*昨日EMA(12)。光说不练不行,你有时间可以算一下。我曾经算过中国石油的MACD 为了证明我不是在忽悠你,毕竟我们也算志同道合了。
公式如下所示:
1、计算移动平均值(EMA)
12日EMA的算式为:
EMA(12)=前一日EMA(12)×11/13+今日收盘价×2/13 26日EMA的算式为:
EMA(26)=前一日EMA(26)×25/27+今日收盘价×2/27
C/c++语言
void ema(double input[],int emaperiod,double emaout[]) {
// EMA(X,N)求X的N日指数平滑移动平均。算法是:
//若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。 }
EMA与MA的区别,EMA是加权平均,MA是一般的平均。 在加权平均中,这个权有两种,各种分析软件不一样,计算也有
int length=sizeof(input) / sizeof(input[0]); int n=1;
for(int i=0;i if(i emaout[i]=((n-1)*emaout[i-1]+2*input[i])/(n+1); 差异。一般的软件,多为时间上的加权。EMA只是比MA更优化了一些,让N以内的数值得以计算。 他们通过“人为”指定,就是把一定时间分为一定优先级,比如今天设为一个数值,前10天的优先级又差一些,这样进行加权,原理有些像筹码分布。 MA和EMA的数学表达式: 1、MA(X,N),求X的N日移动平均值。算法是: (X1+X2+X3+?..+Xn)/N 例如:MA(C,20)表示20日的平均收盘价。C表示CLOSE。 2、EMA(X,N)求X的N日指数平滑移动平均。算法是: 若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。 EMA引用函数在计算机上使用递归算法很容易实现,但不容易理解。例举分析说明EMA函数。 X是变量,每天的X值都不同,从远到近地标记,它们分别记为X1,X2,X3,?.,Xn 如果N=1,则EMA(X,1)=[2*X1+(1-1)*Y’]/(1+1)=X1 如果N=2,则EMA(X,2)=[2*X2+(2-1)*Y’]/(2+1)=(2/3)*X2+(1/3)X1 如果N=3,则EMA(X,3)=[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