miniQMT+Qlib才是AI量化的正确打开方式

做股票量化建模的朋友对 Qlib 应该都不陌生。作为微软开源的一款量化研究框架,Qlib 可以说是把"数据驱动建模"这件事做到极致了,尤其在以下几个方面非常出色:

  • 提供了一整套 Alpha、模型、回测、评估流水线
  • 原生支持机器学习模型(LightGBM、XGBoost、RNN、Transformer)
  • 可与自定义数据源对接,构建灵活的预测平台
  • 数据、特征、训练、预测、回测一站式搞定

但是,Qlib 自带的数据并不适合实盘研究

Qlib 虽然开箱即用,但它自带的数据是"为了教学、方便演示"准备的,主要问题有以下几点:

  • 滞后严重:官方数据只更新到几年前,适合教学,但不适合做近期实盘策略研究
  • 字段有限:只有基础的 OHLCV 数据,连 amount、换手率都没有
  • 非主流行情源:不是直接来自交易所或主流券商,可能存在偏差

如果你真的想基于 A 股市场做实盘预测或策略训练,肯定得换自己的数据源。


替代方案:用 MiniQMT 下载行情数据,再导入 Qlib!

很多做量化的朋友已经用上了 MiniQMT ------ 它是一个轻量、高性能、接口友好的行情采集工具,可以从 QMT 接口抓取真实市场的 行情数据,并支持导出为 CSV 文件,非常适合我们拿来喂给 Qlib!

那么问题来了:

MiniQMT 拉下来的 CSV,怎么导入 Qlib 呢?

别急,我下面手把手教你做一遍,并附上完整示例代码


整体思路

把 MiniQMT 导出的行情数据(CSV),标准化格式 → 转换为 Qlib 的内部格式(bin) → 加载进 Qlib,就可以直接用来训练模型、跑回测啦!


Step 1:数据下载

要通过miniQMT获取行情数据首先需要下载,这里我直接写成了一个方法,传入股票列表,开始时间、结束时间和周期即可,如果要下载全部周期的分钟和日线行情,只需要下载1d、1m、5m周期的行情以后,就可以在后面获取1m、5m、15m、30m、60m、1d、1w、1mon、1q、1y的行情了


Step 2:行情获取

数据下载以后,我们就可以把行情导出csv文件了,这里同样我写了对应的方法 get_kline 用于获取股票的行情 down_all_kline_to_csv用于把行情转换成csv格式 最后直接调用

python 复制代码
down_all_kline_to_csv(sector='沪深300', 
                    start_date="20190101", 
                    end_time="", 
                    period="1d", 
                    data_dir="csv_kline")

就可以把行情下载到项目根目录下的csv_kline文件夹里了

在存储csv文件的时候需要注意下,文件名一定要改成股票代码 ,同时csv里面也要有一列用来存股票代码,我这里用的是symbol 列,同时也需要有一列来记录行情对应的日期,我这里是date

这是对应的方法源码:


Step 3:编写转换脚本,导入 Qlib 数据目录

这是官方给出的教程:

https://qlib.readthedocs.io/en/latest/component/data.html#converting-csv-format-into-qlib-format

里面提出可以使用以下脚本来实现csv数据导入Qlib

python 复制代码
python scripts/dump_bin.py dump_all --csv_path  ~/.qlib/csv_data/my_data --qlib_dir ~/.qlib/qlib_data/my_data --include_fields open,close,high,low,volume,factor

按照官方的Qlib安装教程,大家估计用的都是

复制代码
pip install pyqlib

在执行python scripts/dump_bin.py dump_all......就会比较懵,这dump_bin.py哪来的呀!

我们打开Qlib的git地址,就会发现原理他在这里

然后我把dump_bin,py复制到了我的项目根目录

然后写下如下代码就可以轻松把数据导入到Qlib了

这里的csv_path就是csv行情文件的存放目录

  • qlib_dir是qlib数据保存的目录
  • symbol_field_name表示你股票代码存放的列名
  • date_field_name表示日期列对应的列名
  • freq是行情周期
  • include_fields表示你的数据要包括哪些列
  • max_workers表示要用几个线程来执行

到此数据就从csv格式转换成Qlib需要的格式了

最后分享一个简单的demo

模型训练好以后,就会在根目录生成一个mlruns的目录,里面有对应的模型可以使用。

相关推荐
刘一说41 分钟前
深入理解 Spring Boot Actuator:构建可观测性与运维友好的应用
运维·spring boot·后端
oak隔壁找我1 小时前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
郝开1 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
南囝coding1 小时前
100% 用 AI 做完一个新项目,从 Plan 到 Finished 我学到了这些
前端·后端
Homeey1 小时前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
shykevin1 小时前
Rust入门
开发语言·后端·rust
Lisonseekpan1 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
学历真的很重要2 小时前
LangChain V1.0 Messages 详细指南
开发语言·后端·语言模型·面试·langchain·职场发展·langgraph
申阳2 小时前
Day 7:05. 基于Nuxt开发博客项目-首页开发
前端·后端·程序员
bcbnb3 小时前
HTTP抓包分析神器,Fiddler使用教程、代理设置与HTTPS调试全指南(开发者实战分享)
后端