Python量化交易——七行python代码生成K线图(最后有干货)

2025-10-28 02:39:28 7392

Python量化交易——利用tushare和mplfinance生成K线图

tushare介绍mplfinance介绍获取K线数据处理数据数据的可视化更多的效果

tushare介绍

tushare是一个立足于国内的金融数据包。通过它可以相当容易地获取包括股票、基金、期货在内的大量金融数据,使用非常简便而且基础功能免费。 tushare的早期版本是完全免费的,不过功能也相对单一,后来升级到了tushare pro之后,支持的数据种类大大扩展,同时也开启了积分的功能,部分高级数据获取功能是需要一定积分的,积分通常需要付费而且每年都需要支付。不过,平心而论,相比早期版本,升级到pro版本后,数据的丰富程度、数据提取速度和稳定性、可靠性都大大提升,相比获得的提升,支付一点点费用完全可以说是物超所值的。

点击这里查看tushare文档点击这里注册tushare账号

mplfinance介绍

mplfinance是matplotlib的一个分支,它是基于matplotlib的一个金融数据可视化图表包,可以非常方便地用于各种常见金融数据的可视化。它最初的来源是 matplotlib.finance,后来从matplotlib中分离出来成为一个独立的项目,曾经使用过mpl-finance的名字,后来改名为mplfinance,它是一个开源项目,gitHub链接在这里。

对大多数金融数据使用者来说,最简单也最常见的金融图表非K线图莫数,后面可以看到,使用mplfinance模块,只需要一行代码就可以生成需要的K线图了。不过,为了生成K线数据,我们需要一支股票的open,high,low,close,以及volume历史价格/成交量数据,并且把这些数据存储到一个包含时间序列标签的DataFrame对象中。

获取K线数据

前面所说的所有数据都可以通过tushare模块获取,而且也只要一行代码即可。 tushare提供了一系列的股票数据接口,在tushare的文档网站上有相当完备的解释,因此这里就不赘述了,只简单介绍tushare的最基本用法。 首先导入tushare模块

import tushare as ts

在tushare中可以用pro_bar()函数获取股票的K线数据,默认的数据是日线数据。将股票代码、起止日期传入函数后就可以获取相应时段里的K线数据,例如,通过以下代码可以获取股票“000001.SZ”在2019年的全部日线数据:

In [1]: daily = ts.pro_bar('000001.SZ', start_date='2019-01-01', end_date='20191231')

In [2]: daily

ts_code trade_date open ... pct_chg vol amount

0 000001.SZ 20191231 16.57 ... -0.7242 704442.25 1154704.348

1 000001.SZ 20191230 16.46 ... -0.3608 976970.31 1603152.786

2 000001.SZ 20191227 16.53 ... 0.9715 1042574.72 1741473.179

3 000001.SZ 20191226 16.34 ... 1.0429 372033.86 610381.757

4 000001.SZ 20191225 16.45 ... -0.6098 414917.98 679664.596

.. ... ... ... ... ... ... ...

239 000001.SZ 20190108 9.73 ... -0.8214 402388.11 389247.795

240 000001.SZ 20190107 9.84 ... -0.1026 865687.66 841166.430

241 000001.SZ 20190104 9.24 ... 5.0647 1481159.06 1422149.888

242 000001.SZ 20190103 9.18 ... 0.9793 415537.95 384457.707

243 000001.SZ 20190102 9.39 ... -2.0256 539386.32 498695.109

[244 rows x 11 columns]

处理数据

分析获取的数据的结构,我们可以发现tushare直接获取的数据并不符合mplfinance的需要。获取的数据结构如下:

In [3]: daily.info()

RangeIndex: 244 entries, 0 to 243

Data columns (total 11 columns):

ts_code 244 non-null object

trade_date 244 non-null object

open 244 non-null float64

high 244 non-null float64

low 244 non-null float64

close 244 non-null float64

pre_close 244 non-null float64

change 244 non-null float64

pct_chg 244 non-null float64

vol 244 non-null float64

