记录下EMA算法和MACD算法

本文详细介绍了MACD指标的计算方法,包括EMA平滑移动平均线的计算公式,并通过Python代码实现了MACD、DIF和DEA的具体计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体计算公式及例子如下: 
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.youkuaiyun.com/daodan988/article/details/51258676

转载于:https://www.cnblogs.com/linsanity1/p/7089845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值