使用python实现ema(指数移动平均的计算)

Python036

使用python实现ema(指数移动平均的计算),第1张

 a = 2/13

Prices = [0.0] #prices of everyday

EMAs = [0.0] # ems of everyday

def ema ( N , Price) :

    Prices.append(Price)

    if N<=1:

        EMAs.append(Price)

    else :

        EMAs.append((1-a)*EMAs[N-1] + a*Price)

ema(1,1)

ema(2,3)

print (EMAs[1])

print (EMAs[2])

ema(x,n):x的n日指数移动平均.算法:y=(x*2+y'*(n-1))/(n+1)

ema(x,n)相当于sma(x,n+1,2)

通俗的说就是n日的平均值。

时间有限,我把公式发给你,你自己代入就可以了。

 

计算你提供的数据:(收盘价为):1,2,3,4,5,........求其EMA(c,5);

----------------------------------------------------------------------------------------------

解答:对应上面数据,X1,X2,X3,X4,X5,.......分别对应1,2,3,4,5,6,7,8,9;

则EMA(c,5)=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1=(5*X5+4*X4+3*X3+2*X2+1*X1)/15

=5.67(为了节省公式我取到X5);

--------------------------------------------------------------------------------------------

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=3/6*X3+2/6*X2+1/6*X1

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

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

如果N=5,则EMA(X,5)=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=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1

…………循环下去吧:)

EMA(X,6)=6/21*X6+5/21*X5+4/21*X4+3/21*X3+2/21*1/21X1