Post

Quant Open Source Package001: Qlib - Microsoft AI Quant Research Platform 深度学习

Quant Open Source Package001: Qlib - Microsoft AI Quant Research Platform 深度学习

这篇是新的 Quant Open Source Package 系列第一篇。

我把 Qlib 放在 001,不是因为它最容易,而是因为它最像一个完整的 AI quant research infrastructure:

1
data -> feature -> dataset -> model -> signal -> strategy -> backtest -> recorder -> analysis

如果我们要把 WorldQuant-style factor research、LLMQuant、HKUDS Vibe-Trading、AI-Trader 和自己的 Quant Research OS 融会贯通,Qlib 是必须看懂的一个基础设施项目。

0. 一句话定位

Qlib 是 Microsoft 开源的 AI-oriented quantitative investment platform。

它不是单纯的 backtesting package,也不是单纯的机器学习模型库。 它更像一个面向量化研究的工程底座:

1
2
用统一的数据格式、workflow 配置、模型接口、组合策略、回测评估和实验记录,
把 AI / ML 驱动的量化研究流程工程化。

对我来说,Qlib 的核心启发是:

1
2
Quant research 不应该只停留在 notebook、单次 backtest、单个 alpha idea。
真正有复利的是可重复、可记录、可比较、可扩展的 research workflow。

1. 项目档案

截至 2026-07-06,我通过 GitHub API 看到的项目状态:

ItemValue
Repomicrosoft/qlib
GitHubhttps://github.com/microsoft/qlib
LicenseMIT
Default branchmain
Stars45.7k+
Forks7.2k+
Open issues450+
Official docshttps://qlib.readthedocs.io/en/latest/
PaperQlib: An AI-oriented Quantitative Investment Platform

它的 repo description 里有几个关键词非常重要:

  • AI-oriented Quant investment platform
  • from exploring ideas to implementing productions
  • supervised learning
  • market dynamics modeling
  • reinforcement learning
  • RD-Agent

这说明 Qlib 的目标不是只做一个研究 demo,而是试图覆盖 AI quant 从想法探索到生产实现之间的完整链路。

2. 代码结构地图

Qlib 顶层目录大概可以这样理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
qlib/
  data/        数据访问、表达式、dataset、cache、storage
  model/       模型基类、训练/预测接口
  contrib/     官方贡献模型、策略、report、online、rolling 等
  strategy/    策略抽象
  backtest/    回测执行与交易模拟
  workflow/    qrun workflow、experiment、recorder
  rl/          reinforcement learning / order execution
  cli/         命令行入口

examples/
  benchmarks/              模型 benchmark 配置
  workflow_by_code.py      代码式 workflow
  workflow_by_code.ipynb   notebook demo
  run_all_model.py         批量跑模型
  rl/                      RL 示例
  rl_order_execution/      订单执行 RL
  nested_decision_execution/
  online_srv/
  highfreq/

从工程视角看,它把量化研究拆成了若干可组合模块。

这点很关键:

1
Qlib 的核心不是某一个模型,而是模型、数据、策略、回测、记录之间的接口约定。

3. 核心 workflow

Qlib 官方文档对 qrun 的定位很清楚:用一个配置文件跑完整的量化研究流程。

典型链路是:

1
2
3
4
5
6
7
8
9
10
11
qlib_init
  -> data handler
  -> dataset segments
  -> model config
  -> model.fit()
  -> model.predict()
  -> SignalRecord
  -> Portfolio Analysis Record
  -> strategy
  -> backtest
  -> metrics / plots / artifacts

用更直观的方式说:

1
2
3
4
5
6
7
8
9
10
11
raw data
  -> qlib format data
  -> expression engine feature
  -> DataHandlerLP processors
  -> DatasetH train/valid/test split
  -> forecast model
  -> prediction score
  -> portfolio strategy
  -> simulated trading
  -> recorder
  -> report

这个 workflow 对我们非常重要。

WorldQuant 的因子研究也有类似结构:

