简介
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获取,具体可以参考官网。
-
login()函数
登录系统。建立与服务器的连接,无需注册即可登录。需要说明的是, 登录后超过一段时间没有操作再调用api请求时会超时,需要重新登录才能继续下载数据
import baostock as bs
bs.login()
不需要使用的时候可以主动调用bs.logout()
函数断开与服务器的连接。
-
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()
-
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
写文章不易,觉得本文对你有帮助的话,帮忙点个在看吧。