财务Python量化选股(一)财经数据获取
股票分析主要回答两个问题:
(1)如何从股票池中选出符合自己认为有价值的股票?
(2)选出合适的股票后如何构建投资组合并动态调整?
财经数据获取
对于金融分析来说,获取数据是第一步。Python的一个强大功能之一就是数据获取(爬虫)。但是对于没时间学爬虫程序的小白来说,python丰富的开源包为我们节省了不少时间精力,只要会用前人的车轮,就可以造就自己的车。
Python提供金融股票数据的包,国外的包有pandas_datareader、yfinance,国内的包有tushare、baostock。接下来,我们就比较一下这4种开源金融数据接口。
01 Pandas提供的数据接口DataReader
DataReader是Pandas提供的专门从财经网站获取金融数据的API接口,DataReader可从多个金融网站获取到股票数据,如“Yahoo!Finance” 、“Google Finance”等,这里以Yahoo为例。使用分析:出现过yahoo数据库关闭接口的情况,而且获取数据非常慢
1. 安装DataReader,并导入环境

2. 获取股票数据
以深市A股的000875在2018年1月1日的交易数据为例:
注:中国上市股票及代码说明
- 沪市A股:沪市A股的代码是以600、601或603打头
- 沪市B股:沪市B股的代码是以900打头
- 深市A股:深市A股的代码是以000打头
- 深市B股:深市B股的代码是以200打头
- 中小板:中小板的代码是002打头
- 创业板:创业板的代码是300打头的股票代码

股票数据说明:
- High(最高价):是指当日所成交的价格中的最高价位。
- Low(最低价):是指当日所成交的价格中的最低价位。
- Open(开盘价):以竞价阶段第一笔交易价格为开盘价,如果没有成交,以前一日收盘价为开盘价。
- Close(收盘价):指每天成交中最后一笔股票的价格。
- Volume(成交量):当日股票的成交量
- Adj Close(复权收盘价):就是考虑分红、送红股、配股、增发等因素后的可比价格
02yfinance库
也是从yahoo财经网站上抓取股票信息,使用效果跟DataReader+yahoo一样
1. 安装并导入环境

2. 获取股票数据
以深市A股的000875在2018年1月1日的交易数据为例

03 Tushare库
官网:https://tushare.pro/
Tushare是目前国内历史比较久的量化数据接口,最近推出了Tushare Pro,包含了更多的数据,获取数据的速度也有所提高。
虽然号称免费,但是小编体验了一下,使用Tushare需要注册并帮助推广以获取积分,有积分才能使用接口,新注册用户几乎做不了任何事情。
但是Tushare提供的数据集还是非常诱人的,不仅有股票,还有期货、期权、债券、外汇等,而且文档也很详细,小伙伴们还是可以尝试一下的。

1. 安装并导入环境

2. 目前tushare旧版功能还能使用,且不需要积分

3. 设置凭证码
若使用Pro版接口,先设置tushare pro的token凭证码(只需设置一次),如果没有请访问https://tushare.pro注册申请

因为小编没有积分,Pro功能学员自行探索吧

04 baostock
官网:www.baostock.com,是一个免费、开源的证券数据平台(无需注册)
使用分析:A股K线数据最早只能追溯到2006-01-01,取数据需转为dataframe略显繁琐
1. 安装并导入环境

2. 获取股票数据
以深市A股的000875在2018年1月1日的交易数据为例

其中:adjustflag复权状态(1:后复权, 2:前复权,3:不复权)
- 前复权即就是保持现有价位不变,将以前的价格缩减,将除权前的K线向下平移,使图形吻合,保持股价走势的连续性。
- 后复权就是把除权后的价格按以前的价格换算过来。复权后以前的价格不变,现在的价格增加。
- 比较历史价格时,以历史价格为基准时,就要用后复权;要看现在的股价与历史价格的关系,且以现在的价格为基准时,就要用前复权;仅仅是观察现在的价格,不与历史价格相比较时,用不复权即可。

3. 转化数据类型
返回的数字都是以字符串方式存储的,还得转化数据类型才可以进行后续计算

比较结论
整体可以看到,pandas_datareader或yfinance一句话搞定的事情,baostock搞了一整段代码,无奈,yahoo的连接实在太慢了,而且提供的数据种类也没有国内接口多,所以,后续案例中,咱们还是用baostock吧~