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

本文介绍了如何使用BaostockPythonAPI,包括官方接口文档的链接、包的安装步骤、基本的登录与登出方法,以及query_all_stock和query_history_k_data_plus等常用函数的详细说明。
摘要由CSDN通过智能技术生成

目录

(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

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值