1
2
3
4
5
6
7
8
idea
  -> expression
  -> universe
  -> delay / decay / neutralization / truncation
  -> simulation
  -> IC / Sharpe / turnover / drawdown
  -> diagnosis
  -> next idea

Qlib 做的事情,是把这个流程从一个平台里的操作,抽象成 Python package + config + workflow + recorder。

4. Data Layer: Qlib 的地基

Qlib 的 data layer 是它最值得学的一层。

它解决的核心问题不是“怎么读取 CSV”,而是:

1
如何把金融时间序列数据变成高性能、可复用、可表达、可分段、可缓存的研究数据层。

官方文档里,Data Layer 包括:

  • Data Preparation
  • Data API
  • Data Loader
  • Data Handler
  • Dataset
  • Cache
  • Data and Cache File Structure

我把它拆成四个层次:

Layer作用对应研究问题
Qlib format data把基础行情数据转成 .bin 格式数据怎么高效存储和读取
Expression Engine用表达式构造 feature / alpha因子怎么工程化表达
DataHandlerLP数据清洗、标准化、处理器学习train / infer 如何避免混乱
DatasetHtrain / valid / test 切分模型训练和回测区间如何管理

其中 DataHandlerLP 很值得注意。

它区分了:

1
2
3
raw data
infer processed data
learn processed data

这对金融机器学习非常重要。 因为很多数据处理逻辑不能随便混在一起。

例如:

  • 训练阶段可以用 label 过滤某些样本;
  • 推理阶段不能使用未来 label;
  • universe 在训练和推理阶段可能不同;
  • z-score normalization 这种 processor 需要在训练区间学习参数,再用于后续数据;
  • train/test segment 是时间切分,和 processed data 的 learn/infer 概念不是一回事。

这个设计给我的启发是:

1
我们的 Quant Research OS 必须把 data transform、fit-time processor、inference-time processor、time segment 分开记录。

否则很容易发生隐性 look-ahead bias。

5. Feature / Alpha 表达式

Qlib 支持用 expression engine 做 formulaic alpha。

官方例子里类似:

1
2
3
Ref($close, 60) / $close
Mean($close, 3)
$high - $low

这对 WorldQuant-style research 很有共鸣。

WorldQuant 里很多因子本质上也是 expression:

1
operator(raw field, window, cross-sectional transform, time-series transform)

Qlib 的启发是:

1
2
alpha expression 不应该只是一串字符串,
它应该有 data dependency、time window、operator graph、segment、processor、evaluation result。

这可以变成我们的 Factor Card

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
factor_id: public_demo_alpha_001
data_dependency:
  - close
  - volume
expression:
  - Ref($close, 5) / $close - 1
universe: demo_universe
train_period: ...
test_period: ...
processor:
  - dropna
  - zscore_by_date
evaluation:
  - ic
  - rank_ic
  - turnover
  - drawdown
diagnosis:
  - regime sensitivity
  - cost sensitivity
  - universe sensitivity

这就是 Qlib 和我们自己的 Research OS 能接起来的地方。

6. Model Layer: 预测分数而不是直接交易

Qlib 的 Forecast Model 目标是生成股票预测分数。

官方 model 接口的核心是:

1
2
fit(dataset)
predict(dataset, segment="test")

这非常清晰:

1
2
model 不直接做组合,不直接下单。
model 先输出 signal / prediction score。

然后 strategy layer 再根据 score 生成 portfolio / order。

这是一条很重要的工程边界:

1
2
3
4
5
6
7
8
forecast model
  -> predicts score

portfolio strategy
  -> converts score into positions / orders

backtest engine
  -> simulates execution and cost

如果这三层混在一起,研究会很难 debug。

Qlib 的 examples/benchmarks 里有很多模型目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LightGBM
XGBoost
CatBoost
MLP
LSTM
GRU
ALSTM
GATs
SFM
TFT
TabNet
DoubleEnsemble
TCTS
Transformer
Localformer
TRA
TCN
ADARNN
ADD
IGMTF
HIST
KRNN
Sandwich

