BaoStock证券数据获取

BaoStock证券数据获取平台

一、配置安装

点击跳转到官网

下载安装

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

二、部分功能

1、交易信息

[交易状态查询](交易状态查询 - www.baostock.com)

获取指定交易日期的所有股票列表。可以获取证券代码和交易状态

#导入库
import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取证券信息 ####
rs = bs.query_all_stock(day="2017-06-30")            #day  表示查询的日期,为空默认为当前日期
print('query_all_stock respond error_code:'+rs.error_code)
print('query_all_stock 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)

#### 结果集输出到csv文件 ####   
result.to_csv("D:\\all_stock.csv", encoding="gbk", index=False)
print(result)

#### 登出系统 ####
bs.logout()

###返回数据     证券代码   交易状态(1正常0停牌)    证券名称
##code	tradeStatus code_name
##sh.000001 	1    上证综合指数
##sh.000002 	1    上证A股指数
##sh.000002 	1    上证B股指数
2、证券基本信息

[证券基本资料](证券基本资料 - www.baostock.com)

获取证券基本信息

证券代码、名称、上市日期、退市日期、类型、上市状态

代码

#导入库
#登陆系统
#显示登陆返回信息
...
# 获取证券基本资料
rs = bs.query_stock_basic(code="sh.600000")
# rs = bs.query_stock_basic(code_name="浦发银行")  # 支持模糊查询
print('query_stock_basic respond error_code:'+rs.error_code)
print('query_stock_basic 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)

# 结果集输出到csv文件
# 登出系统
...

#返回值  
#证券代码	名称			上市日期   退市日期		证券类型(1股票,2指数、3其他、4可转债 5ETF)    上市状态
#code	code_name    ipoDate     outDate		type		status
#sh.600000 浦发银行    1999-11-10					1			1
3、证券指数数据

[指数数据](指数数据 - www.baostock.com)

# 导入库
# 登陆系统
# 显示登陆返回信息

# 获取指数(综合指数、规模指数、一级行业指数、二级行业指数、策略指数、成长指数、价值指数、主题指数)K线数据
# 综合指数,例如:sh.000001 上证指数,sz.399106 深证综指 等;
# 规模指数,例如:sh.000016 上证50,sh.000300 沪深300,sh.000905 中证500,sz.399001 深证成指等;
# 一级行业指数,例如:sh.000037 上证医药,sz.399433 国证交运 等;
# 二级行业指数,例如:sh.000952 300地产,sz.399951 300银行 等;
# 策略指数,例如:sh.000050 50等权,sh.000982 500等权 等;
# 成长指数,例如:sz.399376 小盘成长 等;
# 价值指数,例如:sh.000029 180价值 等;
# 主题指数,例如:sh.000015 红利指数,sh.000063 上证周期 等;


# 详细指标参数,参见“历史行情指标参数”章节;“周月线”参数与“日线”参数不同。
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
# 日线:   日期、证券代码、今开盘价、最高价、最低价、收盘价、昨日收盘价、成交数量、成交金额、涨跌幅
# start_date开始日期 , end_date结束日期
# frequency="d"数据类型 d日k线; w周;m月; 5 5分钟;  15 15分钟; 30 30分钟; 60 6分钟

rs = bs.query_history_k_data_plus("sh.000001",
    "date,code,open,high,low,close,preclose,volume,amount,pctChg",
    start_date='2017-01-01', end_date='2017-06-30', frequency="d")

print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond  error_msg:'+rs.error_msg)

# 打印结果集
#rs.fields = "date,code,open,high,low,close,preclose,volume,amount,pctChg".split()   指示列表
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

# 结果集输出到csv文件
result.to_csv("D:\\history_Index_k_data.csv", index=False)
print(result)

# 登出系统
bs.logout()

#返回值
# 日期、证券代码、今开盘价、最高价、最低价、收盘价、昨日收盘价、成交数量、成交金额、涨跌幅
#date code open high low close preclose volume amount pctChg
#2017-01-03  ...

三、实例

1、当日股票信息获取

获取指定交易日期所有股票列表,对每支取票进行基本信息的获取

import baostock as bs
import pandas as pd
import time
import datetime
import openpyxl
now = datetime.datetime.now()
now=str(now)
print(now)

lg = bs.login()

#获取 证券代码查询,返回所有股票代码的值
def get_query_all_stock():
    rs = bs.query_all_stock(day='2022-03-01')     #需要查询日期,空默认当前日期
    print('query_all_stock respond error_code:'+rs.error_code)
    print('query_all_stock respond error_msg:'+rs.error_msg)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())   #证券代码,交易状态 1正常交易2停牌, 证券名称
    return data_list

#获取 证券基本资料,返回指定股票代码对应的基本信息
def get_query_stock_basic(stockcode):
    rs = bs.query_stock_basic(code=stockcode)
    print('query_stock_basic respond error_code:'+rs.error_code)
    print('query_stock_basic respond error_msg:'+rs.error_msg)
    data_list = []
    i = 0
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    if (len(data_list) == 0):
        return -1
    data_list = data_list[0]
    return data_list

#前100条数据中,只有15条有效  如第一条编号bj.430047  没有基本资料

def get_allinfo(): #获取所有股票代码的完整信息
    info_all_list=[]
    stock_all_list=get_query_all_stock()   #首先查询所有股票代码的完整列表
    i=0
    for one in stock_all_list: #对于每一个股票代码查询基本资料
        #i=i+1
        #if i>5:
            #break
        stockcode=one[0]     #代码
        tradeStatus=one[1]    #交易状态 1正常  2停牌
        code_name=one[2]      #名称
        ret_info=get_query_stock_basic(stockcode)
        if(ret_info==-1):
            continue
        #print(stockcode,ret_info)
        code_name2=ret_info[1]     #证券名称   [0]是代码
        ipoDate=ret_info[2]           #上市日期
        outDate=ret_info[3]    #退市日期
        s_type=ret_info[4]   #证券类型 1:股票,2:指数,3:其它,4:可转债,5:ETF
        status=ret_info[5]     #上市状态 1上市  0退市
        bz=''
        if ipoDate=='':
            ipoDate='1900-01-01'
        if outDate=='':
            outDate='2099-12-31'
        datestamp=now
        info_all_list.append((stockcode,tradeStatus,code_name,code_name2,ipoDate,outDate,s_type,status,datestamp,bz))
    return info_all_list

all_list = get_allinfo()     #股票代码所有信息
#设置列名  code证券代码  交易状态  名称  名称  上市日期 退市日期 类型 上市状态
co_li = ['stockcode', 'tradeStatus', 'code_name','code_name2','ipoDate','outDate','s_type','status','datestamp','dz']
print(all_list)
all_df = pd.DataFrame(all_list, columns=co_li)
print(all_df)
bs.logout()
all_df.to_excel('data.xlsx')

效果,该代码在4月13日执行,获取5149条股票基本信息

2、时间库
import time
import datetime

now = datetime.date.today()   #今天
oneday = datetime.timedelta(days=1)   #一天
yeday=str(now-7*oneday)    #七天前字符串
now = str(now)				#今天字符串

rs = bs.query_history_k_data_plus(stockcode,
								"date,code,open,high,low,close,preclose,volume,amount,pctChg",
                                 start_date=yeday, end_date=now)
posted @   Saint_Z  阅读(607)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示