尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

七天量化回测入门(二)用 Baostock 拉取沪深300ETF 数据

七天量化回测入门(二)用 Baostock 拉取沪深300ETF 数据 1. 引言在量化投资与数据分析中获取准确的行情数据是第一步。Baostock 是一个免费、无需注册的 Python 证券数据接口库覆盖股票、指数、ETF 等历史数据非常适合个人投资者和研究者使用。本文将带你从零开始用 Baostock 拉取沪深300ETF 的日线数据并完成简单的可视化。2. 环境准备2.1 安装 Baostock在上一篇文章中有详细讲解。七天量化回测入门一Windows 64 位系统下安装 Conda 虚拟环境完整教程2.2 导入依赖进入虚拟环境quant_env。importbaostockasbsimportpandasaspdimportmatplotlib.pyplotasplt3. 登录与获取数据3.1 登录 Baostock# 登录 Baostocklgbs.login()print(login respond error_code:lg.error_code)print(login respond error_msg:lg.error_msg)3.2 拉取沪深300ETF 日线数据沪深300ETF 的证券代码为sh.510300。以下代码拉取 2026 年 1 月 1 日至 2026 年 9 月 30 日的日线数据# 获取沪深300ETF 日线数据rsbs.query_history_k_data_plus(sh.510300,date,code,open,high,low,close,volume,amount,start_date2026-01-01,end_date2026-09-30,frequencyd,adjustflag2# 前复权)print(query respond error_code:rs.error_code)print(query respond error_msg:rs.error_msg)# 将结果转为 DataFramedata_list[]while(rs.error_code0)rs.next():data_list.append(rs.get_row_data())dfpd.DataFrame(data_list,columnsrs.fields)print(df.head())3.3 数据清洗Baostock 返回的数据中缺失值以空字符串表示需要转换为 NaN 并处理# 将空字符串转为 NaN并转换数据类型dfdf.replace(,pd.NA)df[date]pd.to_datetime(df[date])df[close]pd.to_numeric(df[close])df[volume]pd.to_numeric(df[volume])# 按日期排序dfdf.sort_values(date).reset_index(dropTrue)print(df.tail())4. 数据可视化拉取数据后我们可以绘制收盘价走势图# 设置中文字体 (Windows常用SimHei黑体, macOS常用Arial Unicode MS或PingFang HK)plt.rcParams[font.sans-serif][SimHei]# 解决负号-显示为方块的问题plt.rcParams[axes.unicode_minus]Falseplt.figure(figsize(12,6))plt.plot(df[date],df[close],label沪深300ETF 收盘价,colorsteelblue)plt.title(沪深300ETF 日线收盘价2026年)plt.xlabel(日期)plt.ylabel(收盘价元)plt.legend()plt.grid(True)plt.show()5. 登出使用完毕后记得登出以释放连接bs.logout()6. 完整示例代码将以上步骤整合得到完整可运行的脚本importbaostockasbsimportpandasaspdimportmatplotlib.pyplotasplt# 登录print(1.准备登录,flushTrue)lgbs.login()print(f2.登录返回:{lg.error_code}{lg.error_msg},flushTrue)# 拉取数据print(3.开始查询,flushTrue)rsbs.query_history_k_data_plus(sz.002471,date,code,open,high,low,close,volume,amount,start_date2026-01-01,end_date2026-09-30,frequencyd,adjustflag2)print(4.查询返回,flushTrue)# 转 DataFramedata_list[]while(rs.error_code0)rs.next():data_list.append(rs.get_row_data())print(f5.拿到{len(data_list)},flushTrue)dfpd.DataFrame(data_list,columnsrs.fields)# 清洗# 将空字符串转为 NaN并转换数据类型dfdf.replace(,pd.NA)df[date]pd.to_datetime(df[date])df[close]pd.to_numeric(df[close])df[volume]pd.to_numeric(df[volume])# 按日期排序dfdf.sort_values(date).reset_index(dropTrue)print(df.tail())# 绘图# 设置中文字体 (Windows常用SimHei黑体, macOS常用Arial Unicode MS或PingFang HK)plt.rcParams[font.sans-serif][SimHei]# 解决负号-显示为方块的问题plt.rcParams[axes.unicode_minus]Falseplt.figure(figsize(12,6))plt.plot(df[date],df[close],label沪深300ETF 收盘价,colorsteelblue)plt.title(沪深300ETF 日线收盘价2026年)plt.xlabel(日期)plt.ylabel(收盘价元)plt.legend()plt.grid(True)plt.show()# 登出bs.logout()7. 输出结果8. 常见问题8.1 数据为空怎么办检查证券代码是否正确沪深300ETF 为sh.510300。确认起止日期是否在交易日范围内。检查adjustflag参数1后复权、2前复权、3不复权。8.2 如何获取实时行情Baostock 主要提供历史数据实时行情建议使用其他接口如 Tushare Pro 或券商 API。9. 总结本文演示了使用 Baostock 拉取沪深300ETF 日线数据的完整流程包括登录、查询、清洗和可视化。Baostock 免费且无需注册是入门量化分析的理想选择。你可以在此基础上扩展均线计算、收益率分析等更多功能。
返回列表