【金融数据接口】baostock数据python使用教程

您所在的位置:网站首页 股票数据记录 【金融数据接口】baostock数据python使用教程

【金融数据接口】baostock数据python使用教程

2024-06-22 00:51| 来源: 网络整理| 查看: 265

目录

(1)官网接口文档

(2)包安装

(3)使用方法

(4)常用函数说明

1.query_all_stock:证券代码

2.query_history_k_data_plus:k线数据

3.query_trade_dates:交易日历

(1)官网接口文档

baostock接口文档详细说明官网:

Python API文档 - www.baostock.com

(2)包安装

cmd安装:pip install baostock -i Simple Index --trusted-host pypi.tuna.tsinghua.edu.cn

cmd测试是否安装成功:python -c "import baostock as bs; bs.login()"

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

(3)使用方法

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

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

import baostock as bs bs.login() """ 接口使用 参考手册: http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3 """ bs.logout() # 这句一般不调用

(4)常用函数说明

常用函数主要有login(),query_all_stock(),query_history_k_data_plus()3个。

其他的还有季度财务数据、公司报告信息、宏观经济数据等可以通过api获取,具体可以参考官网。

1.query_all_stock:证券代码

获取指定交易日期所有股票列表。

可以通过参数day获取某一天的数据,参数为空表示默认获取当天的数据。返回类型为baostock自定义的数据类型,通过get_data()函数可以获取Pandas DataFrame类型的数据如果某天为非交易日 ,则get_data()返回的DataFrame为空,比如2022-05-28是周六不交易,则len(bs.query_all_stock('2022-05-28').get_data()) 返回为0 # -*- coding: utf-8 -*- import baostock as bs import datetime as dt import pandas as pd bs.login() if __name__ == "__main__": date = "2022-05-27" stock_df = bs.query_all_stock(date).get_data() print(stock_df)

输出结果

login success! 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]

2.query_history_k_data_plus:k线数据

官网详细说明:Python API文档 - www.baostock.com

获取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: 不复权。 import baostock as bs bs.login() code = "SH.601998" 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-06-28" adjustflag = "2" rs = bs.query_history_k_data_plus(code, data_fields, start_date=start_date, end_date=end_date, frequency='d', adjustflag=adjustflag) # 一次性获取全部数据 # data = rs.get_data() # 获取全部数据 # 注意获取全部数据后,rs就为空了 # print(data) # 一行一行获取数据 while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 # print(type(rs.get_row_data())) # list print(rs.get_row_data()) bs.logout() 3.query_trade_dates:交易日历

方法说明:通过API接口获取股票交易日信息,可以通过参数设置获取起止年份数据,提供上交所1990-今年数据。 返回类型:pandas的DataFrame类型。

# -*- coding: utf-8 -*- import baostock as bs import pandas as pd import datetime as dt import os # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) if __name__ == "__main__": # 获取年份 last_year = dt.datetime.now().year - 1 this_year = dt.datetime.now().year next_year = dt.datetime.now().year + 1 # 获取交易日信息 # start_date:开始日期,为空时默认为2015-01-01 # end_date:结束日期,为空时默认为当前日期 rs = bs.query_trade_dates(start_date=f"{last_year}-12-20", end_date=f"{next_year}-01-31") print('query_trade_dates respond error_code:' + rs.error_code) print('query_trade_dates respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) # print(result) # 筛选为交易日的数据 result = result[result["is_trading_day"] == '1'] del result["is_trading_day"] result.columns = ['trade_date'] # print(result) # 结果集输出到csv文件 save_path = f"./{this_year}_trade_day.csv" if len(result) > 0: result.to_csv(save_path, encoding="gbk", index=False) else: print("get trade day from baostock failed") # 登出系统 bs.logout() # 查看数据 if os.path.exists(save_path): df = pd.read_csv(save_path) print(df)

最终打印的df如下

trade_date 0 2022-12-20 1 2022-12-21 2 2022-12-22 3 2022-12-23 4 2022-12-26 .. ... 246 2023-12-25 247 2023-12-26 248 2023-12-27 249 2023-12-28 250 2023-12-29 [251 rows x 1 columns]

end



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3