Python量化交易 – tushare库 – 生成K线图

tushare库

  • 1. tushare 介绍
  • 2. mplfinance 介绍
  • 3. 获取K线数据
  • 4. 处理数据
  • 5. 数据的可视化

1. tushare 介绍

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

点击这里查看 tushare 文档

点击这里注册 tushare 账号

2. mplfinance 介绍

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

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

3. 获取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]

4. 处理数据

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

In [3]: daily.info()                                                               
<class 'pandas.core.frame.DataFrame'>
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()                                                           
<class 'pandas.core.frame.DataFrame'>
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线数据就已经准备好了。

5. 数据的可视化

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

点击这里查看完整的实现代码