記錄下EMA算法和MACD算法


具體計算公式及例子如下: 
EMA(12)= 前一日EMA(12)×11/13+今日收盤價×2/13  #12條記錄,快線
EMA(26)= 前一日EMA(26)×25/27+今日收盤價×2/27  #26條記錄,慢線
DIFF=今日EMA(12)- 今日EMA(26)
DEA = 前一日DEA×8/10+今日DIF×2/10 
MACD=BAR=2×(DIFF-DEA)
 
注:EMA從股票上市第一天的收盤價(ema = close)就開始累積了,如果從中途取值的話,理論上應該能得到前一天的EMA值,不然
計算的結果會和真實的結果有出入。
 
 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 import pandas as pd
 5 
 6 df = pd.DataFrame(getKline('1day','30','0'))
 7 df.columns = ['date', 'open', 'high', 'low', 'close', 'amount']
 8 
 9 def calc_EMA(df, N): 
10     for i in range(len(df)):
11         if i==0:
12             df.ix[i,'ema']=df.ix[i,'close']
13         if i>0:
14             df.ix[i,'ema']=((N-1)*df.ix[i-1,'ema']+2*df.ix[i,'close'])/(N+1)
15     ema=list(df['ema'])
16     return ema
17 
18 def calc_MACD(df, short=12, long=26, M=9):
19     emas = calc_EMA(df, short)
20     emaq = calc_EMA(df, long)
21     df['diff'] = pd.Series(emas) - pd.Series(emaq)
22     for i in range(len(df)):
23         if i==0:
24             df.ix[i,'dea'] = df.ix[i,'diff']  
25         if i>0:  
26             df.ix[i,'dea'] = ((M-1)*df.ix[i-1,'dea'] + 2*df.ix[i,'diff'])/(M+1)  
27     df['macd'] = 2*(df['diff'] - df['dea'])
28     return df
29 
30 calc_MACD(df, 12, 26, 9)

 

參考文章: http://blog.csdn.net/daodan988/article/details/51258676


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM