单只股票 · 历史K线数据
简介 —— 这段 Python 脚本使用 baostock 接口,查询贵州茅台(sh.600519)在 2026-08-01 至 2026-09-01 期间的日线 K 线数据。代码涵盖了登录、查询历史行情、遍历结果集、构建 DataFrame、导出 CSV、登出等完整流程,是 A 股量化数据获取的典型示例。
1. 导入所需库
两个核心库:Baostock 数据接口与 Pandas 数据处理。
import baostock as bs
import pandas as pd
- baostock — 免费开源的证券数据平台,提供 A 股历史行情、财务数据等
- pandas — 将结果集转为 DataFrame 并导出 CSV
2. 登陆 Baostock 系统
说明 — 使用 Baostock 任何接口前必须先 login(),返回对象包含 error_code 与 error_msg。
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)
- error_code == '0' 表示登录成功
- 若失败,error_msg 会给出原因
3. 获取历史 K 线数据
指标参数说明 — “分钟线”与“日线”参数不同;“分钟线”不包含指数。
- 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
- 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus("sh.600519",
"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
start_date='2026-08-01', end_date='2026-09-01',
frequency="d", adjustflag="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)
- sh.600519 — 贵州茅台(上海交易所)
- 请求字段:日期、代码、开盘、最高、最低、收盘、前收、成交量、成交额、复权标志、换手率、交易状态、涨跌幅、是否ST
- start_date / end_date — 查询区间
- frequency="d" — 日线
- adjustflag="3" — 复权类型(3 表示不复权)
4. 遍历结果集并构建 DataFrame
使用 while 循环配合 rs.next() 逐行读取,rs.get_row_data() 获取当前行数据。
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
- rs.error_code == '0' 确保查询无错
- rs.next() 移动到下一行,返回 True/False
- rs.fields 提供列名
5. 保存 CSV & 打印结果
#### 结果集输出到csv文件 ####
result.to_csv("history_A_stock_k_data.csv", index=False)
print(result)
提示 — index=False 避免将 DataFrame 索引写入 CSV,保持文件整洁。
6. 登出系统
#### 登出系统 ####
bs.logout()
良好的编程习惯:使用完毕后主动登出,释放连接资源。
完整代码
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
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus("sh.600519",
"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
start_date='2026-08-01', end_date='2026-09-01',
frequency="d", adjustflag="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)
#### 登出系统 ####
bs.logout()
关键点总结
bs.login() 必须先登录
sh.600519 贵州茅台
query_history_k_data_plus() 查询K线
frequency="d" 日线
保存为 history_A_stock_k_data.csv
bs.logout() 释放资源