对我们来说,这个 model zoo 的价值不是“盲目追模型”,而是:

1
在同一套 data / feature / segment / backtest protocol 下比较不同模型。

这才是 benchmark。

7. Strategy / Backtest Layer

Qlib 的 Portfolio Strategy 负责把预测分数变成投资组合。

官方文档里的关键思路是:

1
2
3
Forecast Model gives prediction scores.
Portfolio Strategy converts prediction scores into portfolios.
Backtest checks model / signal / strategy performance.

典型策略包括 TopkDropoutStrategy

它的思想可以粗略理解为:

1
2
3
选择预测分数最高的 top-k 股票,
每期 drop 掉一部分旧持仓,
再补入新的高分资产。

这和很多 cross-sectional alpha research 的逻辑类似:

1
2
3
4
5
score ranking
  -> top bucket / bottom bucket
  -> long-only / long-short / benchmark-relative
  -> turnover control
  -> cost-aware evaluation

这里有一个关键点:

1
signal 好不等于 portfolio 好。

一个 signal 可能 IC 不错,但:

  • turnover 太高;
  • capacity 太小;
  • cost 后收益消失;
  • drawdown 过深;
  • 行业/风格暴露太重;
  • regime 切换后失效。

所以 Qlib 的 strategy / backtest 层,给我们提供的是从 signal 到 portfolio 的验证框架。

8. Recorder / Experiment Management

Qlib 的 Recorder 是我觉得最应该吸收到我们 Research OS 里的部分。

它把实验管理拆成:

1
2
3
4
ExperimentManager
  -> Experiment
      -> Recorder
      -> Recorder

一个 Experiment 可以有多个 Recorder。 每个 Recorder 对应一次 run。

Recorder 负责记录:

  • parameters
  • metrics
  • artifacts
  • prediction files
  • model checkpoints
  • backtest results

这和我们的需求完全一致:

1
2
3
idea 不是成果。
run 不是成果。
可复现、可比较、有 artifact、有 diagnosis 的 run 才是成果。

我们做 Quant Research OS 时,需要把每次研究输出变成:

1
2
3
4
5
6
7
8
9
research hypothesis
config
data version
model version
strategy version
backtest result
diagnosis
human review
next action

Qlib Recorder 给了一个成熟范式。

9. Analysis Layer: 不只是收益曲线

Qlib 的 analysis/report 层支持:

  • portfolio report
  • score IC
  • cumulative return
  • risk analysis
  • rank label
  • model performance

这里最重要的不是图,而是 evaluation contract。

对量化研究来说,最低限度应该看:

DimensionMeaning
IC / Rank ICsignal 与未来收益的相关性
cumulative return策略收益曲线
excess return相对 benchmark 的超额收益
max drawdown最大回撤
turnover换手率和交易成本压力
cost-aware return成本后是否仍有效
segment stabilitytrain/valid/test、不同市场阶段是否稳定

Qlib 的 report 层提醒我们:

1
2
一个 research artifact 不能只给 final PnL。
必须给 signal quality、portfolio quality、risk quality、cost quality、stability quality。

10. RL / Nested Decision Execution

Qlib 不只支持 supervised learning,也支持 RL。

它的 RL 主要用于连续决策问题,例如:

  • order execution
  • portfolio construction
  • trading agent

这里和普通 alpha research 的差异很大。

Supervised learning 的模式是:

1
historical feature -> future return label -> prediction score

RL 的模式是:

1
state -> action -> reward -> next state

在交易里,RL 更适合研究:

  • 如何拆单;
  • 如何减少冲击成本;
  • 如何在执行过程中动态调整;
  • 如何让高层 portfolio decision 和低层 execution decision 联动。

Qlib 的 nested decision execution 对我们也有启发:

1
2
3
4
5
high-level strategy
  -> portfolio rebalance / target position

