量化数据--使用BaoStock免费下载股票数据

简介

baostock是一个无需注册的免费开源证券数据平台,可以通过python API获取证券数据。其返回的数据格式为pandas DataFrame类型, 对数据操作非常友好。

  • 优点:免费,无需注册,包含A股股票、指数数据、财务数据

  • 缺点:目前数据不全,缺少港股、期货、外汇和基金等金融数据

数据时间范围说明:

  • 股票数据:包括日、周、月K线数据,时间范围:1990-12-19至今; 5、15、30、60分钟K线数据,时间范围:1999-07-26至今

  • 指数数据:包括日、周、月K线数据,已包含指数:综合指数,规模指数,一级行业指数,二级行业指数,策略指数,成长指数,价值指数,主题指数,基金指数,债券指数,时间范围:2006-01-01至今

  • 季频财务数据: 已包含的财务数据:部分上市公司资产负债信息、上市公司现金流量信息、上市公司利润信息、上市公司杜邦指标信息。时间范围:2007年至今

  • 季频公司报告:上市公司业绩预告信息,时间范围:2003年至今; 上市公司业绩快报信息,时间范围:2006年至今

每日最新数据更新时间:

  • 当前交易日17:30,完成日K线数据入库;

  • 当前交易日20:30,完成分钟K线数据入库;

  • 第二自然日1:30,完成前交易日“其它财务报告数据”入库。

安装

pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn

安装后,在命令行运行:

python -c "import baostock as bs; bs.login()"

输出”login success!”表明安装成功。

常用函数说明

常用函数主要有login(),query_all_stock(),query_history_k_data_plus()3个。其他的还有季度财务数据、公司报告信息、宏观经济数据等可以通过api获取,具体可以参考官网。

  1. login()函数

登录系统。建立与服务器的连接,无需注册即可登录。需要说明的是, 登录后超过一段时间没有操作再调用api请求时会超时,需要重新登录才能继续下载数据

import baostock as bs
bs.login()

不需要使用的时候可以主动调用bs.logout()函数断开与服务器的连接。

  1. query_all_stock()函数

获取指定交易日期所有股票列表。可以通过参数day获取某一天的数据,参数为空表示默认获取当天的数据。返回类型为baostock自定义的数据类型,通过get_data()函数可以获取Pandas DataFrame类型的数据

In [10]: date = "2022-05-27"
    ...: stock_df = bs.query_all_stock(date).get_data()
    ...: stock_df
Out[10]:
           code tradeStatus   code_name
0     bj.430047           1
1     bj.430090           1
2     bj.430198           1
3     bj.430418           1
4     bj.430489           1
...         ...         ...         ...
5315  sz.399994           1  中证信息安全主题指数
5316  sz.399995           1    中证基建工程指数
5317  sz.399996           1    中证智能家居指数
5318  sz.399997           1      中证白酒指数
5319  sz.399998           1      中证煤炭指数

[5320 rows x 3 columns]

如果某天为非交易日 ,则get_data()返回的DataFrame为空,比如2022-05-28是周六不交易,则len(bs.query_all_stock('2022-05-28').get_data()) 返回为0,如下所示:

In [11]: len(bs.query_all_stock('2022-05-27').get_data())
Out[11]: 5320

In [12]: len(bs.query_all_stock('2022-05-28').get_data())
Out[12]: 0

通过tolist()函数得到股票列表:

stock_list = stock_df['code'].tolist()
  1. query_history_k_data_plus()函数

获取A股历史交易数据。可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据,可查询不复权、前复权、后复权数据,适合搭配均线数据进行选股和分析。返回类型为baostock自定义的数据类型,通过get_data()函数可以获取Pandas DataFrame类型的数据

参数说明如下:

  • code参数为股票代码

  • fields参数支持多指标输入,以逗号分隔,填写内容作为返回类型的列。其中pctChg表示涨跌幅(百分比),peTTM表示滚动市盈率,psTTM为滚动市销率

  • frequency:数据类型,默认为d,日k线;d=日k线、w=周、m=月、5=5分钟、15=15分钟、30=30分钟、60=60分钟k线数据,不区分大小写;指数没有分钟线数据;周线每周最后一个交易日才可以获取,月线每月最后一个交易日才可以获取

  • adjustflag参数:复权类型,默认不复权;1:后复权;2:前复权; 3: 不复权。

示例代码如下:

code = "sz.399994"
data_fields = "date,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ, psTTM,pcfNcfTTM,isST"
start_date = "2022-05-21"
end_date = "2022-05-28"
adjustflag = "2"

kdata_df = bs.query_history_k_data_plus(code, 
       data_fields, 
       start_date=start_date, 
       end_date=end_date,
              frequency='d', 
       adjustflag=adjustflag).get_data()

In [14]: kdata_df
Out[14]:
         date       open       high        low      close   preclose  ...     pctChg     peTTM     pbMRQ     psTTM pcfNcfTTM isST
0  2022-05-23  1333.9767  1339.3266  1323.2326  1339.0444  1323.8745  ...   1.145871  0.000000  0.000000  0.000000  0.000000    0
1  2022-05-24  1338.0567  1340.5022  1270.4979  1270.4979  1339.0444  ...  -5.119061  0.000000  0.000000  0.000000  0.000000    0
2  2022-05-25  1273.4179  1290.6949  1273.4179  1288.6189  1270.4979  ...   1.426291  0.000000  0.000000  0.000000  0.000000    0
3  2022-05-26  1287.7710  1306.6983  1264.3422  1299.1283  1288.6189  ...   0.815555  0.000000  0.000000  0.000000  0.000000    0
4  2022-05-27  1312.1094  1320.1226  1287.6731  1297.4858  1299.1283  ...  -0.126431  0.000000  0.000000  0.000000  0.000000    0

在回测过程中,通常不希望停盘数据对回测造成干扰,可以将停盘数据删除。

if kdata_df.shape[0]:
    kdata_df = kdata_df[(kdata_df['volume'] != '0') & (kdata_df['volume'] != '')]

使用& 交流

关注公众号,获取更多内容。同时还能获取邀请加入量化投资研讨微信群, 与众多量化从业者&爱好者交流、切磋,不错过最新行业发展&技术进展。

微信公众号:诸葛说talk

写文章不易,觉得本文对你有帮助的话,帮忙点个在看吧。

参考

猜你喜欢

转载自blog.csdn.net/richardzhutalk/article/details/125027067