在行情軟件里,有很多的平均公式,一直沒有深入的去了解,用得也是糊里糊涂的,現(xiàn)結(jié)合百度谷歌,對各種公式做個總結(jié)記錄。
MA(x,n)–移動平均,是最簡單的n日內(nèi)的平均值;
計算公式:(X1+X2+X3+X4+…+Xn)/n
Python代碼:
1 2 3 4 5 | def getMA(df,n):
for i in range ( len (df)):
if i > = n:
df.ix[i, 'ma' ] = df.close.values[i - n:i].mean()
return df
|
EMA(x,n)–指數(shù)移動平均,這個函數(shù)以相關(guān)周期為權(quán)重進(jìn)行計算;
計算公式:[2*X+(n-1)*Y]/(n+1) 其中'Y'表示上一周期的Y值
例如:每天X值不同,由遠(yuǎn)到近標(biāo)示分別為X1、X2、X3、X4……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
以此類推,往下循環(huán)……
Python代碼:
1 2 3 4 5 6 7 | def getEMA(df,n):
for i in range ( len (df)):
if i = = 0 :
df.ix[i, 'ema' ] = df.ix[i, 'close' ]
if i> 0 :
df.ix[i, 'ema' ] = ( 1 - n) * df.ix[i - 1 , 'close' ] + n * df.ix[i, 'close' ]
return df
|
SMA(x,n,m)–簡單移動平均,m為當(dāng)日的權(quán)重,是個0~1之間的值;
計算公式:(X*M+Y'*(N-M))/N 其中Y表示上一周期值
SMA 就是把EMA(X,N) 中的權(quán)重2,變成了一個可自己定義的變數(shù)。要求M<N,M/N, (N-M)/N 就是一個加起來等于1的小數(shù),于是定義動態(tài)平均值。
Python代碼:
1 2 3 4 5 6 7 | def getSMA(df,n,m):
for i in range ( len (df)):
if i = = 0 :
df.ix[i, 'sma' ] = df.ix[i, 'close' ] * m / n
else :
df.ix[i, 'sma' ] = [df.ix[i, 'close' ] * m + (n - m) * df.ix[i - 1 , 'sma' ]] / n
return df
|
DMA(x,m)–動態(tài)移動平均,這個函數(shù)以動態(tài)設(shè)定的權(quán)重m進(jìn)行計算;
計算公式:m*X+(1-m)*Y 其中Y表示上一周期值,A必須小于1
Python代碼:
1 2 3 4 5 6 7 | def getDMA(df,m):
for i in range ( len (df)):
if i = = 0 :
df.ix[i, 'dma' ] = df.ix[i, 'close' ] / m
else :
df.ix[i, 'dma' ] = df.ix[i, 'close' ] / m + ( 1 - m) * df.ix[i - 1 , 'dma' ]
return df
|
TMA(x,n,m)–遞歸移動平均,這個函數(shù)可以完全控制當(dāng)前周期的權(quán)重和上一次值的權(quán)重;
計算公示:m*X+n*Y 其中Y表示上一周期值,初值為m*X。
Python代碼:
1 2 3 4 5 6 7 | def getTMA(df,n,m):
for i in range ( len (df)):
if i = = 0 :
df.ix[i, 'sma' ] = df.ix[i, 'close' ] * m
else :
df.ix[i, 'sma' ] = df.ix[i, 'close' ] * m + df.ix[i - 1 , 'sma' ] * n
return df
|
WMA(x,n)–加權(quán)移動平均,這個函數(shù)對于近日的權(quán)重會比其它函數(shù)敏感。
計算公式:n*X0+(n-1)*X1+(n- 2)*X2)+…+1*Xn)/(n+(n-1)+(n-2)+…+1)
X0表示本周期值,X1表示上一周期值。
Python代碼:
1 2 3 4 5 6 7 8 9 10 | def getWMA(df,n):
weight = 0
for i in range (n):
weight + = i
for i in range ( len (df)):
if i > = n:
sum = 0
for j in range (n):
sum + = (j + 1 ) * df.ix[i - n + j, 'close' ]
df.ix[i, 'wma' ] = sum / weight
|
ps: 關(guān)于加權(quán)移動平均,有多個加權(quán)的計算方式,代碼里的僅僅只是其中一種,如果需求不同,也可以換做其他計算方式。
1、末日加權(quán)移動平均線:
計算公式=(C1+C2+……+Cn×2)/(n+1)
我們用C代表收盤價。末日指的是最后一日哦,可不是世界末日。我們看到只有最后一天的收盤價(Cn)乘了一個2。這樣,原來的n個價格就變成了(n+1)個,所以在求的平均的時候要除以(n+1)。
2、線性加權(quán)移動平均線:
計算公式=(C1×1+C2×2+……+Cn×n)/(1+2+…+n)
這一種均線計算起來有一點點麻煩,就是計算時每個價格都乘以一個權(quán)值,這個權(quán)值剛好是它的編號。對于線性這個詞,如果大家不理解,那么請繼續(xù)關(guān)注慧濟(jì),以后我會為大家詳細(xì)解釋。
3、梯型加權(quán)移動平均線:計算方法如下(5日為例):
計算公式=((C1+C2)×1+(C2+C3)×2+(C3+C4)×3+(C4+C5)×4)/(2×1+2×2+2×3+2×4)
是不是有點像梯形的面積公式啊?梯形面積=(上底+下底)×高/2
4、平方系數(shù)加權(quán)移動平均線:計算方法如下(5日為例):
MA=((C1×1×1)+( C2×2×2)+(C3×3×3)+(C4×4×4)+( C5×5×5))/(1×1+2×2+3×3+4×4+5×5)
|