amount 244 non-null float64

dtypes: float64(9), object(2)

memory usage: 21.1+ KB

其中的open、high、low、close、和vol几列信息是我们需要的,其余的数据列都可以删除掉,另外,这些数据的Index并不是时间序列,交易日期是以字符串的形式存储在trade_date列中的,需要将日期作为DataFrame的Index,并把它们转化为pandas.Timestamp格式。

In [4]: daily.index=daily.trade_date

In [5]: daily = daily.rename(index=pd.Timestamp)

转化后,删除不需要的列,调整vol列的列名称为volume,并把数据按日期排序:

In [6]: daily.drop(columns=['ts_code', 'trade_date', 'pre_close', 'change', 'pct_chg', 'amount'], inplace=True)

In [7]: daily.columns=['open', 'high', 'low', 'close', 'volume']

In [8]: daily.sort_index(inplace=True)

In [9]: daily.info()

DatetimeIndex: 244 entries, 2019-01-02 to 2019-12-31

Data columns (total 5 columns):

open 244 non-null float64

high 244 non-null float64

low 244 non-null float64

close 244 non-null float64

volume 244 non-null float64

dtypes: float64(5)

memory usage: 21.4+ KB

这样,K线数据就已经准备好了。

数据的可视化

通过mplfinance可以非常容易地生成K线图,只要将这个DataFrame对象直接传递到plot()函数中即可,首先导入mplfinance:

import mplfinance as mpf

然后,使用mpl.plot()函数就可以轻松生成K线图,这里需要传递type=candle参数以生成我们最熟悉的蜡烛图,但是还有很多其他的图表效果和类型。首先生成蜡烛图,通过volume=True来显示交易量图。

In [10]: mpf.plot(daily, type='candle', volume=True)

一张默认的蜡烛K线图就创建出来了:

更多的效果

在使用mplfinance的plot()方法时,有很多参数可以用来控制图表的视觉效果,或者添加更多相关信息。例如,我们会觉得黑白两色的K线图看上去不那么习惯,这是可以使用style参数改变视觉外观,例如:

In [11]: mpf.plot(daily, type='candle', volume=True, style='yahoo')

另外,还可以使用mav参数给K线图添加不同的均线,如5日、10日、20日、30日均线:

In [12]: mpf.plot(daily, type='candle', volume=True, style='yahoo', mav=(5, 10, 20, 30))

效果如下: 不过,仅仅使用七行代码生成的K线图,虽然看上去也像那么回事了,但是对于真正需要使用K线图作为研究工具或者可视化工具的朋友们来说,是远远不够的。在我看来,至少上面的K线图有以下这些问题:

颜色风格不符合习惯:众所周知中国股市K线图的颜色代码跟世界惯例是恰好相反的,其他国家都是红跌绿涨而我国是红涨绿跌,上面这幅图中的颜色信息并不符合中国股市的惯例,让人看着别扭。信息显示不够完整:一般的K线图都会显示出图上最后一个交易日的OHLC也就是开/高/低/收价格、使用红色和绿色表示本交易日相对过去的涨跌情况,同时还能显示其他的相关数据如涨幅、交易额、交易量等等信息,另外,股票代码、名称等信息也应该显示出来。均线系统不够完善:首先是均线不完整,最初的多个交易日内没有均线,这是因为仅仅使用图表内的数据计算均线导致产生了空缺值,其次,除了均线之外,没有其他的相关价格指标,如布林带线等与价格一同显示,也没有区间内最高价、最低价的指示。无动态交互功能:无法拖动平移K线以显示更早或更晚的交易日K线数据,无法通过鼠标滚轮增大或缩小显示的K线的范围,也无法通过点选某一根K线以显示当天交易日的详细信息。

同样有上面发现的朋友,可以关注我的另一篇文章,将一步步地解决上述问题,制作一张可以交互(鼠标拖动平移缩放)带完整均线和指标的K线图,效果图如下。

Copyright © 2022 硬核游戏活动情报站 All Rights Reserved.