low-level executor
  -> order slicing / intraday execution

这说明未来我们的系统可以分层:

1
2
3
4
5
6
7
8
Research Agent
  -> signal / hypothesis

Portfolio Agent
  -> position / risk budget

Execution Agent
  -> order / cost / microstructure

不过对我们当前阶段,优先级应该是 supervised factor workflow 和 backtest protocol,RL 先作为后续主线。

11. Qlib 适合做什么

Qlib 最适合:

  1. 做 AI / ML quant research 的工程底座。
  2. 做 cross-sectional stock prediction benchmark。
  3. 做统一数据、统一模型、统一策略、统一 backtest 的实验平台。
  4. 做模型 zoo 对比:LightGBM、Transformer、TRA、HIST 等。
  5. 做 research workflow 的 reproducibility。
  6. 学习量化平台的工程分层。
  7. 作为我们 Research OS 的参考实现。

它不应该被误解为:

1
装上就能赚钱的策略库。

更准确的定位是:

1
Qlib gives research infrastructure, not alpha guarantee.

12. Qlib 的限制和注意点

我们学习 Qlib 也要清醒。

第一,数据是核心瓶颈。

Qlib 提供数据格式、示例数据、下载脚本和数据层设计,但真实生产级 quant research 仍然需要:

  • 高质量行情数据;
  • point-in-time fundamentals;
  • corporate action 处理;
  • survivorship-bias-free universe;
  • transaction cost model;
  • execution data;
  • data vendor contract。

第二,backtest 不等于 production。

Qlib 有 online serving 相关模块,但它主要还是研究平台。 如果要真正实盘,还需要:

  • broker/exchange adapter;
  • order management system;
  • risk control;
  • monitoring;
  • reconciliation;
  • compliance;
  • kill switch;
  • disaster recovery。

第三,模型越复杂,越容易过拟合。

Qlib model zoo 很丰富,但金融数据低信噪比、非平稳、样本外衰减严重。 所以对我们来说,正确姿势不是“模型越新越好”,而是:

1
2
同一 protocol 下比较模型,
然后用 stability、cost、turnover、regime、drawdown 去拷打。

第四,公开学习不能泄露真实 alpha。

我们可以公开:

  • workflow; -工程设计;
  • synthetic demo;
  • public dataset demo;
  • generic factor card;
  • evaluation checklist。

不能公开:

  • 未脱敏真实 alpha;
  • 私有数据源;
  • 真实生产参数;
  • 可直接复现交易信号的完整策略。

13. 和 WorldQuant 投研流程的共鸣

Qlib 和 WorldQuant-style factor research 的共鸣非常强。

WorldQuant-styleQlib 对应层我们的 Research OS 对应层
因子字段Data LayerData Contract
因子表达式Expression EngineFactor Expression
universeinstruments / marketUniverse Spec
回测区间Dataset segmentsTrain / Valid / Test Protocol
alpha simulationqrun + backtestExperiment Run
IC / Sharpe / turnoveranalysis / reportEvaluation Card
因子诊断recorder + reportBias Diagnosis
下一轮改进manual research loopR&D Agent Next Plan

所以我们可以把 Qlib 当成一个公开训练场:

1
2
用 Qlib 学会标准化 ML quant research workflow,
再把 WorldQuant 的研究直觉迁移进 public-safe demo。

14. 和 LLMQuant / HKUDS 的关系

我现在的判断:

1
2
3
Qlib 是 quant ML research engine。
LLMQuant 是 finance-native agent / workflow / data access stack。
HKUDS 是 RAG / agent / harness / product infrastructure stack。

三者可以组合:

LayerProject
Evidence accessLLMQuant Data MCP
Knowledge memoryHKUDS LightRAG
Agent workflowHKUDS Vibe-Trading / NanoBot
Quant ML engineQlib
Trading platform / simulationHKUDS AI-Trader + Qlib backtest
Research experiment ledgerQlib Recorder + Pengyi Research OS

