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 看到的项目状态:
| Item | Value |
|---|---|
| Repo | microsoft/qlib |
| GitHub | https://github.com/microsoft/qlib |
| License | MIT |
| Default branch | main |
| Stars | 45.7k+ |
| Forks | 7.2k+ |
| Open issues | 450+ |
| Official docs | https://qlib.readthedocs.io/en/latest/ |
| Paper | Qlib: An AI-oriented Quantitative Investment Platform |
它的 repo description 里有几个关键词非常重要:
AI-oriented Quant investment platformfrom exploring ideas to implementing productionssupervised learningmarket dynamics modelingreinforcement learningRD-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 如何避免混乱 |
| DatasetH | train / 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。
对量化研究来说,最低限度应该看:
| Dimension | Meaning |
|---|---|
| IC / Rank IC | signal 与未来收益的相关性 |
| cumulative return | 策略收益曲线 |
| excess return | 相对 benchmark 的超额收益 |
| max drawdown | 最大回撤 |
| turnover | 换手率和交易成本压力 |
| cost-aware return | 成本后是否仍有效 |
| segment stability | train/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 最适合:
- 做 AI / ML quant research 的工程底座。
- 做 cross-sectional stock prediction benchmark。
- 做统一数据、统一模型、统一策略、统一 backtest 的实验平台。
- 做模型 zoo 对比:LightGBM、Transformer、TRA、HIST 等。
- 做 research workflow 的 reproducibility。
- 学习量化平台的工程分层。
- 作为我们 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-style | Qlib 对应层 | 我们的 Research OS 对应层 |
|---|---|---|
| 因子字段 | Data Layer | Data Contract |
| 因子表达式 | Expression Engine | Factor Expression |
| universe | instruments / market | Universe Spec |
| 回测区间 | Dataset segments | Train / Valid / Test Protocol |
| alpha simulation | qrun + backtest | Experiment Run |
| IC / Sharpe / turnover | analysis / report | Evaluation Card |
| 因子诊断 | recorder + report | Bias Diagnosis |
| 下一轮改进 | manual research loop | R&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。
三者可以组合:
| Layer | Project |
|---|---|
| Evidence access | LLMQuant Data MCP |
| Knowledge memory | HKUDS LightRAG |
| Agent workflow | HKUDS Vibe-Trading / NanoBot |
| Quant ML engine | Qlib |
| Trading platform / simulation | HKUDS AI-Trader + Qlib backtest |
| Research experiment ledger | Qlib 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,一定要能接住这些问题。
- Qlib 和 Backtrader / Zipline / VectorBT 的区别是什么?
- Qlib 为什么强调 AI-oriented quant platform,而不是普通 backtester?
- Qlib 的 data layer 怎么避免重复计算?
- Expression Engine 和 DataHandlerLP 分别解决什么问题?
- train/valid/test segment 和 learn/infer processor 是同一件事吗?
- Forecast Model 为什么只输出 score,不直接输出交易指令?
- TopkDropoutStrategy 的思路是什么?它解决了什么问题,又有什么缺陷?
- IC 高为什么不代表策略赚钱?
- cost-aware backtest 要看哪些指标?
- Qlib Recorder 和 MLflow 的关系是什么?
- 如何把一个自定义 PyTorch model 接入 Qlib?
- 如何把一个自定义 factor expression 接入 Qlib?
- Qlib 适不适合直接实盘?为什么?
- Qlib 在金融低信噪比、非平稳环境里会遇到什么问题?
- 如果你要把 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
- Qlib GitHub: https://github.com/microsoft/qlib
- Qlib official docs: https://qlib.readthedocs.io/en/latest/
- Qlib workflow docs: https://qlib.readthedocs.io/en/latest/component/workflow.html
- Qlib data layer docs: https://qlib.readthedocs.io/en/latest/component/data.html
- Qlib forecast model docs: https://qlib.readthedocs.io/en/latest/component/model.html
- Qlib portfolio strategy docs: https://qlib.readthedocs.io/en/latest/component/strategy.html
- Qlib recorder docs: https://qlib.readthedocs.io/en/latest/component/recorder.html
- Qlib analysis docs: https://qlib.readthedocs.io/en/latest/component/report.html
- Microsoft Research publication: https://www.microsoft.com/en-us/research/publication/qlib-an-ai-oriented-quantitative-investment-platform/
- arXiv paper: https://arxiv.org/abs/2009.11189