跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 量化实战:使用 baostock 免费获取分钟级 K 线数据

baostock 是一款面向 Python 量化爱好者的免费开源证券数据平台,提供 A 股历史行情及财务数据。本文介绍如何通过 baostock 接口获取分钟级 K 线数据,涵盖环境安装、登录认证、核心 API 参数解析及异常处理。重点演示了查询浦发银行 5 分钟 K 线的完整流程,包括复权类型选择、停牌数据过滤及结果集转换技巧。该平台适合个人投资者进行中低频策略研究,但需注意数据更新时效及复权算法差异,关键决策建议交叉验证其他数据源。

霸天发布于 2026/3/30更新于 2026/9/861 浏览

认识 baostock

Baostock(证券宝)是一个免费、开源的证券数据平台,通过 Python API 提供大量准确、完整的证券历史行情数据和上市公司财务数据。它返回的数据格式为 pandas DataFrame,这对于使用 pandas/NumPy/Matplotlib 进行数据分析和可视化非常友好。

数据范围与时间

baostock 的数据覆盖范围主要包括:

数据类型包含内容时间范围备注
股票数据日、周、月 K 线数据1990-12-19 至今-
分钟 K 线数据5、15、30、60 分钟 K 线数据1999-07-26 至今-
指数数据综合指数、规模指数、行业指数等2006-01-01 至今指数没有分钟线数据
财务数据资产负债、现金流量、利润信息、杜邦指标2007 年至今季频
公司报告业绩预告信息2003 年至今季频
业绩快报上市公司业绩快报信息2006 年至今季频

注意数据更新时效:

  1. 日 K 线数据:当前交易日 17:30 完成入库。
  2. 分钟 K 线数据:当前交易日 20:30 完成入库。
  3. 其它财务报告数据:第二自然日 1:30 完成前交易日数据入库。

安装与环境配置

安装 baostock 非常简单,只需在命令行中执行:

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

注意:程序运行时,文件名、文件夹名不能是 baostock,否则会导致导入冲突。

核心 API 使用详解

登录与登出

在开始任何数据查询前,都需要先登录系统。建立与服务器的连接无需注册即可登录。需要注意的是,登录后超过一段时间没有操作再调用 API 请求时会超时,需要重新登录才能继续下载数据。

import baostock as bs

# 登录系统
lg = bs.login()

# 显示登录返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)

# 你的数据查询代码将在这里

# 登出系统
bs.logout()

获取历史 A 股 K 线数据

query_history_k_data_plus() 是获取历史 A 股 K 线数据的重要接口。该方法支持获取日 k 线、周 k 线、月 k 线,以及 5 分钟、15 分钟、30 分钟和 60 分钟 k 线数据,适合搭配均线数据进行选股和分析。

返回类型为 pandas 的 DataFrame 类型,能获取 1990-12-19 至当前时间的数据;可查询不复权、前复权、后复权数据。

主要参数说明:

参数名描述是否必须默认值
code股票代码,sh 或 sz.+6 位数字代码,或者指数代码,如:sh.601398是无
fields指示简称,支持多指标输入,以半角逗号分隔是无
start_date开始日期(包含),格式'YYYY-MM-DD'否2015-01-01
end_date结束日期(包含),格式'YYYY-MM-DD'否最近一个交易日
frequency数据类型,d=日 k 线、w=周、m=月、5=5 分钟等否d
adjustflag复权类型,3=不复权;1=后复权;2=前复权否3

获取指定日期所有股票列表

query_all_stock() 函数可以获取指定交易日期所有股票列表。可以通过参数 day 获取某一天的数据,参数为空表示默认获取当天的数据。返回类型为 baostock 自定义的数据类型,通过 get_data() 函数可以获取 Pandas DataFrame 类型的数据。

date = "2025-08-01"  # 请替换为实际日期
stock_df = bs.query_all_stock(date).get_data()

实战示例:获取分钟级 K 线数据

以下是一个获取股票分钟级 K 线数据的完整示例。

获取 5 分钟 K 线数据

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)

# 获取沪深 A 股历史 K 线数据
# 详细指标参数,参见'历史行情指标参数'章节;'分钟线'参数与'日线'参数不同。'分钟线'不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
rs = bs.query_history_k_data_plus(
    "sh.600000",  # 股票代码,例如:浦发银行
    "date,time,code,open,high,low,close,volume,amount,adjustflag",  # 指定需要的字段
    start_date='2025-07-01',  # 开始日期
    end_date='2025-07-31',    # 结束日期
    frequency="5",            # 频率:5 表示 5 分钟线
    adjustflag="3"            # 复权类型:3 不复权
)

print('query_history_k_data_plus respond error_code:' + rs.error_code)
print('query_history_k_data_plus 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("history_A_stock_k_data.csv", index=False)
print(result.head(10))  # 打印前 10 行数据查看

# 登出系统
bs.logout()

重要提示:指数没有分钟线数据。尝试获取指数的分钟线数据可能会出错或返回空结果。

复权类型的区别与选择

adjustflag 参数决定了数据的复权方式,这对分析至关重要:

  • 后复权:复权后价格反映的是真实收益率,便于计算历史收益。
  • 前复权:复权后价格贴近当前价格,便于技术分析。
  • 不复权:原始价格数据,包含跳空缺口。

BaoStock 使用'涨跌幅复权法'进行复权。这种方法可以计算出资金收益率,确保初始投入的资金运用率为 100%,既不会因为分红而导致投资减少,也不会因为配股导致投资增加。需要注意的是,不同系统(如同花顺、通达信等)采用的复权方式可能不一致,会导致数据差异。

停牌数据处理

股票停牌时,对于日线,开、高、低、收价都相同,且都为前一交易日的收盘价,成交量、成交额为 0,换手率为空。

在回测过程中,通常不希望停盘数据对回测造成干扰,可以将停盘数据删除:

if result.shape[0]:
    result = result[(result['volume'] != '0') & (result['volume'] != '')]

常见问题与技巧

  1. 返回数据格式转换:从 BaoStock 下载的数据元素类型可能均为 object(字符串)。在进行数值计算前,可能需要转换类型,例如换手率:

    result["turn"] = [0 if x == "" else float(x) for x in result["turn"]]
    
  2. 查询所有股票代码:可以使用 query_all_stock() 函数获取指定日期的所有股票列表,并转换为 List:

    stock_list = stock_df['code'].tolist()
    
  3. 数据准确性交叉验证:对于关键决策,建议使用其他数据源(如券商 API、Wind 等)进行交叉验证,特别是在复权数据方面,因为不同平台的复权算法可能有差异。

  4. 超时与重新登录:登录后如果长时间没有操作,连接可能会超时。如果后续请求失败,可以尝试重新调用 bs.login()。

baostock 作为一个免费且数据源稳定的平台,是个人量化爱好者入门和进行中低频策略研究的绝佳工具。目前的数据主要集中在 A 股,缺少港股、期货、外汇和基金等金融数据。对于更高频率(Tick 级)的交易或更广泛的品种,你可能需要考虑其他数据源。

目录

  1. 认识 baostock
  2. 数据范围与时间
  3. 安装与环境配置
  4. 核心 API 使用详解
  5. 登录与登出
  6. 登录系统
  7. 显示登录返回信息
  8. 你的数据查询代码将在这里
  9. 登出系统
  10. 获取历史 A 股 K 线数据
  11. 获取指定日期所有股票列表
  12. 实战示例:获取分钟级 K 线数据
  13. 获取 5 分钟 K 线数据
  14. 登陆系统
  15. 获取沪深 A 股历史 K 线数据
  16. 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
  17. 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
  18. 打印结果集
  19. 结果集输出到 csv 文件
  20. 登出系统
  21. 复权类型的区别与选择
  22. 停牌数据处理
  23. 常见问题与技巧

更多推荐文章

查看全部
  • C++ 类与对象:面向对象编程入门基础
  • Java 环境配置与首个 Hello World 程序实战
  • VS Code 安装 GitHub Copilot 及 AI 编程使用指南
  • 使用 Python 和 ChromaDB 构建简易 RAG 应用
  • GitHub 教育认证通过后如何领取 Copilot Pro
  • 昇腾 NPU 部署 Llama 2 模型:性能测试与实战优化
  • LLaMA Factory 大模型训练与微调指南
  • RAG 的基石:大语言模型文本向量化能力对比
  • 2026 年中国 200 多家机器人及具身智能公司名单
  • AI 原生重构低代码开发:从工具到智能体的范式变革
  • HTML5 结合 AI 的安全防护与应用实践
  • AR 健身教练实践:基于 Rokid CXR-M SDK 的落地实现
  • SkyWalking Python 应用追踪:基于 skywalking-python 的埋点实践
  • Go 语言 Map 取值详解:单值与双值返回的源码剖析
  • Vue3 + Python 校园排球俱乐部信息管理系统
  • 一网统飞无人机巡检系统落地方案
  • 二分查找:山峰数组的峰顶索引与寻找峰值
  • 基于 Q-Learning 的无人机三维动态环境自主避障路径规划
  • Java AI 辅助开发实战:从代码生成到架构优化指南
  • 自然语言处理在金融领域的应用与实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online