如果做一个 public-safe MVP:

1
2
3
4
5
6
7
8
9
research note / paper / news
  -> RAG extraction
  -> factor hypothesis
  -> Qlib feature expression / dataset
  -> model training
  -> backtest
  -> recorder artifacts
  -> diagnosis report
  -> next research plan

这就是一个真正能展示的 AI Quant Research OS demo。

15. 我们可以怎么用 Qlib

短期我建议做四个任务。

Task 1: 跑通 LightGBM + Alpha158

目标不是追求收益,而是跑通全链路:

1
2
3
4
5
download sample data
qrun workflow_config_lightgbm_Alpha158.yaml
save recorder artifacts
read IC / Rank IC / backtest report
write diagnosis

输出:

1
Qlib LightGBM Alpha158 Reproduction Report

Task 2: 做一个 public-safe factor card

用非常基础、公开安全的 expression:

1
momentum / reversal / volatility / volume

把它写成:

1
2
3
4
5
6
factor hypothesis
feature expression
dataset segment
evaluation result
bias diagnosis
next action

输出:

1
Public-Safe Factor Card 001

Task 3: 比较 LightGBM vs Transformer

同一数据、同一切分、同一 strategy、同一成本假设。

比较:

  • IC;
  • Rank IC;
  • cost-aware return;
  • turnover;
  • drawdown;
  • stability;
  • runtime。

输出:

1
Qlib Model Comparison 001

Task 4: 接入 Research OS

把 Qlib run 的输出统一进入我们的目录:

1
2
3
4
5
6
7
8
9
research-os/
  experiments/
    qlib_lightgbm_alpha158_001/
      config.yaml
      factor_card.md
      metrics.json
      backtest_report.md
      bias_diagnosis.md
      next_plan.md

这一步是关键。

我们不只是跑包。 我们要把包变成自己的研究系统组件。

16. 面试拷打问题

如果简历或项目里写 Qlib,一定要能接住这些问题。

  1. Qlib 和 Backtrader / Zipline / VectorBT 的区别是什么?
  2. Qlib 为什么强调 AI-oriented quant platform,而不是普通 backtester?
  3. Qlib 的 data layer 怎么避免重复计算?
  4. Expression Engine 和 DataHandlerLP 分别解决什么问题?
  5. train/valid/test segment 和 learn/infer processor 是同一件事吗?
  6. Forecast Model 为什么只输出 score,不直接输出交易指令?
  7. TopkDropoutStrategy 的思路是什么?它解决了什么问题,又有什么缺陷?
  8. IC 高为什么不代表策略赚钱?
  9. cost-aware backtest 要看哪些指标?
  10. Qlib Recorder 和 MLflow 的关系是什么?
  11. 如何把一个自定义 PyTorch model 接入 Qlib?
  12. 如何把一个自定义 factor expression 接入 Qlib?
  13. Qlib 适不适合直接实盘?为什么?
  14. Qlib 在金融低信噪比、非平稳环境里会遇到什么问题?
  15. 如果你要把 Qlib 接入自己的 AI Quant Research OS,你会怎么设计目录、接口和 artifact?

我自己的回答框架:

1
2
3
Qlib 是 research engine,不是 alpha guarantee。
我会用它来标准化 data / feature / model / strategy / backtest / recorder,
再用自己的 Research OS 管 hypothesis、bias diagnosis、human review 和 next-plan。

17. 最终判断

Qlib 对我目前最重要的启发是三句话:

1
2
3
第一,量化研究的核心资产不是单个模型,而是可复现 workflow。
第二,AI quant 的工程边界必须清楚:data、feature、model、strategy、backtest、recorder 分层。
第三,Research OS 必须把每一次 run 变成可比较、可诊断、可复盘、可继续迭代的 artifact。

所以 Qlib 不只是一个要学的 package。

它是我们搭建 Pengyi AI Quant Research OS 的一个参照系。

References

This post is licensed under CC BY 4.0 by the author.