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)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)