远思扬祖宗之德,近思盖父母之愆;上思报国之恩,下思造家之福;外思济人之急,内思闲己之邪。

本文目录

  • 前言
  • 获取股票的数据
  • 绘制K线图
  • 均线图
  • 成交量

前言

都说2020年是牛市的起点,很显然对于数据来说,程序员具有绝对的优势,因为大多数程序员一辈子都在跟数据在打交道,而程序员只要掌握了数据的处理以及图表的绘制,就可以在股市中游刃有余。

但是,股票量化交易专栏并不是介绍基础的,而只讲解股票相关的知识。所以,对matplotlib图表绘制以及numpy,pandas库,我们不会做过多的介绍,需要看此类博客,还需要这3个基础知识。下面,我们直接进入正题。

获取股票的数据

对于python语言来说,有很多获取股票的操作库,比如akshare、baostock以及tushare库。而这3个股票数据获取库都是大同小异,所以这里小编后续章节都是基于akshare库进行股票数据的获取。话不多说,我们来看看如何获取近1个月的股票数据。代码如下所示:

import akshare as ak
def get_codeData(code="sz002241"):df = ak.stock_zh_a_daily(symbol=code, start_date="20201203", end_date="20210115",adjust="qfq")df.to_excel("歌尔股份k.xlsx")

如上面代码所示,我们使用stock_zh_a_daily方法获取一段时间的数据,这里的日期可以根据你的需求进行调整,比如设置start_date=“20200101”,end_date=“20210101”,就可以获取一年时间段的股票数据。

而股票的代码有sh与sz之分,sz代表深市的股票,所有深市的股票前面都必须带上sz,比如这里的歌尔股份,就是sz002241。同样的,sh是上证交易所的股票,所有上证的股票前面必须带上sh。

这里,我们来看看获取的股票数据格式,如下图所示:

date:交易日期
open:代表开盘价
high:当天最高价
low:当天最低价
close:当天收盘价
volume:当天成交量(元)
outstanding_share:流动股本(股)
turnover:换手率

既然已经拿到了数据,下面我们来绘制K线图。

绘制K线图

在python中,绘制K线图需要用到mpl_finance库,而这个库提供了4种方式绘制K线图,这里我们介绍其中的一种,代码如下所示:

import mpl_finance as mpf
import matplotlib.pyplot as plt
import pandas as pd#创建绘图的基本参数
fig=plt.figure(figsize=(12, 8))
ax=fig.add_subplot(111)#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
#显示出来
plt.show()

运行此段代码后,会显示如下效果图:

这个K线图有一个问题,就是X坐标轴并不是显示的时间,而是数字,这是因为我们绘制K线图的方法,并没有提供X轴的参数,那怎么让下面的数字替换为时间呢?我们先来看一段代码:

import matplotlib.ticker as ticker
#将股票时间转换为标准时间,不带时分秒的数据
def date_to_num(dates):num_time = []for date in dates:date_time = datetime.strptime(date, '%Y-%m-%d')num_date = date2num(date_time)num_time.append(num_date)return num_time#创建绘图的基本参数
fig=plt.figure(figsize=(12, 8))
ax=fig.add_subplot(111)#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
def format_date(x, pos=None):if x < 0 or x > len(df['date']) - 1:return ''return df['date'][int(x)]
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
#显示出来
plt.show()

这里,我们定义了2个方法:第1个方法date_to_num主要的作用就是将获取的时间数据转换为标准的日期数据;第2个方法,就是根据X的数值替换时间值。

其中,set_major_formatter方法是将数值替换为时间值的操作库,而plt.setup的功能就是设置X轴的标签倾斜45度以及右对齐。运行之后,我们的K线图就显示的非常完美了,如下图所示:

均线图

虽然我们实现了K线图,但是有没有发现,其实大多数的股票交易软件K线图上面其实还标记有均线,比如常用的有5日均线,10日均线,30均线。所以,我们需要将均线一起添加到我们的K线图之上。计算均线的方式如下:

df["SMA5"] = df["close"].rolling(5).mean()
df["SMA10"] = df["close"].rolling(10).mean()
df["SMA30"] = df["close"].rolling(30).mean()

