3. Qlib平台概览

Qlib平台概览 学习卡片

在正式动手写第一行量化策略之前,必须先建立对 Qlib 的整体认知。很多初学者拿到 Qlib 后直接复制示例代码跑通,却说不清数据从哪来、模型在哪训练、信号如何变成订单,一旦需要替换因子或接入自有数据就无从下手。本节从架构视角拆解 Qlib,帮助你形成一张可复用的“平台地图”。

一、核心原理:分层解耦的量化工作流

Qlib 的设计哲学是把量化研究拆成职责清晰的若干层,每层只暴露标准接口,层与层之间通过约定好的数据结构通信。这样做的直接好处是:你可以只替换模型层而保留数据层,也可以只改策略层而沿用已有模型,无需推倒重来。

整体上,Qlib 可划分为五个层次,外加一个贯穿全局的工作流引擎:

  • 数据层(Data Layer):负责原始行情、财务数据的存储、表达式计算与高效读取,核心是 DataHandler 与表达式引擎。
  • 模型层(Model Layer):封装从线性模型到深度学习的各类预测器,统一 fit / predict 接口。
  • 策略层(Strategy Layer):把模型输出的预测分数转化为具体的目标持仓或交易信号。
  • 执行层(Execution Layer):模拟或对接真实交易,处理成交、滑点、手续费与仓位约束。
  • 工作流引擎(Workflow):以 qrun 和 YAML 配置为入口,把上述各层编排成可复现的端到端流程。
核心思想:Qlib 不是一个大而全的黑盒,而是一组可插拔组件的集合。理解每一层的输入输出契约,比记住 API 名称更重要。

二、方法流程:一次完整运行的数据流

下面这张图展示了从原始数据到回测结果的完整链路,是理解 Qlib 架构最直观的方式:

数据层 DataHandler 模型层 Model.fit/predict 策略层 Strategy 执行层 Executor 回测结果 Portfolio 工作流引擎 qrun / YAML 配置编排

对应到实际代码,一次典型运行由 YAML 配置驱动,核心字段如下:

qlib_init:
    provider_uri: "~/.qlib/qlib_data/cn_data"
    region: cn
market: &market csi300
benchmark: &benchmark SH000300

data_handler_config: &data_handler_config
    start_time: 2015-01-01
    end_time: 2021-12-31
    fit_start_time: 2015-01-01
    fit_end_time: 2018-12-31
    instruments: *market

task:
    model:
        class: LGBModel
        module_path: qlib.contrib.model.gbdt
    dataset:
        class: DatasetH
        kwargs:
            handler:
                class: Alpha158
                kwargs: *data_handler_config
    record:
        class: SignalRecord

执行 qrun workflow_config.yaml 后,Qlib 会依次完成数据加载、特征计算、模型训练、信号生成、策略决策与回测记录,最终输出收益曲线与风险指标。

三、核心模块速查表

层次 关键类/模块 职责
数据层 DataHandler、Alpha158、Alpha360 加载行情、计算因子表达式、生成训练样本
模型层 LGBModel、LinearModel、DEnsembleModel 拟合特征与标签,输出预测分数
策略层 TopkDropoutStrategy、WeightStrategy 将预测分数转为目标持仓权重
执行层 SimulatorExecutor、NestedExecutor 模拟成交、计算成本、更新组合状态
工作流 qrun、QlibRecorder 编排流程、记录实验、复现结果

四、案例场景:替换模型层验证架构解耦

假设你已用 LGBModel 跑通基线,现在想换成线性模型对比效果。得益于分层设计,你只需修改 YAML 中 model 一段:

model:
    class: LinearModel
    module_path: qlib.contrib.model.linear
    kwargs:
        estimator: Ridge
        alpha: 0.05

数据层、策略层、执行层配置完全不动,重新执行 qrun 即可得到新结果。这正是 Qlib 架构价值的体现:变更被限制在单层内部,实验成本大幅降低。

建议在初期就养成用 YAML 管理实验的习惯,把每次改动的配置连同 QlibRecorder 生成的实验 ID 一起归档,后续复盘时能快速定位“哪次改动带来了收益提升”。

五、常见误区与复盘

  • 误区一:把 Qlib 当成单一模型库。实际上模型只是其中一层,忽略数据层与执行层会导致回测结果严重失真。
  • 误区二:忽视数据层的时间对齐。特征计算若引入未来信息,模型指标会虚高,务必确认 fit_end_time 与回测区间严格分离。
  • 误区三:跳过执行层直接看预测分数。预测准确率高不等于策略盈利,滑点与手续费会显著侵蚀收益。
  • 误区四:不用工作流引擎,手写脚本串联。短期看似灵活,长期难以复现,实验管理会迅速失控。
复盘要点:当你发现回测收益异常亮眼时,优先检查三处——数据层是否存在未来函数、执行层成本参数是否过于乐观、策略层是否使用了当日收盘价成交。这三处是量化回测中最常见的“虚假繁荣”来源。