金融数据库--3Baostock

一、 Baostock 是什么?

Baostock (宝硕股票)是一个免费、开源的证券数据平台(SDK),旨在为金融量化投资者、研究人员和学生提供稳定、准确、易用的A股历史数据和相关金融数据。

其核心是一个 Python 库,用户通过调用其提供的API函数,即可便捷地获取数据到本地进行分析和回测,无需复杂的爬虫技术。

官方定位: "无需注册,即可获取大量准确、完整的证券历史行情数据、上市公司财务数据等。"

二、 核心功能与数据范围

Baostock 的数据覆盖范围是其最大的竞争力之一。

1. 行情数据 (核心)

  • K线数据 : 提供日、周、月级别的K线数据。

    • 包含:日期、开盘价、最高价、最低价、收盘价、成交量、成交额、换手率、复权因子等。
  • 复权处理 : 支持前复权后复权不复权三种价格,极大地方便了量化回测。

  • 时间范围 : 数据可追溯至1990-12-19(上证交易所开业初期),覆盖了A股几乎全部历史。

2. 基本面数据 (价值)

  • 公司资料: 上市公司基本信息、所属行业、地域等。
  • 财务数据 : 按季度、年度提供资产负债表、利润表、现金流量表的核心指标。
    • 例如:每股收益、净利润、营业收入、资产负债率等
  • 估值数据 : 市盈率(PE)、市净率(PB)、市销率(PS)等,且提供动/静态、滚动的计算方式

3. 宏观数据 & 行业数据

  • 宏观经济指标: 如GDP、CPI、PPI、PMI、货币供应量(M0, M1, M2)等。
  • 行业分类数据: 提供股票所属的证监会、申万等行业分类信息。
  • 利率数据: 存贷款利率、国债收益率等。

4. 其他数据

  • 融资融券数据
  • 指数成分股数据
  • 除除息信息、送股信息

三、 优势 (Pros)

  1. 完全免费与开源: 这是其最吸引人的特点。相比于Wind、Choice等动辄数万元的终端,Baostock 对个人投资者和研究者极其友好。代码开源也意味着透明和安全。
  2. 数据质量高且准确: 数据经过清洗和整理,准确度较高,尤其是复权处理做得很好,避免了回测中的"坑"。
  3. 接口简单易用: 纯Python接口,API设计清晰,只需几行代码就能获取数据,学习成本极低。对Python数据分析生态(Pandas, NumPy, Matplotlib)兼容性极佳,返回的数据通常是Pandas DataFrame格式,可直接进行分析和可视化。
  4. 数据历史长度足够: 长达30多年的历史数据,足以满足绝大多数长期策略回测的需求。
  5. 无需注册和认证: 下载即用,没有复杂的申请流程和API Key限制,降低了使用门槛。
  6. 稳定性与维护: 项目持续维护更新,社区有一定活跃度,遇到问题可以通过官方文档或社区寻求帮助。

四、 劣势与局限性 (Cons)

  1. 数据频率限制 : 最大的局限性在于不支持日内高频数据(如1分钟、5分钟、Tick数据)。主要专注于日、周、月线级别的低频数据。这对于需要高频交易策略的研究者来说是不可用的。
  2. 实时性限制 : 数据并非实时更新,通常有15分钟左右的延迟 。不适合用于实盘交易决策,更侧重于历史回测和研究
  3. 数据广度与深度: 虽然覆盖了核心数据,但与付费的顶级终端(如Wind)相比,在数据的广度和深度上仍有差距。例如,更细分的财务指标、详细的研报数据、新闻舆情、大宗交易、龙虎榜等数据可能缺失或不如专业终端全面。
  4. API调用限制 : 虽然没有明确的文档说明,但可能存在未公开的请求频率限制。如果短时间内发出海量请求,IP可能会被暂时限制访问。通常需要在自己的代码中添加time.sleep()来规避。
  5. 依赖网络与服务器: 数据获取依赖于Baostock的服务器,如果服务器出现故障或维护,服务会中

五、 适用场景

  • 个人量化爱好者/学习者: 学习和实践量化交易的绝佳工具,零成本入门。
  • 学术研究: 撰写论文、进行金融市场相关实证研究的可靠数据来源。
  • 中长期策略回测: 基于日线或周线数据的价值投资、趋势跟踪、因子投资等策略的回测。
  • 基本面分析: 获取和分析上市公司财务报表数据。
  • 金融数据分析教学: 在高校课程中,作为学生练习数据获取、清洗、分析和可视化的完美案例。

不适用场景

  • 高频交易策略开发
  • 实盘交易信号生成(因数据延迟)
  • 需要极度深度和前沿数据的专业机构投资经理

六、 与替代品的对比

特性 Baostock Tushare AkShare Wind(万得) / Choice(东方财富)
成本 完全免费 免费+积分(Pro版收费) 完全免费 非常昂贵
数据频率 日、周、月 日、周、月、分钟、Tick(积分) 日、周、月、分钟、Tick 全频率,包括实时
数据范围 A股、宏观、指数 非常广泛(A股、港股、美股、期货、期权等) 极其广泛(全球市场、宏观、商品、新闻等) 最全面、最权威
易用性 非常简单 简单(但接口版本多) 接口较多,需查找 图形界面+API,功能强大
实时性 延迟15分钟 实时数据需积分/付费 实时/略有延迟 实时
核心用户 初学者、研究者、个人 个人、专业开发者 专业开发者、研究者 专业机构、基金经理

简单总结

  • Baostock"专注、简单、免费的A股历史数据专家"
  • Tushare/AkShare"免费且数据广泛的爬虫聚合库",功能更强大但接口可能更复杂。
  • Wind/Choice"专业机构的全能武器",无所不包但价格高昂。

七、 快速入门指南

复制代码
安装:

pip install baostock
  1. 基本使用流程(四步曲)
    python

    import baostock as bs
    import pandas as pd

    1. 登录系统

    lg = bs.login()

    显示登录返回信息

    print('login respond error_code:'+lg.error_code)
    print('login respond error_msg:'+lg.error_msg)

    2. 获取数据

    查询复权后(前复权)的日K线数据

    rs = bs.query_history_k_data_plus("sh.600000",
    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
    start_date='2023-01-01', end_date='2024-01-01',
    frequency="d", adjustflag="2") # adjustflag: 2-前复权, 3-后复权

    3. 将数据转换为pandas DataFrame

    data_list = []
    while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
    df = pd.DataFrame(data_list, columns=rs.fields)

    4. 登出系统

    bs.logout()

    处理数据:转换数据类型

    df['close'] = df['close'].astype('float')
    df['volume'] = df['volume'].astype('float')
    print(df.head())

  2. 重要提示

  • 务必在程序结束前调用 bs.logout()
  • 获取大量数据时,请在循环请求中添加 time.sleep(0.5) 以避免被限流。

总结

Baostock 是一个极其优秀、专注于A股历史低频数据的免费解决方案。 它以其简单、可靠、免费的特性,成为了无数个人量化交易者和研究人员入门和研究的"第一块基石"。

如果你的需求是:

  • 免费
  • 获取A股漫长的历史日线数据
  • 进行中长期策略回测
  • 学习Python量化分析

那么,Baostock 几乎是你的不二之选。但如果你的需求扩展到高频、实时或全球市场,则需要考虑 Tushare、AkShare 或付费的专业数据终端。

相关推荐
爱可生开源社区1 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
加号32 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐2 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再2 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest2 天前
数据库SQL学习
数据库·sql
jnrjian2 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Henry Zhu1232 天前
数据库:并发控制基本概念
服务器·数据库