记录下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