本人最近在尝试着发表“以股票案例入门Python编程语言”系列的文章,在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标的交易策略,本文是第一篇,通过K线和均线案例讲述Numpy,Maplotlib等相关库的用法,并且还用代码案例来验证买卖的交易策略。在本系列的后面文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI和OBV等指标,而且还会用Python编写针对这些指标的交易策略,敬请关注。

1 K线整合均线的案例

均线也叫移动平均线(Moving Average,简称MA),是指某段时间内的平均股价(或指数)连成的曲线,通过它我们能清晰地看到股价的历史波动,从而能进一步预测未来价格的发展趋势。

均线一般分短期、中期和长期这三类。

1 通常把5天和10天移动平均线称为短期均线,一般供短线投资者参照。

2一般把20天、30天和60天移动平均线作为中期均线,一般供中线投资者参考。

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/600895.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='3天均线')
14  df['Close'].rolling(window=5).mean().plot(color="blue",label='5天均线')
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=30 )
19  ax.grid(True) #带网格线
20  plt.title("600895张江高科的K线图")
21  plt.show()

从第13行到第15行里,通过rolling方法,根据每天的收盘价,计算了3天、5天和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='600895.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\\600895.csv')
15  df = pd.read_csv('D:/stockData/ch7/600895.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='3天均线')
25  df['Close'].rolling(window=5).mean().plot(color="blue",label='5天均线')
26  df['Close'].rolling(window=10).mean().plot(color="green",label='10天均线')
27  plt.legend(loc='best') #绘制图例
28  ax.grid(True) #带网格线
29  plt.title("600895张江高科的K线图")
30  plt.rcParams['font.sans-serif']=['SimHei']
31  plt.setp(plt.gca().get_xticklabels(), rotation=30)
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的倍数,是因为一般一周的交易日是5天。但这里不能简单地把主刻度设置成每周一,因为某些周一有可能是股市休市的法定假日。

第四,由于无需在x轴上设置每天的日期,所以这里无需再调用plt.xticks方法,但是得调用如第31行所示的代码,设置x轴刻度的旋转角度,否则x轴展示的时间依然有可能会重叠。

这段代码的运行效果如下图所示,从中大家能看到改进后的效果,而且,由于本次展示的股票时间段变长了(是3个月),所以相比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/600895.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,第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语句,设置了3个规则。由于在前几天是没有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/600895.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,第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编写针对这些指标的交易策略,敬请关注。

本文用了我将近3个小时,如果大家感觉好,请帮忙推荐下。

关于转载有如下的说明。

1 本文文字和代码均属原创,可转载,但谢绝用于商业用户。

2 转载时请用链接的方式,给出原文出处,同时写明原作者是hsm_computer。

3 在转载时,请原文转载 ,如要在转载修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

    

转载于:https://www.cnblogs.com/JavaArchitect/p/11014215.html

用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)...相关推荐

  1. 用python画股票分时图 github_用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)...

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  2. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)...

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  3. python画k线图_Python+pyqtgraph:跟我学如何绘制股票K线图

    引言 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView ...

  4. 利用 python numpy +matplotlib 绘制股票k线图

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from mat ...

  5. python 绘制k线图_利用python numpy+matplotlib绘制股票k线图的方法

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from mat ...

  6. 利用python—matplotlib绘制股票K线图

    利用python-matplotlib绘制股票K线图 成品展示: 用Python绘制股票K线图并不复杂,不过得做好一些准备工作例如相关库的安装,库的引入.日期格式的调整and表格转换 文章目录 利用p ...

  7. Python绘制股票K线图

    目录 1 股票K线图知识了解 2 用Python绘制股票K线图 2.1 安装绘制K线图的mpl_finance库 2.2 引入相关库 2.3 用Tushare库获取股票基本数据 2.4 日期格式调整及 ...

  8. 【Python】绘制股票K线图(烛状图)并增加成交量和移动平均线(详细简单)

    Python绘制股票K线图(烛状图)并增加成交量和移动平均线: 准备工作: 1.这里需要使用到pandas和mplfinance工具库(自行安装好). 2.下载好股票数据,需要包括:时间.开盘价.最高 ...

  9. Swift3实现的绘制股票K线库, FastImageCache提升图片的加载和渲染速度,Chameleon颜色框架

    代码1:用Swift3实现的绘制股票K线库 for iOS & macOS 代码地址:网页链接 代码2:FastImageCache是Path团队开发的一个开源库,用于提升图片的加载和渲染速度 ...

最新文章

  1. Linux系统编程——进程基础知识
  2. java摄像头推流_悄摸直播(一)—— 推流器的实现(获取笔记本摄像头画面,转流推流到rtmp服务器)...
  3. 皇室战争:暗夜女巫重做,去掉亡语机制后,她凉的可能会更快
  4. Nginx使用服务信号升级
  5. jQuery的next()、nextAll()、nextUntil()方法
  6. Angular 自定义结构化指令,如何传入多个输入参数
  7. ASP.NET Core Web API
  8. XML文档处理(树的应用)
  9. c++报错:引用了未定义标签_大牛带你解读Spring源码,编写自定义标签,您能学会吗?...
  10. UUID 生成器有多快
  11. 会计计算机学什么软件有哪些,会计学习软件
  12. android之socket编程实例
  13. 使用计算机录制声音10,Win10如何录制电脑内部声音?Windows10电脑自身录音的方法...
  14. php支付宝单笔转账到支付宝账户,用户提现业务
  15. java 转16进制_java中进制的转换,Byte与16进制的转换方法
  16. 厕所地图,玩出新花样!
  17. 华为HarmonyOS 鸿蒙,华为鸿蒙OS系统规划曝光,原来国产自主研发系统已经如此强大...
  18. Asan基本原理及试用
  19. Chapter9.4:状态反馈与极点配置
  20. Ubuntu清理磁盘通过Stacer工具

热门文章

  1. Python-Django毕业设计房屋租赁管理系统(程序+Lw)
  2. 郑州期货交易细则(郑州期货交易细则最新)
  3. 信用卡nbsp;nbsp;知识
  4. 陆军步兵学院文职面试计算机,2018军队文职文职面试试题回忆版(2018年第二号)...
  5. 爆了!K哥搞定8个Offer
  6. MATLAB学习笔记5:绘图基础与数据可视化(中)
  7. SAR ADC设计18:LATCH比较器
  8. php排名统计图_php 生成各类统计图实例
  9. 第二十二章 Caché 设计模式 享元模式
  10. 全球及中国太阳能纸行业产销态势及前景趋势预测报告(2022-2028年)