3行代码就可以获取到股票的均线值。接着,我们可以使用上面的ax进行绘制均线了,添加的代码如下所示:

ax.plot(np.arange(0, len(df)), df['SMA5'])  # 绘制5日均线
ax.plot(np.arange(0, len(df)), df['SMA10'])  # 绘制10日均线
ax.plot(np.arange(0, len(df)), df['SMA30'])  # 绘制30日均线

这里,同样将X轴设置为数字,将这两段代码添加到上面的K线图代码中,自然也会将X轴替换为时间。运行之后,显示效果如下图所示:

这里5日均线为蓝色,10日均线为橙色,30日均线为绿色,如果需要自己设置颜色,可以在每条均线的的绘制方法中加入color参数。

细心的读者肯定发现30日均线只有最后一小段,这是因为前29日不够30日是算不出均线的,同样的5,10日均线也是如此。

成交量

最后,我们还需要绘制成交量。在多数的股票交易软件中,上面是K线图,一般下面对应的就是成交量,这样对比起来看,往往能直观的看到数据的变化。

但是,因为上面有个K线图,那么同一个画布中就有了2个图片,且它们共用一个X轴,那么我们需要更改一下基本的参数,代码如下所示:

import mpl_finance as mpf
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import numpy as np
#创建绘图的基本参数
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(15, 10))
ax1, ax2 = axes.flatten()#获取刚才的股票数据
df = pd.read_excel("歌尔股份k.xlsx")
mpf.candlestick2_ochl(ax1, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',colordown='green',alpha=1.0)
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
def format_date(x, pos=None):if x < 0 or x > len(df['date']) - 1:return ''return df['date'][int(x)]
df["SMA5"] = df["close"].rolling(5).mean()
df["SMA10"] = df["close"].rolling(10).mean()
df["SMA30"] = df["close"].rolling(30).mean()
ax1.plot(np.arange(0, len(df)), df['SMA5'])  # 绘制5日均线
ax1.plot(np.arange(0, len(df)), df['SMA10'])  # 绘制10日均线
ax1.plot(np.arange(0, len(df)), df['SMA30'])  # 绘制30日均线
ax1.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
#显示出来
plt.show()

这里,我们将绘图的画布设置为2行1列。同时,将上面绘制的所有数据都更改为ax1,这样均线与K线图会绘制到第一个子图中。

接着,我们需要绘制成交量,但是我们知道,一般股票交易软件都将上涨的那天成交量设置为红色,而将下跌的成交量绘制成绿色。所以,首先我们要做的是将获取的股票数据根据当天的涨跌情况进行分类。具体代码如下:

red_pred = np.where(df["close"] > df["open"], df["volume"], 0)
blue_pred = np.where(df["close"] < df["open"], df["volume"], 0)

如上面代码所示,我们通过np.where(condition, x, y)筛选数据。这里满足条件condition,输出X,不满足条件输出Y,这样我们就将涨跌的成交量数据进行了分类。

最后,我们直接通过柱状图方法绘制成交量,具体代码如下所示:

ax2.bar(np.arange(0, len(df)), red_pred, facecolor="red")
ax2.bar(np.arange(0, len(df)), blue_pred, facecolor="blue")

将这4行代码,全部加入到plt.show()代码的前面即可。

运行之后,输出的效果图如下:

K线图、均线图与成交量就讲到这里,下一篇介绍震荡类指标KDJ的相关知识。

python股票量化交易(1)---K线图、均线与成交量绘制相关推荐

  1. python绘制k线图_Python使用PyQtGraph绘制股票行情K线图

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

  2. python股票量化交易(9)---使用TA-Lib库实现股价走势对比图

    凡天将发斯人也,未发其福,先发其慧;此慧一发,则浮者自实,肆者自敛;建所温良若此,天启之矣. 目录 前言 计算各类指标 绘图 前言 在众多的市场股票交易软件中,每个界面并不仅仅只显示一个指标图,往往股 ...

  3. 《Python股票量化交易从入门到实践》随书赠送“回测框架”的使用帮助

    点击:QTYX最新版本使用指南[文字版] 点击:QTYX最新版本使用指南[视频版] 点击: QTYX历史版本更新说明 赠送"回测框架"的目的 为了帮助读者再建立一座从书本知识到实战 ...

  4. python股票量化交易接口是应用到股票上吗?

    python股票量化交易接口是应用到股票上吗?当然可以,而且是任何交易者都可以使用量化交易技术,股票交易数据是很容版易采集的,就是分析起来比权较麻烦,如果题主是职业散户,美股研究社更建议使用一些软件炒 ...

  5. python股票量化交易(8)---K线图:锤头,射击之星,早晨之星

    人之有志,如树之有根,立定此志,须念念谦虚,尘尘方便,自然感动天地,而造福由我. 目录 锤头 倒锤头 射击之星 早晨之星 锤头 本篇接着上篇介绍K线形态. 首先,我们今天介绍的第一个K线形态是锤头,T ...

  6. python股票量化交易(7)---K线图:乌鸦、乌云压顶、十字星

    随缘济众,其类至繁,约言其纲,大约有十:第一,与人为善;第二,爱敬存心;第三,成人之美;第四,劝人为善;第五,救人危急;第六,兴建大利;第七,舍财作福;第八,护持正法;第九,敬重尊长;第十,爱惜物命. ...

  7. 同花顺选股python开发_量化之路-python绘图-高仿同花顺绘制股票K线图+均线+成交量+MACD+KDJ(附代码)...

    上一期介绍了k线图的简单绘制,可以实现股票趋势的查看分析 本期介绍一种用python matplotlib实现高仿同花顺界面的绘图方法 一.话不多说上效果图(还是以601011宝泰隆为例哈^^) 二. ...

  8. 用python绘制股票图_一步一步教你用Python画出专业的K线图

    漂亮的界面是量化程序的脸面,直观专业的界面能帮助我们了解股票的走势和形象地展示量化交易的结果.本文介绍如何使用matplotlib做出专业的K线图和展示各种技术指标: matplotlib是受MATL ...

  9. Python画图实战之画K线图【附带自动下载股票数据】

    关于Python画图的基本知识可以先查看下面这篇文章Python画图(直方图.多张子图.二维图形.三维图形以及图中图)https://blog.csdn.net/weixin_41896770/art ...

最新文章

  1. filter[过滤器]使用大全
  2. 计算机视觉与深度学习 | SLAM之傻瓜书《 SLAM for Dummies》
  3. JavaEE 设计模式
  4. mysql表结构设计_表结构设计
  5. 如何把自己github博客配置到一个腾讯云购买的自定义域名上
  6. java空心三角形_java经典算法_019打印三角形(空心,实心)
  7. pl sql入门比较好的书_面试官问你SQL?这几本书足够了
  8. 如何在Node.js中打印堆栈跟踪?
  9. 【java笔记】常用函数式接口(4):Funtion接口
  10. ELK日志搜索平台搭建
  11. 2021-08-15 reponse文件下载路径
  12. Hive 实用的第三方 UDF 收集
  13. 饿了么UI组件库中,Upload组件上传闪动的解决
  14. python 微信开发库_WeRoBot 是一个微信公众号开发框架
  15. “绿萌”仿“大麦”演出购票APP
  16. vscode c++语法检查以及指定c++标准
  17. 论文阅读笔记《Locality Preserving Matching》
  18. windows下C++实现Unicode和ASCII编码的互转
  19. 8小时浓度均值即连续8个小时浓度的平均值
  20. 京东财报图解:年营收9516亿增28% 全渠道取得阶段性进展

热门文章

  1. 单片机实验汇编2--P1口输入、输出实验
  2. python-点击消除
  3. 滴滴自动驾驶网约车落地上海,而这些中国公司早已拿到美国Robotaxi牌照
  4. Matlab学习——基本操作与矩阵输入
  5. ESP32开发(一):搭建windows开发环境--ESP-IDF工具命令提示符操作
  6. 精妙绝伦的jQuery——改进导航:菜单、标签及折叠选项
  7. 中国汽车用品行业需求态势及销售前景规模调研报告2021-2027年
  8. [51nod1355]斐波那契的最小公倍数
  9. linux教程超详细,linux搭建node超详细教程
  10. springboot zipkin调用链