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 免费且无需注册是入门量化分析的理想选择。你可以在此基础上扩展均线计算、收益率分析等更多功能。
返回列表