目录

(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

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