Python实现MACD金叉和死叉的提示,免费、开源证券数据平台Python

python 6
实现MACD金叉和死叉的提示 熟悉股市的朋友,肯定了解MACD这个指标。
当然,更多人了解的是一些通用的规则MACD金叉,即DIFF由下向上突破DEA,为买入信号;MACD死叉,即DIFF由上向下突破DEA,为卖出信号……作为一个量化人员,不但要知道这些,而且需要知道缘由和具体的应用。
今天这一期,主讲MACD。
MACD,全名是movingaverageconvergence/divergence,中文简称平滑异同移动平均线,或移动平均聚散指标,或指数平滑移动平均线。
(还是简称比较好记啊!)它是GeralAppel于1979年提出的指标,运用快速(短期)和慢速(长期)移动平均线及其聚合与分离的征兆,加以双重平滑运算。
而根据移动平均线原理发展出来的MACD,一则去除了移动平均线频繁发出假信号的缺陷,二则保留了移动平均线的最大效果。
因此,MACD指标具有均线趋势性、稳重性、安定性等特点,是用来研判买卖股票的时机,预测股票价格涨跌的技术分析指标。
“快”指短时期的EMA(EMA,全称ExponentialMovingAverage,中文简称指数移动平均),而“慢”则指长时期的EMA。
具体计算公式如下:
(1)首先,计算EMA的平滑系数 平滑系数=2÷(周期单位数+1)如:12日EMA的平滑系数=2÷(12+1)=0.1538;26日EMA平滑系数为=2÷27=0.0741
(2)然后,计算指数平均值(EMA)今天的指数平均值=平滑系数×(今天收盘指数-昨天的指数平均值)+昨天的指数平均值。
依公式可计算出12日EMA:12日EMA=2÷13×(今天收盘指数一昨天的指数平均值)+昨天的指数平均值。
=(2÷13)×今天收盘指数+(11÷13)×昨天的指数平均值。
同理,26日EMA亦可计算出:26日EMA=(2÷27)×今天收盘指数+(25÷27)×昨天的指数平均值。

(3)计算离差值(DIF)DIF=今日EMA(12)-今日EMA(26)
(4)最后,计算DIF的9日EMA根据离差值计算其9日的EMA,即离差平均值,是所求的MACD值。
为了不与指标原名相混淆,此值又名DEA或DEM(有时会成为signal)。
计算出的DIF和DEA的数值均为正值或负值。
今日DEA=前一日DEA×8/10+今日DIF×2/10 为何是12日,26日,9日呢?因为12日和26日,刚好可以包好2周和1个月的数据。
考虑到现在的交易日为5日,那为何不是10日,22日,8日呢?这个我真的不好解释了,我倒是搜到了一篇paper关于这个日期设置的问题,参考:/forexschool/technical-indicators/macd/。
文章指出日期的设置有一定历史问题,同时沿用至今有很多事实依据证实日期选择的合理性和可靠性。
既然如此,我们也遵循12日,26日和9日的日期设定。
一般情况下,我们不仅能看到DIF和DEA这两条不同颜色的曲线,还能看到红绿的柱状图。
其实,柱状图是MACD,其中MACD=(DIF-DEA)*
2,通常绘制成围绕零轴线波动的柱形图,红色代表DIF大于DEA,绿色代表DIF小于DEA。
免费、开源的证券数据平台
1 免费、开源证券数据平台 MACD的运用有如下基本原则:
1.DIF、DEA均为正,DIF向上突破DEA,买入信号参考。

2.DIF、DEA均为负,DIF向下跌破DEA,卖出信号参考。

3.DIF线与K线发生背离,行情可能出现反转信号。

4.DIF、DEA的值从正数变成负数,或者从负数变成正数并不是交易信号,因为它们落后于市场。
简单地对应市场上的说法如下:
1.MACD金叉:DIF由下向上突破DEA,为买入信号。

2.MACD死叉:DIF由上向下突破DEA,为卖出信号。
针对这两条的说法,我需要提出MACD具有一定的滞后情况,即比市场的反应要慢。
因为MACD是一个中长期的指标,而不是个短期指标,不适合短期涨跌浮动太大的证券。
接下来,3种说法更靠谱些:
3.MACD柱状图为红,即DIF与DEA均为正值,即都在零轴线以上时,市场趋势属多头市场,若此时DIF向上继续突破DEA,即红色柱状越来越长,可作买入信号,该出手就出手。

