案例 股票K线图绘制
案例背景
本小节的内容讲解如何使用Python绘制K线图,主要包括两个部分:
- 使用
tushare获取股票数据 - 使用
mplfinance来绘制K线图,mplfinance是Matplotlib中用来实现金融数据可视化的模块,现在已经独立维护
在使用两个库之前,首先需要安装这两个库,这里使用 pip 安装的方式
如果用 Windows 系统的命令行进行安装,则打开 cmd 命令行,逐句输入以下代码然后按下回车
bash
pip install tushare mplfinance
如果用 Jupyter Notebook 编辑器进行安装,则在 Notebook 代码框中输入以下代码并运行(注意感叹号是英文格式)
bash
!pip install tushare mplfinance
获取股票数据
首先使用tushare获取股票数据
python
# 导入 tushare 库
import tushare as ts
python
# 获取股票数据
data = ts.get_k_data('600036',start="2022-03-01",end="2022-06-01") # 获取600036股票2022-03-01到2022-06-01之间的数据
data.head()
本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
| | date | open | close | high | low | volume | code |
| 35 | 2022-03-01 | 46.74 | 46.98 | 47.24 | 46.10 | 406454.0 | 600036 |
| 36 | 2022-03-02 | 46.54 | 46.21 | 46.97 | 46.18 | 397076.0 | 600036 |
| 37 | 2022-03-03 | 46.32 | 46.47 | 46.71 | 46.19 | 311290.0 | 600036 |
| 38 | 2022-03-04 | 45.99 | 45.44 | 46.13 | 45.24 | 577897.0 | 600036 |
| 39 | 2022-03-07 | 44.75 | 43.50 | 45.00 | 43.24 | 1014354.0 | 600036 |
|---|
如果网络出现问题,无法使用以上接口下载数据,也可以使用本地保存的数据
python
# 运行以下代码将数据存储到本地
# data.to_csv("data.csv", index=False)
# 运行以下代码从本地文件读取数据
# import pandas as pd
# data = pd.read_csv("data.csv")
# data.head()
K 线图绘制
股票 K 线图基本知识
K 线图是由股票的四个价格来绘制的柱状图,包括了:
- 开盘价:当天开始交易(9:30,AM)时的股票价格
- 收盘价:当天结束交易(3:00,PM)时的股票价格
- 最高价:当天股票达到最高点时的价格
- 最低价:当天股票达到最低点时的价格
基于这四个价格可绘制 K 线图,K 线图由包括阴线和阳线在内两种不同颜色的柱体组成,并且中国使用的颜色与美国相反
- 阳线:当股票某天的收盘价高于开盘价时,说明股票上涨,用红色的阳线绘制
- 阴线:当股票某天的收盘价低于开盘价时,说明股票下跌,用绿色的阴线绘制
通常 K 线图下方会有一个交易量图。交易量指的是特定时间段内交易的股票总量,在 K 线图中也就是当天交易的股票总量。每一根 K 线的下方都对应了一根交易量柱,代表了这一天产生的交易量
绘制股票 K 线图
使用 mplfinance 绘制 K 线图之前,还对所使用的数据有一些要求。首先数据必须是 Dataframe 格式,其次 Dataframe 数据的索引必须设置为 DatetimeIndex 格式的日期数据,才能够被mplfinance中绘制 K 线图的函数使用,因此先用 Pandas 调整数据的格式
python
# 导入 pandas 库转换数据
import pandas as pd
python
# 原有数据已经是 Dataframe 格式,这里将索引转换为 DatetimeIndex 格式
data.index = pd.DatetimeIndex(data['date'])
还需要设置 K 线图的绘制方式为红色上涨、绿色下跌等样式
python
# 导入 mplfinance 库
import mplfinance as mpf
python
color = mpf.make_marketcolors(
# K 线阳线颜色
up='r',
# K 线阴线颜色
down='g',
# K 线边缘颜色
edge='i',
# 交易量颜色根据当天和前一天的收盘价变化
vcdopcod=True,
inherit=True
)
style = mpf.make_mpf_style(
# K 线颜色
marketcolors=color,
# 显示中文
rc={'font.family': 'SimHei'},
# 显示网格
gridaxis = 'both',
gridstyle = '-.'
)
# 标题内容及位置
title = {'title':'招商银行(600036)', 'y':0.93}
最后用mplfinance 的 plot 函数绘制K线图
plot 函数的参数:
data: 用于绘制 K 线图的数据style: 自主设置的绘图风格,例如阴阳线颜色type: 绘制图表的种类,这里 'candle' 表示 K 线图width_adjuster_version: 交易量柱状图的间隔volume: 设置为 True 显示交易量,False 不显示title: 图表的标题show_nontrading: 设置为 True 显示非交易日,False 不显示
python
# 调用mplfinance提供的方法绘制k线图
mpf.plot(
data,
style=style,
type='candle',
width_adjuster_version='v0',
volume=True,
title=title,
show_nontrading=False
)

均线图绘制
K 线图中往往还同时绘制一些折线,也就是均线图。均线图是根据每一天前一段时间(数天)内的收盘价平均值来绘制的曲线图,常见的有根据五天平均收盘价绘制的 5 日均线(MA5),以及类似的 10 日均线(MA10)和 20 日均线(MA20)
以 5 日均线为例,假设当天收盘价为 c_price1c\price{1}c_price1,前一天的收盘价为 c_price2⋯c\price{2}\cdotsc_price2⋯ 前四天的收盘价为 c_price5c\price{5}c_price5。则 5 日均线上,当天的值为
c_price1+c_price2+c_price3+c_price4+c_price55\frac{c\price{1} + c\price{2}+c\price{3}+c\price{4}+c\price{5}}{5}5c_price1+c_price2+c_price3+c_price4+c_price5
计算每一日的前5日收盘价均值,之后连接成一条平滑的曲线就是 5 日均线
通过在绘制 K 线图的函数中添加 mav 参数,指定绘制的均线图的天数,即可绘制出带均线图的 K 线图。同时均线的颜色方面,这里将 5 日均线绘制为蓝色,10 日均线绘制为黄色,20 日均线绘制为紫色。通过修改绘图风格的参数设置均线颜色
python
style = mpf.make_mpf_style(
# K 线颜色
marketcolors=color,
# 显示中文
rc={'font.family': 'SimHei'},
# 显示网格
gridaxis = 'both',
gridstyle = '-.',
# 按照均线的绘制顺序,设置颜色分别为蓝色、黄色、紫色
mavcolors = ['dodgerblue', 'goldenrod', 'm']
)
python
# 调用mplfinance提供的方法绘制k线图
title = {'title':'招商银行(600036)', 'y':0.93}
mpf.plot(data,
style=style,
# 绘制 5 天、10 天、20 天的均线,颜色按照设置的顺序
mav=(5, 10, 20),
type='candle',
width_adjuster_version='v0',
volume=True,
title=title,
show_nontrading=False,
returnfig=True)
(<Figure size 800x575 with 4 Axes>,
[<Axes:ylabel='Price'>, <Axes:>, <Axes:ylabel='Volume $10^{6}$'>, <Axes:>])
