大发五分快3玩法_用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)
- 时间:
- 浏览:0
- 来源:天津网_专注天津新闻_天津的主流媒体
一点人最近在尝试着发表“以股票案例入门Python编程语言”系列的文章,在什么文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算法律法律法律依据的同去,验证基于各种指标的交易策略,本文是第一篇,通过K线和均线案例讲述Numpy,Maplotlib等相关库的用法,怎么让 还用代码案例来验证买卖的交易策略。在本系列的后边文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI和OBV等指标,怎么让 前会用Python编写针对什么指标的交易策略,敬请关注。
1 K线整合均线的案例
均线也叫移动平均线(Moving Average,简称MA),是指某段时间内的平均股价(或指数)连成的曲线,通过它有人 能清晰地都看股价的历史波动,从而能进一步预测未来价格的发展趋势。
均线一般分短期、中期和长期这三类。
1 通常把二天和10天移动平均线称为短期均线,一般供短线投资者参照。
2一般把20天、50天和50天移动平均线作为中期均线,一般供中线投资者参考。
3 一般120天和250天(甚至更长)移动平均线称为长期均线,一般供长线投资者参考。
不过在实践中,有人 一般须要综合地观察短期中期和长期均线,从中能分析出市场的多空趋势。比如,怎么让 某股价格的三类均线均上涨,且短期中期长期均线是从上到下排列,则说明该股价格趋势向上;反之怎么让 并列下跌,且长期中期短期均线从上到下排列,则说明股价趋势向下。
讲完概念了,有人 通过rolling法律法律法律依据绘制均线。
1 #!/usr/bin/env python 2 #coding=utf-8 3 import pandas as pd 4 import matplotlib.pyplot as plt 5 from mpl_finance import candlestick_ochl 6 #从文件里得到数据 7 df = pd.read_csv('D:/stockData/ch6/500895.csv',encoding='gbk') 8 #设置图的位置 9 fig = plt.figure() 10 ax = fig.subplot(111) 11 #调用法律法律法律依据,绘制K线图 12 candlestick_ochl(opens=df["Open"].values, closes=df["Close"].values, highs=df["High"].values, lows=df["Low"].values,width=0.75, colorup='red', colordown='green') 13 df['Close'].rolling(window=3).mean().plot(color="red",label='二天均线') 14 df['Close'].rolling(window=5).mean().plot(color="blue",label='二天均线') 15 df['Close'].rolling(window=10).mean().plot(color="green",label='10天均线') 16 plt.legend(loc='best') #绘制图例 17 #设置x轴的标签 18 plt.xticks(range(len(df.index.values)),df.index.values,rotation=50 ) 19 ax.grid(True) #带网格线 20 plt.title("500895张江高科的K线图") 21 plt.show()
从第13行到第15行里,通过rolling法律法律法律依据,根据每天的收盘价,计算了二天、二天和10天均线,并为每种均线设置了图例,在第16行里,通过legend法律法律法律依据设置了图例的位置。上述代码的运行效果如下图所示,从中有人 不仅能都看这段时间内的K线图,还能都看3根均线。
2 K线整合均线的改进版案例
在本例中,有人 将做如下两点改进,其中请有人 着重观察操作坐标轴的ax对象。
第一,为了更灵活地得到股市数据,这里是根据现在结束了时间和现在结束了时间,先是调用get_data_yahoo接口,从yahoo的接口里获取股票数据,同去为了留一份数据,统统会把从接口爬取到的数据保存到本地csv文件,做完另有一个再绘制图形。
第二,在另有一个的案例中,x轴的刻度是每个交易日的日期,但怎么让 显示的时间范围过长,必须 时间刻度就会太密集,影响美观效果,统统这里将只显示主刻度。改进后的代码如下所示。
1 #!/usr/bin/env python 2 #coding=utf-8 3 import pandas_datareader 4 import pandas as pd 5 import matplotlib.pyplot as plt 6 from mpl_finance import candlestick2_ochl 7 from matplotlib.ticker import MultipleLocator 8 #根据指定代码和时间范围,获取股票数据 9 code='500895.ss' 10 stock = pandas_datareader.get_data_yahoo(code,'2019-01-01','2019-03-31') 11 #删除最后一行,怎么让 get_data_yahoo会多取一天数据 12 stock.drop(stock.index[len(stock)-1],inplace=True) 13 #保发生本地 14 stock.to_csv('D:\\stockData\ch7\\500895.csv') 15 df = pd.read_csv('D:/stockData/ch7/500895.csv',encoding='gbk',index_col=0) 16 #设置窗口大小 17 fig, ax = plt.subplots(figsize=(10, 8)) 18 xmajorLocator = MultipleLocator(5) #将x轴主刻度设置为5的倍数 19 ax.xaxis.set_major_locator(xmajorLocator) 20 #调用法律法律法律依据,绘制K线图 21 candlestick2_ochl(ax = ax, 22 opens=df["Open"].values,closes=df["Close"].values, highs=df["High"].values, lows=df["Low"].values,width=0.75, colorup='red', colordown='green') 23 #如下是绘制3种均线 24 df['Close'].rolling(window=3).mean().plot(color="red",label='二天均线') 25 df['Close'].rolling(window=5).mean().plot(color="blue",label='二天均线') 26 df['Close'].rolling(window=10).mean().plot(color="green",label='10天均线') 27 plt.legend(loc='best') #绘制图例 28 ax.grid(True) #带网格线 29 plt.title("500895张江高科的K线图") 50 plt.rcParams['font.sans-serif']=['SimHei'] 31 plt.setp(plt.gca().get_xticklabels(), rotation=50) 32 plt.show()
相比另有一个代码,这段代码有有一个改进点。
第一,从第9行到第14行里,有人 通过第五章分析过的get_data_yahoo法律法律法律依据,传入股票代码、现在结束了和现在结束了时间这有一个多参数,从yahoo接口里获得股票交易的数据。
请注意该法律法律法律依据返回的数据会比传入的现在结束了时间多一天,比如有人 传入的现在结束了时间是2019-03-31,但它会返回后一天(即2019-04-01)的数据,统统得通过第12行的drop法律法律法律依据,删除stock对象(该对象类型是dataframe)最后一行的数据。删除的另有一个是通过stock.index[len(stock)-1]指定删除长度减1的索引值,怎么让 索引值是从0现在结束了,怎么让 须要指定inplace=True,怎么让 一段话,删除的结果无法更新到stock这种 dataframe里。
第二,在第17行里,通过figsize法律法律法律依据设置了窗口的大小尺寸。
第三,通过第18行和第19行的代码,设置了主刻度是5的倍数。不言而喻设置成5的倍数,是怎么让 一般一周的交易日是二天。但这里必须简单地把主刻度设置成每周一,怎么让 一点周一有怎么让 是股市休市的法定假日。
第四,怎么让 不想在x轴上设置每天的日期,统统这里不想再调用plt.xticks法律法律法律依据,怎么让 得调用如第31行所示的代码,设置x轴刻度的旋转角度,怎么让 x轴展示的时间依然有怎么让 会重叠。
这段代码的运行效果如下图所示,从中有人 能都看改进后的效果,怎么让 ,怎么让 本次展示的股票时间段变长了(是有一个月),统统相比drawKAndMA.py案例,均线的效果更为明显,尤其是三日均线,更是几乎贯穿于整个交易日范围。
3 葛兰碧均线八大买卖法则
在均线实践理论中,投资专家葛兰碧创造的八项买卖法则可谓经典,具体的细节如下图所示。
1 移动平均线从下降逐渐转为平水平,且有超后边抬头迹象,而股价从均线下方突破时,为买进信号,如上图中的A点。
2 股价于移动平均线之上运行时下跌,但未跌破均线,此时股价再次上扬,此时为买入信号,如图中的C点。
3 股价发生均线上运行,下跌时破均线,但均线呈上升趋势,不久股价回到均线之上时,为买进信号,如图中的B点。
4 股价在均线下方运行时大跌,远离均线时向均线靠近,此时为买进时机,如图中的D点。
5 均线的上升趋势逐渐变平,且有向下迹象,而股价从均线后边向下穿均线,为卖出信号,如图中的E点。
6 股价向上穿过均线,不过均线依然保持下跌趋势,此后股价又下跌回均线下方,为卖出信号,如图中的F点。
7 股价运行在均线下方,经常出先上涨,但未过均线就再次下跌,此为卖出点,如图中的G点。
8 股价在均线的后边运行,连续上涨且继续远离均线,这种 趋势说明之后会经常出先获利回吐的卖盘打压,此时是卖出的时机,如前图中的H点。
4 通过DataFrame对象验证均线的买点策略
根据上述八大买卖原则,有人 在张江高科2019年1月到3月的交易数据内,用pandas库里的dataframe等对象,根据5日均线计算参考买点,代码如下所示。
1 #!/usr/bin/env python 2 #coding=utf-8 3 import pandas as pd 4 #从文件里得到数据 5 df = pd.read_csv('D:/stockData/ch7/500895.csv',encoding='gbk') 6 maIntervalList = [3,5,10] 7 #着实在后文里只用到了5日均线,但这里演示设置3种均线 8 for maInterval in maIntervalList: 9 df['MA_' + str(maInterval)] = df['Close'].rolling(window=maInterval).mean() 10 cnt=0 11 while cnt<=len(df)-1: 12 try: 13 #规则1,收盘价连续二天上扬 14 if df.iloc[cnt]['Close']<df.iloc[cnt+1]['Close'] and df.iloc[cnt+1]['Close']<df.iloc[cnt+2]['Close']: 15 #规则2,5日均线连续二天上扬 16 if df.iloc[cnt]['MA_5']<df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']<df.iloc[cnt+2]['MA_5']: 17 #规则3,第二天,收盘价上穿5日均线 18 if df.iloc[cnt+1]['MA_5']>df.iloc[cnt]['Close'] and df.iloc[cnt+2]['MA_5']<df.iloc[cnt+1]['Close']: 19 print("Buy Point on:" + df.iloc[cnt]['Date']) 20 except: #有几天是没5日均线的,统统用except解决异常 21 pass: 22 cnt=cnt+1
着实在计算参考买点时,只用到了5日均价,但在第8行和第9行的for循环里,有人 通过rolling法律法律法律依据,还是计算了3日、5日和10日的均价,并把计算后的结果记录到当前行的MA_3、MA_5和MA_10这三列中,另有一个做的目的是为了演示动态创建列的做法。
在第11行到第22行的while循环里,有人 依次遍历了每天的交易数据,并在第14行,第16行和第18行里,通过有一个多if一段话,设置了有一个规则。怎么让 在前几天是必须 5日均价了,且在遍历最后2天交易数据时,在执行诸如df.iloc[cnt+2]['Close']的一段话中会经常出先索引越界,统统在while循环里有人 用到了try…except异常解决一段话。
运行上述代码,有人 能都看的结果是:Buy Point on:2019-03-08,结合上图,有人 能都看3月8日另有一个的交易日里,股价有一定程度的上涨,统统能证实基于均线的“买”原则,但影响股价的因素越多,有人 应全面分析,切勿在实战中只用这原则来买卖股票。
5 通过DataFrame验证均线的卖点策略
同样地,根据5日均线计算参考买点,在如下案例中,有人 计算了张江高科2019年1月到3月内的卖点。
1 #!/usr/bin/env python 2 #coding=utf-8 3 import pandas as pd 4 #从文件里得到数据 5 df = pd.read_csv('D:/stockData/ch7/500895.csv',encoding='gbk') 6 maIntervalList = [3,5,10] 7 #着实在后文里只用到了5日均线,但这里演示设置3种均线 8 for maInterval in maIntervalList: 9 df['MA_' + str(maInterval)] = df['Close'].rolling(window=maInterval).mean() 10 cnt=0 11 while cnt<=len(df)-1: 12 try: 13 #规则1,收盘价连续二天下跌 14 if df.iloc[cnt]['Close']>df.iloc[cnt+1]['Close'] and df.iloc[cnt+1]['Close']>df.iloc[cnt+2]['Close']: 15 #规则2,5日均线连续二天下跌 16 if df.iloc[cnt]['MA_5']>df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']>df.iloc[cnt+2]['MA_5']: 17 #规则3,第二天,收盘价下穿5日均线 18 if df.iloc[cnt+1]['MA_5']<df.iloc[cnt]['Close'] and df.iloc[cnt+2]['MA_5']>df.iloc[cnt+1]['Close']: 19 print("Sell Point on:" + df.iloc[cnt]['Date']) 20 except: #有几天是没5日均线的,统统用except解决异常 21 pass 22 cnt=cnt+1
运行后,有人 能得到有一个多卖点:2019-01-23和2019-01-23,这同样能在上图描述的K线图里得到验证。
6 求推荐,后文预告与版权说明
在本系列的后边文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI和OBV等指标,怎么让 前会用Python编写针对什么指标的交易策略,敬请关注。
本文用了我将近有一个小时,怎么让 有人 感觉好,请帮忙推荐下。
关于转载有如下的说明。
1 本文文字和代码均属原创,可转载,但谢绝用于商业用户。
2 转载时请用链接的法律法律法律依据,给出原文出处,同去写明原作者是hsm_computer。
3 在转载时,请原文转载 ,如要在转载修改本文,请另有一个告知,谢绝在转载时通过修改本文达到助于转载者的目的。