BaoStock(免费A股数据平台)
BaoStock 是一个免费的开源中国A股证券数据平台。无需注册或API Key,返回 pandas.DataFrame。
安装
CODEBLOCK0
验证安装:
CODEBLOCK1
预期输出:login success!。
基本用法
每个会话必须以 bs.login() 开始,以 bs.logout() 结束:
CODEBLOCK2
使用 .get_data() 从查询结果中获取DataFrame:
CODEBLOCK3
核心API
1. queryallstock — 获取全部证券列表
获取指定交易日的全部股票/指数代码。
CODEBLOCK4
- - day — 日期字符串
YYYY-MM-DD(默认今天)。非交易日返回空DataFrame。
2. queryhistorykdataplus — K线数据
获取历史K线数据(开高低收量 + 指标)。
CODEBLOCK5
参数说明:
- - code — 股票代码,格式
sh.600000 或 INLINECODE7 - fields — 逗号分隔的字段名(见下方)
- startdate / enddate —
YYYY-MM-DD 格式 - frequency —
d(日线), w(周线), m(月线), 5/15/30/60(分钟线)。指数无分钟级数据。 - adjustflag —
1(后复权), 2(前复权), 3(不复权,默认)
日线可用字段:
INLINECODE19 (日期), code(证券代码), open(开盘价), high(最高价), low(最低价), close(收盘价), preclose(昨收价), volume(成交量), amount(成交额), adjustflag(复权标志), turn(换手率), tradestatus(交易状态), pctChg(涨跌幅), peTTM(滚动市盈率), pbMRQ(市净率), psTTM(滚动市销率), pcfNcfTTM(滚动市现率), isST(是否ST)
分钟线可用字段:
INLINECODE37 (日期), time(时间), code(证券代码), open(开盘价), high(最高价), low(最低价), close(收盘价), volume(成交量), amount(成交额), adjustflag(复权标志)
3. querytradedates — 交易日历
CODEBLOCK6
4. querystockindustry — 行业分类
CODEBLOCK7
5. querystockbasic — 股票基本信息
CODEBLOCK8
- - type —
1 股票, 2 指数, 3 其他 - status —
1 上市, 0 退市
6. querydividenddata — 分红信息
CODEBLOCK9
- - yearType —
report(报告期) 或 operate(实施期)
7. 财务数据(季度)
盈利能力
CODEBLOCK10
营运能力
CODEBLOCK11
成长能力
CODEBLOCK12
偿债能力
CODEBLOCK13
现金流
CODEBLOCK14
杜邦分析
CODEBLOCK15
8. 指数数据
指数成分股
CODEBLOCK16
完整示例: Download Daily K-Line Data and Save as CSV
CODEBLOCK17
股票代码格式
- - 上海证券交易所:
sh.600000, INLINECODE55 - 深圳证券交易所:
sz.000001, INLINECODE57 - 北京证券交易所: INLINECODE58
- 指数:
sh.000001(上证综指), sh.000300(沪深300)
使用技巧
- - 无需注册或API Key — 直接调用
bs.login() 即可开始。 - 长时间不活动会话可能超时 — 重新调用
bs.login() 即可。 - 非线程安全 — 并行下载请使用
multiprocessing(多进程),而非threading(多线程)。 - 数据覆盖范围:A股自1990年至今。
- 财务数据按季度提供,报告期结束后约有2个月的延迟。
- Documentation: http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3
进阶示例
批量下载多只股票数据
CODEBLOCK18
获取全市场股票列表并筛选
CODEBLOCK19
计算技术指标
CODEBLOCK20
获取沪深300成分股并下载数据
CODEBLOCK21
获取财务数据并分析
CODEBLOCK22
完整示例: Simple Backtesting Framework
CODEBLOCK23
🤖 AI Agent 高阶使用指南
对于 AI Agent,在使用该量化/数据工具时应遵循以下高阶策略和最佳实践,以确保任务的高效完成:
1. 数据校验与错误处理
在获取数据或执行操作后,AI 应当主动检查返回的结果格式是否符合预期,以及是否存在缺失值(NaN)或空数据。
- * 示例策略:在通过 API 获取数据框(DataFrame)后,使用
if df.empty: 进行校验;捕获 Exception 以防网络或接口错误导致进程崩溃。
2. 多步组合分析
AI 经常需要进行宏观经济分析或跨市场对比。应善于将当前接口与其他数据源或工具组合使用。
- * 示例策略:先获取板块或指数的宏观数据,再筛选成分股,最后对具体标的进行深入的财务或技术面分析,形成完整的决策链条。
3. 构建动态监控与日志
对于交易和策略类任务,AI 可以定期拉取数据并建立监控机制。
- * 示例策略:使用循环或定时任务检查特定标的的异动(如涨跌停、放量),并在发现满足条件的信号时输出结构化日志或触发预警。
社区与支持
由 大佬量化 维护 — 量化交易教学与策略研发团队。
微信客服: bossquant1 · Bilibili · 搜索 大佬量化 — 微信公众号 / Bilibili / 抖音
BaoStock(免费A股数据平台)
BaoStock 是一个免费的开源中国A股证券数据平台。无需注册或API Key,返回 pandas.DataFrame。
安装
bash
pip install baostock --upgrade
验证安装:
bash
python3 -c import baostock as bs; lg = bs.login(); print(lg.error_msg); bs.logout()
预期输出:login success!。
基本用法
每个会话必须以 bs.login() 开始,以 bs.logout() 结束:
python
import baostock as bs
import pandas as pd
登录系统
lg = bs.login()
... 在此执行数据查询 ...
登出系统
bs.logout()
使用 .get_data() 从查询结果中获取DataFrame:
python
rs = bs.queryallstock()
df = rs.get_data()
核心API
1. queryallstock — 获取全部证券列表
获取指定交易日的全部股票/指数代码。
python
获取指定日期所有证券代码
rs = bs.query
allstock(day=2024-01-02)
df = rs.get_data()
返回字段: code(证券代码), tradeStatus(交易状态), code_name(证券名称)
- - day — 日期字符串 YYYY-MM-DD(默认今天)。非交易日返回空DataFrame。
2. queryhistorykdataplus — K线数据
获取历史K线数据(开高低收量 + 指标)。
python
获取工商银行日K线数据
rs = bs.query
historyk
dataplus(
sh.601398,
date,code,open,high,low,close,volume,amount,pctChg,
start_date=2024-01-01,
end_date=2024-06-30,
frequency=d, # 频率: d(日线), w(周线), m(月线), 5/15/30/60(分钟线)
adjustflag=3 # 复权: 1(后复权), 2(前复权), 3(不复权,默认)
)
df = rs.get_data()
参数说明:
- - code — 股票代码,格式 sh.600000 或 sz.000001
- fields — 逗号分隔的字段名(见下方)
- startdate / enddate — YYYY-MM-DD 格式
- frequency — d(日线), w(周线), m(月线), 5/15/30/60(分钟线)。指数无分钟级数据。
- adjustflag — 1(后复权), 2(前复权), 3(不复权,默认)
日线可用字段:
date(日期), code(证券代码), open(开盘价), high(最高价), low(最低价), close(收盘价), preclose(昨收价), volume(成交量), amount(成交额), adjustflag(复权标志), turn(换手率), tradestatus(交易状态), pctChg(涨跌幅), peTTM(滚动市盈率), pbMRQ(市净率), psTTM(滚动市销率), pcfNcfTTM(滚动市现率), isST(是否ST)
分钟线可用字段:
date(日期), time(时间), code(证券代码), open(开盘价), high(最高价), low(最低价), close(收盘价), volume(成交量), amount(成交额), adjustflag(复权标志)
3. querytradedates — 交易日历
python
获取指定范围的交易日历
rs = bs.query
tradedates(start
date=2024-01-01, enddate=2024-12-31)
df = rs.get_data()
返回字段: calendardate(日历日期), istrading_day(是否交易日)
4. querystockindustry — 行业分类
python
获取全部股票行业分类
rs = bs.query
stockindustry()
df = rs.get_data()
返回字段: updateDate(更新日期), code(证券代码), code_name(证券名称), industry(行业), industryClassification(行业分类)
5. querystockbasic — 股票基本信息
python
获取指定股票基本信息
rs = bs.query
stockbasic(code=sh.601398)
df = rs.get_data()
返回字段: code(证券代码), code_name(证券名称), ipoDate(上市日期), outDate(退市日期), type(类型), status(状态)
- - type — 1 股票, 2 指数, 3 其他
- status — 1 上市, 0 退市
6. querydividenddata — 分红信息
python
获取指定股票分红数据
rs = bs.query
dividenddata(code=sh.601398, year=2023, yearType=report)
df = rs.get_data()
- - yearType — report(报告期) 或 operate(实施期)
7. 财务数据(季度)
盈利能力
python
获取盈利能力指标(ROE、净利润率、毛利率等)
rs = bs.query
profitdata(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
营运能力
python
获取营运能力指标(存货周转率、应收账款周转率等)
rs = bs.query
operationdata(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
成长能力
python
获取成长能力指标(营收同比增长、净利润同比增长等)
rs = bs.query
growthdata(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
偿债能力
python
获取偿债能力指标(流动比率、速动比率等)
rs = bs.query
balancedata(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
现金流
python
获取现金流数据
rs = bs.query
cashflow_data(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
杜邦分析
python
获取杜邦分析数据(ROE分解:利润率×资产周转率×权益乘数)
rs = bs.query
dupontdata(code=sh.601398, year=2023, quarter=4)
df = rs.get_data()
8. 指数数据
指数成分股
python
获取沪深300成分股
rs = bs.query
hs300stocks()
df = rs.get_data()
获取上证50成分股
rs = bs.query
sz50stocks()
df = rs.get_data()
获取中证500成分股
rs = bs.query
zz500stocks()
df = rs.get_data()
完整示例: 下载日K线数据并保存为CSV
python
import baostock as bs
import pandas as pd
登录系统
bs.login()
获取贵州茅台2024年日K线数据(后复权)
rs = bs.query
historyk
dataplus(
sh.600519,
date,code,open,high,low,close,volume,amount,pctChg,peTTM,
start_date=2024-01-01,
end_date=2024-12-31,
frequency=d,
adjustflag=2 # 后复权
)
df = rs.get_data()
保存到CSV文件
df.to
csv(kweichowmoutai_2024.csv, index=False)
print(df.head())
登出系统
bs.logout()
股票代码格式
- - 上海证券交易所: sh.600000, sh.601398
- 深圳证券交易所: sz.000001, sz.300750
- 北京证券交易所: bj.430047
- 指数: sh.000001(上证综指), sh.000300(沪深300)
使用技巧
- - 无需注册或API Key — 直接调用 bs.login() 即可开始。
- 长时间不活动会话可能超时 — 重新调用 bs.login() 即可。
- 非线程安全 — 并行下载请使用 multiprocessing(多进程),而非threading(多线程)。