4.MACD柱状图为绿,即DIF与DEA均为负值,即都在零轴线以下时,市场趋势属空头市场,若此时DIF向下继续跌破DEA,即绿色柱状越来越长,可作卖出信号,该割肉就割肉。

5.当DEA线与K线趋势发生背离时为反转信号。
下面,我用python程序调用baostock(baostock是免费证券数据的python接口,具体信息参考:)实现MACD计算,MACD金叉和死叉提示的功能。
importbaostockasbsimportpandasaspdimporttalibastaimportmatplotlib.pyplotasplt puteMACD(code,startdate,enddate): login_result=bs.login(user_id='anonymous',password='123456')print(login_result) #获取股票日K线数据rs=bs.query_history_k_data(code, "date,code,close,tradeStatus",start_date=startdate,end_date=enddate,frequency="d",adjustflag="3")#打印结果集result_list=[] 免费、开源的证券数据平台
2 免费、开源证券数据平台 while(rs.error_code=='0')&rs.next():#获取一条记录,将记录合并在一起result_list.append(rs.get_row_data()) df=pd.DataFrame(result_list,columns=rs.fields)#剔除停盘数据df2=df[df['tradeStatus']=='1']#获取dif,dea,hist,它们的数据类似是tuple,且跟df2的date日期一一对应#记住了dif,dea,hist前33个为Nan,所以推荐用于计算的数据量一般为你所求日期之间数据量的3倍#这里计算的hist就是dif-dea,而很多证券商计算的MACD=hist*2=(difdea)*2dif,dea,hist=ta.MACD(df2['close'].astype( float).values,fastperiod=12,slowperiod=26,signalperiod=9)df3=pd.DataFrame({'dif':dif[33:],'dea':dea[33:],'hist':hist[33:]}, index=df2['date'][33:],columns=['dif','dea','hist']) df3.plot(title='MACD')plt.show() #寻找MACD金叉和死叉datenumber=int(df3.shape[0])foriinrange(datenumber-1): if((df3.iloc[i,0]<=df3.iloc[i,1])&(df3.iloc[i+1,0]>=df3.iloc[i+1,1])): print("MACD金叉的日期:"+df3.index[i+1])if((df3.iloc[i,0]>=df3.iloc[i,1])&(df3.iloc[i+1,0]<=df3.iloc[i+1,1])): print("MACD死叉的日期:"+df3.index[i+1]) bs.logout()return(dif,dea,hist) if__name__=='__main__':code='sh.600000'startdate='2017-03-01'enddate='2017-12-01'(dif,dea,hist)=puteMACD(code,startdate,enddate) 运行结果如下:MACD金叉的日期:2017-05-02MACD死叉的日期:2017-05-09 免费、开源的证券数据平台
3 MACD金叉的日期:2017-05-12MACD死叉的日期:2017-05-25MACD金叉的日期:2017-06-21MACD死叉的日期:2017-08-03MACD金叉的日期:2017-08-28MACD死叉的日期:2017-09-27MACD金叉的日期:2017-10-09MACD死叉的日期:2017-10-23MACD金叉的日期:2017-11-13MACD死叉的日期:2017-11-16MACD金叉的日期:2017-11-17 免费、开源证券数据平台 观看代码可知,我通过TA-LIB计算出MACD线,并且画折线图,打印出MACD金叉和死叉的提示日期。
在这里,需要注意以下几点:
1.TA-LIB计算MACD,结果的前33个值为NAN;
2.输入的数据量尽量足够大(推荐是你真实计算MACD的数据量的3倍),例如,你需要计算2017-04-01到2017-05-01的MACD,那么你需要输入的数据日期应该是2017-0201到2017-05-01;
3.MACD的金叉和死叉提示日期可能在真实金叉和死叉日期之后,也就是可能会延后一日。
至于利用MACD进行交易的具体策略实现,是要依靠你们自己。
网上有很多很多关于利用MACD的买卖策略,我只是提醒一下真正靠谱实用的策略一般不会公开(别人不会将赚钱的方法告诉你),而那些公开的策略一般都不怎么能赚钱,重要的是你自己不断摸索出属于你自己对市场和个股的判断方法。
正所谓“临渊羡鱼,不如退而结网”。
免费、开源的证券数据平台
4

标签: #文件 #最小 #编辑 #服务器 #盘中 #文件 #文件 #网页搜索