Qlib 快速上手:一条命令跑通量化回测
【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate R&D process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib
刚做量化研究时,最耗时间的是数据、模型、回测散落在三个脚本里各写各的。Qlib 量化回测平台把因子构建、模型训练、回测报告串进一份 YAML 配置,一条 qrun 命令跑到底。
为什么选 Qlib 做量化研究
自己搭量化流程,最先碰壁的是两件事:因子和标签的时间对齐容易写错,回测假设也不真实——涨停买不进、手续费不能忽略。Qlib 把这些做成了现成模块:特征表达式在 qlib/data/ops.py 里计算,涨跌停与手续费在 qlib/backtest/exchange.py 里强制执行,examples/benchmarks/ 下有三十多个论文模型的配置可以直接抄来跑,不用从零搭量化回测链路。
用 pip 一条命令安装 Qlib
pip install pyqlib需要仓库最新代码时,走源码安装:
pip install numpy pip install --upgrade cython git clone https://gitcode.com/GitHub_Trending/qli/qlib && cd qlib python setup.py install官方离线数据集暂时停用,可用社区维护的 qlib_bin 数据:把压缩包解压到~/.qlib/qlib_data/cn_data即可。数据就位后,直接跑 LightGBM 量化回测:
cd examples qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml终端会打印年化收益、信息比率、最大回撤,docs 目录里的 report.png 就是这个量化回测流程生成的报告样式:
它是怎么工作的:YAML 驱动的四级流水线
qrun 解析 YAML 后按顺序组装四个模块,像流水线一样:
- 数据准备:
data_handler_config指向 qlib/contrib/data/handler.py 里的 Alpha158,把原始行情加工成 158 个因子(量价、波动率、价格位置等); - 模型训练:
task.model是 qlib/contrib/model/gbdt.py 里的 LGBModel,task.dataset是 qlib/data/dataset/ 里的 DatasetH,按 segments 里的时间段切出 train/valid/test 三段; - 信号生成:record 段执行 qlib/workflow/record_temp.py 里的 SignalRecord,把模型对每只股票未来涨跌的预测存成信号;
- 回测执行:PortAnaRecord 用 TopkDropoutStrategy(qlib/contrib/strategy/signal_strategy.py)模拟每日调仓,exchange 层按配置执行涨跌停与费用。
除监督学习外,它还有独立的强化学习框架 qlib/rl/,用来处理订单执行这类更细粒度的连续决策:
配置与调优:workflow_config_lightgbm_Alpha158.yaml 里先看这 6 项
1. 数据路径 provider_uri
qlib_init: provider_uri: "~/.qlib/qlib_data/cn_data"必须和数据实际下载目录一致,否则 qlib.init 直接报错。
2. 训练集切分 segments
segments: train: [2008-01-01, 2014-12-31] valid: [2015-01-01, 2016-12-31] test: [2017-01-01, 2020-08-01]按时间顺序切,常见比例约 7:2:1。注意附带数据集只到 2020-08-01,日期别写超。
3. 持仓宽度 topk 与换手 n_drop
kwargs: topk: 50 n_drop: 5持有预测分数最高的 50 只股票,每天淘汰最差的 5 只换成新晋高的。topk 常用 20~100,n_drop 常用 1~10,n_drop 越大换手越高、手续费越贵。
4. 交易成本 open_cost / close_cost
open_cost: 0.0005 close_cost: 0.0015对应 A 股佣金加印花税的量级;想更贴近实盘可以调成 0.001 / 0.0013。
5. 涨跌停阈值 limit_threshold
limit_threshold: 0.095当日涨幅超 9.5% 视为涨停无法成交。沪深主板保持默认即可,别急着改。
6. 模型复杂度
num_leaves: 210 learning_rate: 0.2 num_threads: 20num_leaves 建议 31~300 之间,越大越容易过拟合;num_threads 按你机器的核数调。
踩过的坑
现象:import qlib 报 ModuleNotFoundError: No module named 'qlib.data._libs.rolling' → 原因:Cython 扩展没在源码里编译,或仓库本地 qlib 目录把已安装的包挡住了 → 解决:在仓库根目录执行python setup.py build_ext --inplace,并确保脚本不在仓库目录下运行。
现象:Windows 上跑报 RuntimeError "start a new process before bootstrapping" → 原因:multiprocessing 在 Windows 不能直接派生新进程 → 解决:把 qlib.init() 和 D.features 放进if __name__ == "__main__":里再运行。
现象:报 QlibCacheException,提示 redis 锁的 key 已存在 → 原因:redis 默认 db 1 里残留了上次任务的锁 → 解决:redis-cli后执行select 1再flushdb,或用 qlib.init(redis_task_db=2) 换一个库。
现象:Mac M1 上装 lightgbm 依赖失败 → 原因:缺 OpenMP 运行时 → 解决:先brew install libomp,再pip install .。
【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate R&D process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考