📖

Qlib 简介

Qlib 是一个面向 AI 的量化投资平台,旨在实现 AI 技术在量化投资中的潜力,赋能研究,创造价值。

借助 Qlib,用户可以轻松尝试自己的想法,创建更好的量化投资策略。该平台提供了一个完整的量化投资研究工作流,从数据处理到模型训练,从策略回测到实盘交易。

✨ 核心特点

  • 完整的量化工作流:覆盖数据处理、特征工程、模型训练、回测分析等全流程
  • 模块化设计:各组件松耦合,可独立使用或组合使用
  • 丰富的模型库:内置 LightGBM、MLP、LSTM 等多种机器学习模型
  • 灵活的框架:支持监督学习和强化学习等多种范式
  • 实验管理:完善的实验跟踪和版本管理
🏗️

框架架构

Qlib 在模块层面是一个由多个组件组成的平台。这些组件被设计为松耦合的模块,每个组件都可以独立使用。

💡
提示

对于新用户来说,这个框架可能看起来有些复杂。建议初学者先跳过此部分,熟悉基本功能后再阅读。

架构层次

层次 描述
基础设施层 为量化研究提供底层支持。DataServer 提供高性能的基础设施来管理和检索原始数据。Trainer 提供灵活的接口来控制模型的训练过程。
学习框架层 预测模型和交易代理是可训练的。它们基于学习框架层训练,然后应用于工作流层的多个场景。支持强化学习和监督学习。
工作流层 覆盖量化投资的整个工作流。支持基于监督学习的策略和基于强化学习的策略。包括信息提取、预测模型、决策生成和执行环境。
接口层 为底层系统呈现用户友好的界面。分析模块为用户提供关于预测信号、投资组合和执行结果的详细分析报告。
🚀

快速入门

本快速入门指南将向您展示:

  • 使用 Qlib 构建完整的量化研究工作流非常简单
  • 即使使用公开数据和简单模型,机器学习技术在量化投资中也能表现优异

1️⃣ 安装 Qlib

在安装 Qlib 之前,需要安装一些依赖项:

bash
pip install numpy
pip install --upgrade cython

克隆仓库并安装 Qlib:

bash
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install
💡
提示

推荐使用 pip 直接安装:pip install pyqlib

2️⃣ 准备数据

运行以下代码加载和准备数据:

bash
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
⚠️
注意

此数据集收集自 Yahoo Finance,可能不够完美。如果您有高质量数据集,建议准备自己的数据。

3️⃣ 运行自动量化研究工作流

Qlib 提供了一个名为 qrun 的工具来自动运行整个工作流(包括构建数据集、训练模型、回测和评估):

bash
cd examples  # 避免在包含 `qlib` 的目录下运行
qrun benchmarks/LightGBM/workflow_config_lightgbm.yaml

回测结果示例

指标 无成本超额收益 含成本超额收益
均值 (mean) 0.000605 0.000410
标准差 (std) 0.005481 0.005478
年化收益率 (annualized_return) 0.152373 0.103265
信息比率 (information_ratio) 1.751319 1.187411
最大回撤 (max_drawdown) -0.059055 -0.075024
📥

安装指南

系统要求

💡
提示

Qlib 支持 Windows 和 Linux。推荐在 Linux 环境下使用。Qlib 支持 Python3,最高支持到 Python 3.8。

安装方式

方式一:使用 pip 安装(推荐)

bash
pip install pyqlib

方式二:从源码安装

1. 进入 Qlib 根目录(包含 setup.py 文件)

2. 执行以下命令安装环境依赖和 Qlib:

bash
$ pip install numpy
$ pip install --upgrade cython
$ git clone https://github.com/microsoft/qlib.git && cd qlib
$ python setup.py install
💡
提示

推荐使用 Anaconda/Miniconda 设置环境。Qlib 需要 lightgbm 和 pytorch 包,使用 pip 安装它们。

验证安装

使用以下代码验证安装是否成功:

python
>>> import qlib
>>> qlib.__version__
'0.9.8.dev11'
⚙️

初始化配置

下载和准备数据

执行以下命令下载股票数据:

bash
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

初始化 Qlib

在调用其他 API 之前,需要先初始化 Qlib:

python
import qlib
# region 在 [REG_CN, REG_US] 中选择
from qlib.constant import REG_CN

provider_uri = "~/.qlib/qlib_data/cn_data"  # 数据目录
qlib.init(provider_uri=provider_uri, region=REG_CN)
⚠️
注意

不要在 Qlib 的仓库目录中导入 qlib 包,否则可能会出错。

初始化参数

除了 provider_uriregionqlib.init 还有其他重要参数:

provider_uri

  • 类型:str
  • 说明:Qlib 数据的 URI。例如,可以是通过 get_data.py 加载的数据存储位置。

region

  • 类型:str,可选参数(默认:qlib.constant.REG_CN)
  • 支持值
    • qlib.constant.REG_US ('us'):美国股票市场
    • qlib.constant.REG_CN ('cn'):中国股票市场
  • 说明:不同的 region 值会导致不同的股票市场模式,包括不同的交易限制和成本。

redis_host

  • 类型:str,可选参数(默认:"127.0.0.1")
  • 说明:Redis 主机地址。锁定和缓存机制依赖于 Redis。

redis_port

  • 类型:int,可选参数(默认:6379)
  • 说明:Redis 端口
⚠️
注意

如果 Qlib 无法通过 redis_host 和 redis_port 连接到 Redis,将不会使用缓存机制!

exp_manager(实验管理器)

  • 类型:dict,可选参数
  • 说明:Qlib 中使用的实验管理器设置。用户可以指定实验管理器类以及所有实验的跟踪 URI。
python
qlib.init(provider_uri=provider_uri, region=REG_CN, exp_manager={
    "class": "MLflowExpManager",
    "module_path": "qlib.workflow.expm",
    "kwargs": {
        "uri": "python_execution_path/mlruns",
        "default_exp_name": "Experiment",
    }
})

mongo(MongoDB)

  • 类型:dict,可选参数
  • 说明:MongoDB 设置,用于某些功能(如任务管理),具有高性能和集群处理能力。
python
qlib.init(provider_uri=provider_uri, region=REG_CN, mongo={
    "task_url": "mongodb://localhost:27017/",  # mongo URI
    "task_db_name": "rolling_db",  # 任务管理的数据库名称
})
💾

数据获取

用户可以使用 Qlib 获取股票数据。以下示例演示了基本的用户界面。

Qlib 初始化

💡
提示

为了获取数据,用户需要先使用 qlib.init 初始化 Qlib。

python
>>> import qlib
>>> qlib.init(provider_uri='~/.qlib/qlib_data/cn_data')

加载交易日历

python
>>> from qlib.data import D
>>> D.calendar(start_time='2010-01-01', end_time='2017-12-31', freq='day')[:2]
[Timestamp('2010-01-04 00:00:00'), Timestamp('2010-01-05 00:00:00')]

加载股票池

python
>>> from qlib.data import D
>>> instruments = D.instruments(market='csi300')
>>> D.list_instruments(instruments=instruments, start_time='2010-01-01',
                       end_time='2017-12-31', as_list=True)[:6]
['SH600036', 'SH600110', 'SH600087', 'SH600900', 'SH600089', 'SZ000912']

加载特征数据

python
>>> from qlib.data import D
>>> instruments = ['SH600000']
>>> fields = ['$close', '$volume', 'Ref($close, 1)', 'Mean($close, 3)', '$high-$low']
>>> D.features(instruments, fields, start_time='2010-01-01',
               end_time='2017-12-31', freq='day').head()

使用过滤器

按名称过滤

python
>>> from qlib.data.filter import NameDFilter
>>> nameDFilter = NameDFilter(name_rule_re='SH[0-9]{4}55')
>>> instruments = D.instruments(market='csi300', filter_pipe=[nameDFilter])
>>> D.list_instruments(instruments=instruments, start_time='2015-01-01',
                       end_time='2016-02-15', as_list=True)
['SH600655', 'SH601555']

按表达式过滤

python
>>> from qlib.data.filter import ExpressionDFilter
>>> expressionDFilter = ExpressionDFilter(rule_expression='$close>2000')
>>> instruments = D.instruments(market='csi300', filter_pipe=[expressionDFilter])

表达式编程方式

在构建复杂表达式时,使用单个字符串可能不太方便。您也可以通过代码实现表达式:

python
>>> from qlib.data.ops import *
>>> f1 = Feature("high") / Feature("close")
>>> f2 = Feature("open") / Feature("close")
>>> f3 = f1 + f2
>>> f4 = f3 * f3 / f3
>>> data = D.features(["sh600519"], [f4], start_time="20200101")
💡
提示

调用 D.features() 时,使用参数 disk_cache=0 跳过数据集缓存,disk_cache=1 生成并使用数据集缓存,disk_cache=2 更新数据集缓存(服务端)。

🔄

工作流管理

Qlib 提供了完整的工作流管理系统,帮助用户构建、执行和管理量化投资策略。工作流是 Qlib 的核心概念,它将数据处理、模型训练、策略回测等环节串联起来。

工作流配置

Qlib 使用 YAML 格式来配置工作流。一个典型的工作流配置包含以下部分:

yaml
workflow:
  class: "qlib.workflow.workflow.TemporalWorkflow"
  module_path: "qlib.workflow.workflow"
  kwargs:
    start_time: "2010-01-01"
    end_time: "2017-12-31"
    fit_start_time: "2010-01-01"
    fit_end_time: "2016-12-31"

executor:
  class: "qlib.backtest.executor.BacktestExecutor"
  module_path: "qlib.backtest.executor"
  kwargs:
    trade_exchange:
      class: "qlib.backtest.exchange.SimpleExchange"
      module_path: "qlib.backtest.exchange"
      kwargs:
        limit_threshold: 0.2

task:
  class: "qlib.workflow.task_management.TrainingTask"
  module_path: "qlib.workflow.task_management"
  kwargs:
    dataset:
      class: "qlib.data.dataset.DatasetH"
      module_path: "qlib.data.dataset"
      kwargs:
        segments:
          train:
            start_time: "2010-01-01"
            end_time: "2015-12-31"
          type: "train"
    model:
      class: "qlib.contrib.model.gbdt.LGBModel"
      module_path: "qlib.contrib.model.gbdt"
      kwargs:
        loss: "mse"
        col: "mse"

运行工作流

使用 qrun 命令运行工作流:

bash
qrun workflow_config.yaml

工作流组件

  • Workflow:工作流容器,定义任务执行的时间框架
  • Executor:执行器,负责交易执行和模拟
  • Task:任务,定义模型训练和预测
  • Dataset:数据集,定义训练和测试数据
  • Model:模型,定义预测模型
  • Strategy:策略,定义交易信号生成
  • Portfolio:投资组合,定义持仓管理
  • Analyzer:分析器,定义性能指标计算
💡
提示

Qlib 提供了多种预定义的工作流模板,位于 examples/benchmarks 目录下。用户可以基于这些模板快速开始自己的研究。

🤖

模型训练

Qlib 提供了丰富的模型库和灵活的训练接口。用户可以使用内置模型,也可以自定义模型。

内置模型

LightGBM 模型

python
from qlib.contrib.model.gbdt import LGBModel

model = LGBModel(
    loss="mse",
    col="mse",
)
model.fit(dataset)
pred = model.predict(dataset)

MLP 模型(多层感知机)

python
from qlib.contrib.model.pytorch_nn import DNNModelPytorch

model = DNNModelPytorch(
    dnn_layers=(64, 32,),
    dropout=0.2,
)
model.fit(dataset)
pred = model.predict(dataset)

LSTM 模型

python
from qlib.contrib.model.pytorch_lstm import LSTMModel

model = LSTMModel(
    dnn_layers=(64,),
    lstm_layers=(32,),
    dropout=0.2,
)
model.fit(dataset)
pred = model.predict(dataset)

模型训练接口

fit 方法

  • 参数:dataset(数据集)
  • 说明:训练模型

predict 方法

  • 参数:dataset(数据集)
  • 返回:预测结果
⚠️
注意

训练前确保数据集已正确准备,包括特征工程和数据分割。

💡
实战技巧(来自社区最佳实践)
  • YAML vs Code: YAML配置适合快速原型和复现,Python代码提供更大灵活性。生产环境建议使用Python API
  • 数据分片: 使用time-series cross-validation避免look-ahead bias,确保训练集早于验证集和测试集
  • 版本管理: 将workflow配置文件纳入Git管理,每个实验记录配置快照
  • 并行实验: 使用TaskManager并行运行多个模型配置,加速策略搜索
  • 实验追踪: 集成MLflow或Weights & Biases记录超参数、指标和artifacts

🔥 社区推荐的Workflow结构

yaml
# 推荐的workflow文件组织结构
project/
├── configs/
│   ├── base_config.yaml       # 基础配置(数据、市场)
│   ├── model_lgbm.yaml        # 模型配置
│   ├── model_mlp.yaml         # 模型配置
│   └── strategy_topk.yaml     # 策略配置
├── scripts/
│   ├── run_exp.py             # 实验运行脚本
│   └── analyze_results.py     # 结果分析脚本
└── notebooks/
    └── visualize.ipynb        # 可视化分析

📊 实战案例:多模型对比实验

社区常见的做法是同时训练多个模型进行对比:

python
from qlib.workflow import R
from qlib.tests.config import TEST_CONFIG

models = ['LGBModel', 'MLPModel', 'LSTMModel']
results = {}

with R.start(experiment_name="model_comparison"):
    for model_name in models:
        # 运行每个模型
        recorder = R.get_recorder()
        results[model_name] = recorder.list_metrics()

# 对比结果
for model, metrics in results.items():
    print(f"{model}: IC={metrics['IC']}, RankIC={metrics['Rank IC']}")
🎯
模型选择指南(基于社区经验)
场景 推荐模型 原因
特征工程良好 LightGBM/XGBoost 树模型对表格数据效果最佳
时序特征重要 LSTM/GRU/TCN RNN架构捕捉时序依赖
市场微观结构 Transformer/GAT 注意力机制建模股票间关系
快速原型 Linear Regression 基线模型,快速验证特征

⚡ 性能优化技巧

python
# LightGBM并行化加速
model_config = {
    "class": "LGBModel",
    "module_path": "qlib.contrib.model.gbdt",
    "kwargs": {
        "num_threads": 20,      # 利用多核
        "learning_rate": 0.02,    # 降低学习率提高精度
        "num_leaves": 210,      # 增加叶节点数提升拟合能力
        "feature_fraction": 0.9,  # 特征采样防止过拟合
        "bagging_fraction": 0.8, # 数据采样
        "early_stopping_rounds": 50  # 早停
    }
}

# PyTorch GPU加速
mlp_config = {
    "class": "DNNModelPytorch",
    "module_path": "qlib.contrib.model.pytorch_nn",
    "kwargs": {
        "GPU": 0,              # 使用GPU 0
        "batch_size": 2048,     # 增大批次提高GPU利用率
        "lr": 0.002,
        "max_steps": 10000
    }
}
📊

投资组合策略

Qlib 提供了多种投资组合策略实现,包括基于预测的策略和基于强化学习的策略。

Topk 策略

选择预测值最高的 k 只股票:

python
from qlib.contrib.strategy.topk import TopkStrategy

strategy = TopkStrategy(
    topk=30,
    n_drop=5,
    method="weight",
)

强化学习策略

基于强化学习的交易策略:

python
from qlib.contrib.strategy.rl_strategy import TwinFilterStrategy

strategy = TwinFilterStrategy(
    transaction=0.0015,
    trade_exchange=exchange,
)

策略接口

generate_pred 方法

  • 参数:prediction(预测分数)
  • 返回:目标投资组合
💡
提示

策略的核心是将预测分数转换为实际的投资组合权重。Qlib 提供了多种实现方式,用户也可以自定义策略。

⚖️
策略设计原则(来自量化基金实战)
  • 换手率控制: 高换手率策略在实盘中会因交易成本严重损耗,建议控制在年化200%以内
  • 风险分散: 单只股票权重不超过5%,行业集中度不超过30%
  • 动态调仓: 根据市场波动率调整调仓频率,高波动期减少交易
  • 成本建模: 回测时必须包含印花税、佣金、滑点等真实成本
  • 流动性过滤: 剔除成交量过小的股票,避免实盘无法成交

🔧 自定义策略示例

继承TopkDropoutStrategy并添加风险约束:

python
from qlib.contrib.strategy.strategy import TopkDropoutStrategy
import pandas as pd
import numpy as np

class RiskControlledStrategy(TopkDropoutStrategy):
    """
    带风险控制的Topk策略
    - 限制单股权重
    - 控制行业集中度
    - 过滤低流动性股票
    """
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.max_weight_per_stock = 0.05  # 单股最大5%
        self.max_industry_concentration = 0.3  # 行业最大30%
    
    def generate_order_dir(self, pred_score, **kwargs):
        # 调用父类方法生成初始仓位
        W = super().generate_order_dir(pred_score, **kwargs)
        
        # 应用风险约束
        W = self._apply_weight_cap(W)
        W = self._apply_industry_cap(W)
        
        # 重新归一化
        W = W / W.sum()
        
        return W
    
    def _apply_weight_cap(self, W):
        # 限制单股权重
        W = W.clip(upper=self.max_weight_per_stock)
        return W
    
    def _apply_industry_cap(self, W):
        # 简化版本:假设已有行业分类数据
        # 实际需要加载行业数据并计算集中度
        return W

# 使用自定义策略
strategy_config = {
    "class": "RiskControlledStrategy",
    "module_path": "your_module",
    "kwargs": {
        "topk": 50,
        "n_drop": 5
    }
}
📝
Alpha表达式实战技巧
  • 性能优化:
    • 使用ExpressionCache缓存计算结果
    • 复杂表达式拆分为多个简单表达式
    • 避免重复计算相同特征
  • 因子组合:
    • 先构建基础因子(动量、反转、波动)
    • 再构建复合因子(因子之间的交互)
    • 最后进行因子降维(PCA、IC加权)
  • 常见Alpha因子:
    • 动量: Ref($close, 20) / $close - 1
    • 反转: -Ref($close, 5) / $close + 1
    • 波动: Std($close, 20) / Mean($close, 20)
    • 成交额换手: $volume * $close / Mean($volume * $close, 20)

🔥 经典Alpha因子库(Alpha158、Alpha360)

Qlib内置了两个强大的因子库:

因子库 因子数量 特点 适用场景
Alpha158 158个 基于量价的传统因子 日频、中低频交易
Alpha360 360个 更长时间窗口、更多技术指标 深度学习模型

💻 自定义Alpha因子示例

python
# 自定义Alpha因子集合
from qlib.data.dataset.handler import DataHandlerLP

# 定义自定义因子
custom_features = [
    # 动量类
    "Ref($close, 20) / $close - 1",           # 20日收益率
    "Ref($close, 60) / $close - 1",           # 60日收益率
    "($close - Ref($close, 5)) / Ref($close, 5)",  # 5日收益率
    
    # 反转类
    "-Ref($close, 3) / $close + 1",           # 3日反转
    "-($high - $low) / $close",               # 日内振幅
    
    # 波动类
    "Std($close, 20) / Mean($close, 20)",     # 20日波动率
    "Std($volume, 10) / Mean($volume, 10)",   # 10日成交量波动
    
    # 成交量相关
    "$volume / Mean($volume, 20)",            # 相对成交量
    "($volume * $close) / Mean($volume * $close, 20)", # 相对成交额
    
    # 技术指标
    "($close - Mean($close, 20)) / Std($close, 20)", # Z-score
    "($close - Mean($close, 10)) / Mean($close, 10)", # 偏离度
    
    # 跨截面特征
    "Rank($close / Ref($close, 1))",          # 当日收益率排名
    "Rank($volume)",                           # 成交量排名
]

# 数据处理器配置
handler_config = {
    "class": "DataHandlerLP",
    "module_path": "qlib.data.dataset.handler",
    "kwargs": {
        "start_time": "2008-01-01",
        "end_time": "2020-08-01",
        "fit_start_time": "2008-01-01",
        "fit_end_time": "2014-12-31",
        "instruments": "csi300",
        "infer_processors": [
            {"class": "RobustZScoreNorm", "kwargs": {"fields_group": "feature", "clip_outlier": True}},
            {"class": "Fillna", "kwargs": {"fields_group": "feature"}},
        ],
        "learn_processors": [
            {"class": "DropnaLabel"},
            {"class": "CSRankNorm", "kwargs": {"fields_group": "label"}},
        ],
    }
}

# 标签定义:预测未来2天收益率
label = ["Ref($close, -2) / Ref($close, -1) - 1"]
💡
因子有效性检验

构建因子后务必进行IC检验、换手率分析、因子正交性检验。只保留IC > 0.03 且换手率合理的因子。

📦

数据框架

Qlib 的数据框架设计灵活且强大,支持多种数据源和表达式计算。

数据提供器

Qlib 支持多种数据提供器:

  • LocalDataClient:本地数据提供器
  • CalendarDataClient:交易日历数据
  • InstrumentDataClient:股票数据
  • FeatureDataClient:特征数据

数据表达式

Qlib 支持丰富的数据表达式:

基础运算符

运算符 说明 示例
$ 原始数据 $close
Ref 引用 Ref($close, 1)
Mean 均值 Mean($close, 5)
Std 标准差 Std($close, 10)
Max 最大值 Max($high, 20)
Min 最小值 Min($low, 20)
Sum 求和 Sum($volume, 5)

高级运算符

  • Rank:排序
  • Quantile:分位数
  • ROC:变化率
  • MA:移动平均
  • EMA:指数移动平均
  • MACD:移动平均收敛发散
  • RSI:相对强弱指数
python
# 示例:复杂表达式
fields = [
    "Ref($close, 1) / $close - 1",  # 1日收益率
    "Mean($close, 5) / $close - 1",  # 5日均值收益率
    "Std($close, 10) / Mean($close, 10)",  # 变异系数
    "Rank($close) / len($close)",  # 价格排名
    "$close > Ref($close, 1)",  # 是否上涨
]
💡
提示

表达式语法非常灵活,支持嵌套和组合。可以构建复杂的 Alpha 因子。

🗄️
数据框架实战要点
  • 存储优化:
    • 使用二进制格式(.bin)加速读取
    • ExpressionCache缓存计算结果
    • DatasetCache缓存完整数据集
  • 数据质量:
    • 检查缺失值比例(>30%需修复)
    • 检查价格连续性(异常跳变)
    • 检查复权处理
  • 性能对比:
    • HDF5: 184.4s(单核)
    • MySQL: 365.3s(单核)
    • Qlib+Cache: 7.4s(单核),4.2s(64核)

🔧 自定义数据源集成

python
# 集成自定义数据源(如Tushare、AKShare)
import pandas as pd
from qlib.data import D

# 方案1:使用DataProvider接口
from qlib.data.base import BaseProvider

class CustomDataProvider(BaseProvider):
    def __init__(self, api_token):
        self.api_token = api_token
    
    def get_data(self, instruments, start_time, end_time):
        # 调用外部API获取数据
        df = self.fetch_from_api(instruments, start_time, end_time)
        # 转换为Qlib格式
        return self.to_qlib_format(df)

# 方案2:直接转换为Qlib格式
def convert_to_qlib(source_df):
    """
    将标准DataFrame转换为Qlib格式
    
    Parameters
    ----------
    source_df : pd.DataFrame
        columns = [datetime, instrument, open, high, low, close, volume]
    
    Returns
    -------
    pd.DataFrame
        Qlib标准格式
    """
    df = source_df.copy()
    
    # 重命名列
    df.columns = ['date', 'instrument', 'open', 'high', 
                  'low', 'close', 'volume']
    
    # 设置索引
    df = df.set_index(['date', 'instrument'])
    
    # 保存为Qlib格式
    df.to_pickle('custom_data.bin')
    
    return df

# 使用自定义数据
qlib.init(
    provider_uri='custom_data/',
    region=REG_CN,
    custom_data_provider=CustomDataProvider(api_token='your_token')
)

公式化 Alpha

公式化 Alpha 是指使用表达式语言定义的 Alpha 因子。这种方式简洁高效,是量化研究的核心工具。

Alpha 表达式

Alpha 表达式由运算符和数据组成:

python
# 动量因子
alpha1 = "($close - Ref($close, 20)) / Std($close, 20)"

# 反转因子
alpha2 = "-Rank($close) / len($close)"

# 波动因子
alpha3 = "($high - $low) / Mean($close, 10)"

Alpha 网格

Qlib 提供了 Alpha360 网格,包含大量预定义的 Alpha 因子:

python
from qlib.contrib.data.alpha import get_all_alpha

# 获取所有 Alpha 表达式
alpha_dict = get_all_alpha()

# 使用 Alpha
alpha_expr = alpha_dict['alpha036']
💡
提示

Alpha360 包含 360+ 个经典的 Alpha 因子,是量化研究的宝贵资源。

🎮

强化学习

Qlib 提供了完整的强化学习框架,支持多种 RL 算法和交易环境。

RL 框架组件

  • Environment:交易环境,模拟真实交易
  • Agent:智能体,学习交易策略
  • Reward:奖励函数,定义优化目标
  • Trainer:训练器,协调训练过程

使用示例

python
from qlib.contrib.evaluate import backtest
from qlib.contrib.strategy.rl_strategy import TwinFilterStrategy

# 配置 RL 工作流
config = {
    "env": {
        "class": "qlib.contribute.simulator.ExchangeSimulator",
        "module_path": "qlib.contribute.simulator",
    },
    "agent": {
        "class": "qlib.rl.agent.Agent",
        "module_path": "qlib.rl.agent",
    },
}

# 运行 RL 训练
portfolio_result, indicator_result = backtest(strategy, exchange)
⚠️
注意

强化学习训练计算密集,需要较长时间和大量资源。建议先使用监督学习模型建立基线。

🎮
强化学习实战指南(基于社区经验)
  • 算法选择:
    • PPO - 适合连续动作空间(订单执行、仓位调整)
    • DQN - 适合离散动作空间(买入/卖出/持有)
    • A3C/A2C - 多线程并行训练
  • 奖励设计:
    • 使用Sharpe Ratio作为奖励,平衡收益和风险
    • 加入交易成本惩罚,避免过度交易
    • 考虑最大回撤惩罚,控制下行风险
  • 训练技巧:
    • 从简单环境开始(单资产→多资产)
    • 使用Curriculum Learning逐步增加难度
    • 定期保存checkpoint,防止训练崩溃
    • 监控训练曲线,及时发现不收敛
  • 常见问题:
    • 不收敛 → 检查奖励函数设计、调整学习率
    • 过拟合 → 增加环境随机性、使用正则化
    • 训练缓慢 → 考虑并行采样、优化经验回放

🔥 实战案例:PPO订单执行策略

基于Vadim's Blog的高频交易实战案例:

python
# PPO订单执行策略(简化版)
from qlib.rl import RLOrderExecPolicy
from qlib.contrib.strategy import TopkDropoutStrategy

# 配置RL策略
rl_config = {
    "class": "RLOrderExecPolicy",
    "module_path": "qlib.rl.order_execution",
    "kwargs": {
        "observation_space": 30,      # 状态维度(价格、成交量、订单簿等)
        "action_space": 10,          # 动作空间(10个离散动作)
        "freq": "1min",                # 1分钟级别决策
        "total_steps": 10000,          # 训练步数
        "reward_scaler": 1e4,           # 奖励缩放因子
    }
}

# 使用RL策略作为执行器
executor_config = {
    "class": "NestedExecutor",
    "kwargs": {
        "outer_strategy": TopkDropoutStrategy,
        "inner_executor": rl_config
    }
}

# 关键要点:
# 1. 外层策略决定买哪些股票(日频)
# 2. 内层RL策略决定如何拆单执行(分钟级)
# 3. 奖励函数考虑滑点、成交速度、交易成本

⚡ 嵌套决策框架(Nested Execution)

Qlib独特的多层决策架构:

  • 外层(日频): 选股、配置权重(TopkDropout、等权等)
  • 内层(高频): 订单拆分、执行时机选择(RL策略、TWAP、VWAP)
  • 优势:
    • 联合优化选股和执行
    • 考虑真实交易成本和滑点
    • 支持分钟级甚至秒级决策
⚠️
实战注意

高频交易对数据延迟、系统性能、网络速度要求极高。回测成功≠实盘可行,务必充分考虑实际环境限制。

🌐

在线服务

Qlib 支持模型在线部署和实时预测,方便将研究成果应用于生产环境。

模型部署

保存模型

python
# 训练完成后保存模型
model.save("my_model.pkl")

加载模型

python
# 加载已保存的模型
model.load("my_model.pkl")

在线预测

python
# 获取最新数据
latest_data = D.features(instruments, fields)

# 执行预测
predictions = model.predict(latest_data)
💡
提示

在线服务需要定期更新模型和数据,建议建立自动化流程。

🚀
在线服务生产部署指南
  • 架构设计:
    • 模型训练(离线)→ 模型仓库 → 在线推理服务
    • 数据更新 → 特征计算 → 模型预测 → 交易信号
    • 使用Redis缓存热点数据和预测结果
  • 监控告警:
    • 模型性能衰减监控(IC下降>10%告警)
    • 数据质量监控(缺失率、异常值)
    • 服务健康监控(延迟、错误率)
  • 模型更新:
    • 定期重训练(周度/月度)
    • 增量训练(新数据加入)
    • A/B测试验证新模型

🔧 部署架构示例

text
# 生产环境架构
┌─────────────────────────────────────────────────────┐
│                   Data Layer                         │
│  ├─ Market Data (实时行情)                           │
│  ├─ Fundamental Data (财务数据)                      │
│  └─ Alternative Data (替代数据)                      │
└──────────────────┬──────────────────────────────────┘
                   │
        ┌──────────▼──────────┐
        │  Feature Engine     │ (计算特征)
        │  - 特征计算         │
        │  - 数据清洗         │
        │  - 特征缓存         │
        └──────────┬──────────┘
                   │
        ┌──────────▼──────────┐
        │  Model Service      │ (模型推理)
        │  - 模型加载         │
        │  - 批量预测         │
        │  - 结果缓存         │
        └──────────┬──────────┘
                   │
        ┌──────────▼──────────┐
        │  Signal Generator   │ (生成信号)
        │  - 风险控制         │
        │  - 组合优化         │
        │  - 订单生成         │
        └──────────┬──────────┘
                   │
        ┌──────────▼──────────┐
        │  Execution Engine   │ (执行交易)
        │  - 订单路由         │
        │  - 滑点控制         │
        │  - 仓位管理         │
        └─────────────────────┘

⚡ 性能优化建议

  • 特征预计算: 提前计算并缓存常用特征
  • 批量预测: 避免单次预测,批量处理提升吞吐量
  • 模型量化: INT8量化减少内存占用,加速推理
  • 异步处理: 数据更新、特征计算、模型预测异步执行
  • 负载均衡: 多实例部署,水平扩展
⚠️
生产注意

在线服务需要考虑数据延迟、系统稳定性、异常处理、回滚机制等。建议充分测试后再上线。

📊

实验管理

Qlib 提供了完善的实验管理功能,帮助用户跟踪和比较不同实验。

MLflow 集成

Qlib 默认使用 MLflow 作为实验管理器:

python
import qlib
from qlib.workflow.expm import MLflowExpManager

# 初始化 Qlib 并配置 MLflow
qlib.init(
    provider_uri=provider_uri,
    region=REG_CN,
    exp_manager={
        "class": "MLflowExpManager",
        "module_path": "qlib.workflow.expm",
        kwargs: {
            "uri": "mlruns",  # MLflow 跟径
            "default_exp_name": "qlib_experiment",
        }
    }
)

记录指标

python
# 训练完成后,指标会自动记录到 MLflow
# 也可以手动记录
with mlflow.start_run():
    mlflow.log_metric("sharpe", 1.5)
    mlflow.log_metric("max_drawdown", -0.08)

比较实验

💡
提示

使用 MLflow UI 可视化实验结果:mlflow ui

🛠️

自定义模型

用户可以通过继承模型基类来创建自定义模型,实现特定的预测逻辑。

模型基类

所有 Qlib 模型都继承自 Model 基类:

python
from qlib.contrib.model.pytorch_nn import DNNModelPytorch
from qlib.contrib.model.base import Model
from qlib.data.dataset import DatasetH

class CustomModel(DNNModelPytorch):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    
    def fit(self, dataset: DatasetH):
        # 自定义训练逻辑
        super().fit(dataset)
    
    def predict(self, dataset: DatasetH):
        # 自定义预测逻辑
        return super().predict(dataset)

模型配置

在 YAML 中配置自定义模型:

yaml
model:
  class: "path.to.CustomModel"
  module_path: "path.to.module"
  kwargs:
    dnn_layers: [128, 64, 32]
    dropout: 0.2
⚠️
注意

自定义模型需要实现 fitpredict 方法,并确保与 Qlib 数据集接口兼容。

📚

API 参考

Qlib 提供了丰富的 API,涵盖数据处理、模型训练、策略执行等各个方面。

核心 API

qlib.init

  • 功能:初始化 Qlib
  • 参数:provider_uri, region, redis_host, redis_port 等

D.features

  • 功能:获取特征数据
  • 参数:instruments, fields, start_time, end_time, freq

D.calendar

  • 功能:获取交易日历
  • 参数:start_time, end_time, freq

D.instruments

  • 功能:获取股票池
  • 参数:market, filter_pipe

完整 API 文档

请访问 Qlib 官方文档 获取完整的 API 参考。

💡
提示

大多数 API 都支持灵活的参数配置和数据过滤,建议详细阅读文档以充分利用这些功能。

🤝

贡献指南

我们欢迎社区贡献!无论是 Bug 报告、功能建议还是代码贡献,都非常感谢。

报告问题

  • 在 GitHub Issues 中搜索现有问题
  • 创建新 Issue,详细描述问题
  • 提供复现代码和环境信息

提交代码

贡献流程

  1. Fork Qlib 仓库
  2. 创建特性分支(git checkout -b feature/AmazingFeature
  3. 提交更改(git commit -m 'Add some AmazingFeature'
  4. 推送分支(git push origin feature/AmazingFeature
  5. 创建 Pull Request

代码规范

  • 遵循 PEP 8 代码风格
  • 添加单元测试
  • 更新相关文档
  • 确保所有测试通过

开发指南

💡
提示

任何大小的贡献都是有价值的。帮助改进文档、修复 Bug 或添加新功能,都是对社区的贡献!

许可证

通过贡献代码,您同意您的贡献将根据 MIT 许可证 进行许可。

高频交易实战要点(基于Vadim's Blog)
  • 数据需求:
    • 分钟级数据(1min、5min)
    • 订单簿数据(LOB)- 逐笔数据
    • 使用Arctic或MongoDB高效存储
  • 实时性要求:
    • 数据延迟 < 100ms
    • 模型推理 < 10ms
    • 订单发送 < 50ms
  • 过拟合风险:
    • 日内噪声极多,容易过拟合
    • 使用Walk-Forward验证
    • 严格控制模型复杂度
  • 成本考量:
    • 高频交易成本占比极大
    • 必须精确建模滑点和手续费
    • 收益微薄,需要规模效应

🔧 高频数据准备

bash
# 导入订单簿数据到Qlib
cd examples/orderbook_data

# 初始化数据库(Arctic或MongoDB)
python create_dataset.py initialize_library

# 导入数据
python create_dataset.py import_data \
    --source_dir /path/to/lob_data \
    --freq 1min \
    --backend arctic

# 数据格式要求:
# - datetime: timestamp
# - instrument: 股票代码
# - bid/ask: 买卖价格
# - bid_vol/ask_vol: 买卖量

📊 高频特征示例

python
# 高频特征工程(订单簿数据)
from qlib.data import D

# 1. 买卖价差(Spread)
spread = "($ask - $bid) / (($ask + $bid) / 2)"

# 2. 订单簿失衡(Imbalance)
imbalance = "($bid_vol - $ask_vol) / ($bid_vol + $ask_vol)"

# 3. 中点价格变动
midpoint_move = "Ref(($bid + $ask) / 2, 1) / Ref(($bid + $ask) / 2, 0) - 1"

# 4. 加权平均价格(VWAP)
vwap = "Mean(($bid * $ask_vol + $ask * $bid_vol) / ($bid_vol + $ask_vol), 60)"

# 5. 波动率(Realized Volatility)
realized_vol = "Std(Ref($close, 1) / Ref($close, 0) - 1, 60)"

features = [spread, imbalance, midpoint_move, vwap, realized_vol]
df = D.features(instruments='csi300', fields=features, freq='1min')
📈

评估与结果分析

Qlib 提供了强大的分析和可视化工具,帮助用户评估投资组合表现并分析结果。

图形化报告

Qlib 支持多种图形化报告类型:

  • analysis_position.report_graph - 投资组合报告图表
  • analysis_position.score_ic_graph - IC(信息系数)分析图
  • analysis_position.cumulative_return_graph - 累计收益图
  • analysis_position.risk_analysis_graph - 风险分析图
  • analysis_position.rank_label_graph - 排名标签图
  • analysis_model.model_performance_graph - 模型性能图

使用示例

python
import qlib.contrib.report as qcr

# 查看所有支持的报告
print(qcr.GRAPH_NAME_LIST)

# 生成投资组合报告
qcr.analysis_position.report_graph(
    pred=prediction,
    return_array=returns,
    **config
)

关键指标说明

  • IC (Information Coefficient):预测值与真实值的相关系数
  • Rank IC:预测值与真实值的秩相关系数
  • 最大回撤:投资组合价值的最大下跌幅度
  • 信息比率:超额收益与跟踪误差的比值
  • 换手率:投资组合持仓的变化频率
💡
提示

所有累计收益指标通过求和计算,避免了指标随时间指数级偏差。

高频交易框架

Qlib 提供了嵌套决策执行框架,支持多层级联合交易的回测和研究。

设计理念

日频交易(如投资组合管理)和日内交易(如订单执行)通常是分开研究的。为了获得两者联合的交易表现,需要在一个框架中考虑它们的相互作用。

框架架构

嵌套决策执行框架包含:

  • Trading Agent:包含数据处理、预测模型和决策生成器
  • Execution Environment:执行交易决策并返回结果
  • 嵌套结构:粗粒度决策可以细分为细粒度决策

应用场景

  • 日频订单在日内细分为多个小订单执行
  • 组合管理策略与订单执行策略的联合优化
  • 多时间尺度策略的协同
python
# 嵌套决策执行示例
from qlib.contrib.strategy.hf_trading import NestedStrategy

# 配置多层决策
strategy = NestedStrategy(
    outer_freq='day',
    inner_freq='5min',
)
💡
提示

高频交易的优化可以结合 QlibRL 强化学习框架实现。

📋

任务管理

任务管理模块提供了一套完整的流程,包括任务生成、存储、训练和收集,支持自动化批量实验。

完整流程

  1. 任务生成:基于模板生成多个任务
  2. 任务存储:存储到 MongoDB 数据库
  3. 任务训练:自动执行训练任务
  4. 任务收集:收集和分析训练结果

任务生成

TaskGen 用于根据模板生成不同的任务:

python
from qlib.workflow.task.gen import RollingGen

# 生成滚动窗口任务
task_gen = RollingGen(
    step=60,  # 60天滚动
    task_template=task_config
)
tasks = task_gen.generate(task_config)

任务存储

使用 MongoDB 存储和管理任务:

python
from qlib.workflow.task.manage import TaskManager

# 配置 MongoDB
task_manager = TaskManager(task_pool='my_tasks')

# 插入任务
task_manager.insert_task(task_def)

任务状态

  • WAITING:等待训练
  • RUNNING:正在训练
  • PART_DONE:部分完成
  • DONE:全部完成
⚠️
注意

使用任务管理需要先配置 MongoDB 数据库。

🗄️

Point-in-Time 数据库

Point-in-Time (PIT) 数据库解决了历史回测中的数据泄露问题,确保在任何历史时间点获取正确版本的数据。

为什么需要 PIT?

在金融数据(特别是财务报告)中,同一条数据可能被多次修正。如果在历史回测中只使用最新版本,会导致数据泄露,影响回测结果的准确性。

数据格式

每个特征包含 4 列:

  • date:声明发布日期
  • period:声明周期(季度或年度)
  • value:数值
  • _next:下一个匹配记录的字节索引

文件结构

text
XXX_q.data   # 季度数据
XXX_a.data   # 年度数据
XXX_q.index  # 索引文件(加速查询)

数据准备

Qlib 提供了爬虫和转换器帮助下载和转换数据:

bash
# 参考 scripts/data_collector/pit/README.md
python scripts/data_collector/pit/crawler.py
python scripts/data_collector/pit/converter.py
💡
提示

PIT 数据库目前支持季度和年度频率,适用于大多数市场的财务数据。

👨‍💻

开发者指南

本节面向希望参与 Qlib 开发的贡献者,介绍代码规范和开发流程。

文档字符串规范

请使用 Numpydoc 风格的文档字符串:

python
def predict(self, dataset):
    """
    预测数据集。

    Parameters
    ----------
    dataset : Dataset
        要预测的数据集

    Returns
    -------
    prediction : pd.DataFrame
        预测结果
    """
    pass

代码格式检查

Qlib 使用以下工具检查代码质量:

Black(代码格式化)

bash
pip install black
python -m black . -l 120

Pylint(代码风格)

bash
# 忽略特定错误
return -ICLoss()(pred, target, index)  # pylint: disable=E1130

Flake8(代码检查)

bash
flake8 --ignore E501,F541,E402,E741 qlib

Pre-commit

Qlib 集成了 pre-commit,自动格式化代码:

bash
pip install -e .[dev]
pre-commit install

可编辑安装

开发者可以使用可编辑模式安装,直接反映代码更改:

bash
pip install -e ".[dev]"
💡
提示

提交 PR 时,CI 会自动运行代码检查。请确保所有检查通过。

🎛️

元控制器

元控制器提供了对任务、数据集和模型的更高层抽象,支持更灵活的实验管理。

Meta Task

MetaTask 允许动态配置任务:

  • 根据运行时条件修改任务
  • 支持任务依赖和调度
  • 自动管理任务生命周期

Meta Dataset

MetaTaskDataset 提供数据集的元视图:

  • 动态特征选择
  • 数据增强策略
  • 多数据源融合

Meta Model

元模型支持模型的组合和优化:

  • General Meta Model:通用元模型接口
  • Meta Task Model:任务级别元模型
  • Meta Guide Model:指导式元模型
python
from qlib.model.meta.task import MetaTask

# 创建元任务
meta_task = MetaTask(
    task_list=task_config_list,
    dataset=meta_dataset
)
💡
提示

元控制器特别适合大规模超参数调优和多策略实验。

🖥️

在线/离线服务器模式

Qlib-Server 提供了服务器模式,支持客户端-服务器架构的数据访问。

Qlib-Server

Qlib-Server 充当数据提供者,客户端可以通过网络访问数据:

  • 优势:数据集中管理,避免重复存储
  • 适用场景:多机器共享数据、分布式训练
  • 协议:基于 python-socketio 的通信

启动服务器

bash
python -m qlib.server.server

客户端连接

客户端需要正确配置连接参数:

python
from qlib.config import C

C["server_config"] = {
    "host": "localhost",
    "port": 9999,
}

qlib.init(...)
⚠️
注意

确保 python-socketio 和 python-engineio 版本兼容。推荐使用 python-socketio==5.3.0。

💾

序列化

Qlib 提供了序列化功能,支持模型和对象的保存与加载。

可序列化类

继承自 Serializable 的类可以被序列化:

python
from qlib.utils.serial import Serializable

class MyModel(Serializable):
    def __init__(self):
        super().__init__()
        self.model = None

保存和加载

python
# 保存模型
model.save("my_model.pkl")

# 加载模型
model.load("my_model.pkl")

支持格式

  • Pickle 格式(.pkl)
  • Pytorch 模型格式(.pt)
  • JSON 配置
💡
提示

序列化后可以轻松分享模型或在其他环境中部署。

🎬

多媒体资源与学术论文

本章节汇总了Qlib相关的视频教程、架构图表、学术论文等资源,帮助您通过多种方式深入学习。

📹 视频教程

官方视频

▶️

Qlib - AI量化投资平台介绍

GitHub官方介绍视频 | 2024年8月

▶️
▶️

Deeper Dive into Qlib

深入探讨 | 2025年1月

▶️

推荐学习路径

  1. 先看官方介绍视频,了解Qlib基本概念
  2. 学习本文档的"快速开始"章节
  3. 运行官方示例代码(examples/workflow_by_code.ipynb)
  4. 观看深度解析视频,理解高级功能
  5. 阅读学术论文,深入理解原理

📊 架构图与流程图

Qlib整体架构

┌─────────────────────────────────────────────────────────────────┐
│                         用户接口层 (Interface)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │  Python API  │  │  CLI (qrun)  │  │   Notebook   │             │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘             │
└─────────┼─────────────────┼─────────────────┼──────────────────────┘
          │                 │                 │
┌─────────┼─────────────────┼─────────────────┼──────────────────────┐
│         ▼                 ▼                 ▼                      │
│                    工作流层 (Workflow Layer)                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │ Information  │→→│   Forecast   │→→│   Portfolio  │             │
│  │  Extractor   │  │    Model     │  │   Generator  │             │
│  └──────────────┘  └──────────────┘  └──────┬───────┘             │
│                                                 │                    │
│  ┌──────────────┐  ┌──────────────┐  ┌────────▼───────┐             │
│  │   Executor   │←←│     Meta     │←←│   Analyzer    │             │
│  │   Strategy   │  │  Controller  │  │   & Report    │             │
│  └──────────────┘  └──────────────┘  └────────────────┘             │
└─────────┬────────────────────────────────────────────────────────────┘
          │
┌─────────┼────────────────────────────────────────────────────────────┐
│         ▼                                                          │
│                   组件层 (Component Layer)                             │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │   Data       │  │    Model     │  │  Strategy    │             │
│  │  Framework   │  │   Library    │  │   Library    │             │
│  └──────────────┘  └──────────────┘  └──────────────┘             │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │   Backtest   │  │     RL       │  │    Online    │             │
│  │   Engine     │  │  Framework   │  │   Serving    │             │
│  └──────────────┘  └──────────────┘  └──────────────┘             │
└─────────┬────────────────────────────────────────────────────────────┘
          │
┌─────────┼────────────────────────────────────────────────────────────┐
│         ▼                                                          │
│                   基础设施层 (Infrastructure)                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │   Data       │  │  Expression  │  │  Model       │             │
│  │   Server     │  │    Engine    │  │  Trainer     │             │
│  └──────────────┘  └──────────────┘  └──────────────┘             │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │  Experiment  │  │    Cache     │  │  Parallel    │             │
│  │  Manager     │  │    System    │  │   Computing  │             │
│  └──────────────┘  └──────────────┘  └──────────────┘             │
└─────────────────────────────────────────────────────────────────────┘
                    

Qlib工作流程

┌─────────────┐
│   原始数据    │  (OHLCV, 财务数据, 替代数据)
└──────┬──────┘
       │
       ▼
┌─────────────────────────────────────┐
│      数据预处理                      │
│  • 数据清洗                        │
│  • 复权处理                        │
│  • 特征工程                        │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│      表达式引擎                      │
│  • 计算 Alpha 因子                  │
│  • 生成特征 (158/360个)             │
│  • 标签定义                         │
└──────┬──────────────────────────────┘
       │
       ├─────────────────┬─────────────────┐
       ▼                 ▼                 ▼
┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│  训练集     │  │  验证集     │  │  测试集     │
│ (2008-2014) │  │ (2015-2016) │  │ (2017-2020) │
└──────┬──────┘  └──────┬──────┘  └──────┬──────┘
       │                 │                 │
       ▼                 ▼                 ▼
┌─────────────────────────────────────────────┐
│              模型训练                         │
│  • LightGBM / XGBoost / CatBoost            │
│  • MLP / LSTM / GRU / Transformer            │
│  • RL Agent (PPO, DQN)                      │
└──────┬────────────────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────────────┐
│              预测生成                         │
│  • 输出: 每只股票的预测分数                 │
│  • 排序: 选择 top-k 股票                    │
└──────┬────────────────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────────────┐
│            投资组合策略                       │
│  • TopkDropoutStrategy                      │
│  • 风险控制                                 │
│  • 仓位分配                                 │
└──────┬────────────────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────────────┐
│            回测引擎                           │
│  • 交易成本建模                             │
│  • 滑点模拟                                 │
│  • 绩效计算                                 │
└──────┬────────────────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────────────┐
│            分析与报告                         │
│  • IC, Rank IC, ICIR                       │
│  • 累计收益曲线                             │
│  • 最大回撤                                 │
│  • 换手率分析                               │
└─────────────────────────────────────────────┘
                    

嵌套决策框架(高频交易)

┌────────────────────────────────────────────────────────────────────┐
│                     日频策略 (Daily Strategy)                       │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  • 基于日频数据选股(如:CSI300成分股)                    │      │
│  │  • 使用Alpha158因子预测                                    │      │
│  │  • LightGBM模型训练                                         │      │
│  │  • 输出:目标仓位(如:买入100股AAPL)                      │      │
│  └──────────────────────────┬───────────────────────────────────┘      │
└───────────────────────────┼──────────────────────────────────────────┘
                            │
                            ▼
┌────────────────────────────────────────────────────────────────────┐
│                  执行器 (Executor - 嵌套层)                          │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  接收目标仓位 → 拆分为多个子订单                            │      │
│  │                                                          │      │
│  │  示例:目标买入100股AAPL                                  │      │
│  │    • 开盘拍卖:30股                                       │      │
│  │    • 盘中:40股(RL动态决定)                             │      │
│  │    • 收盘前:30股                                         │      │
│  └──────────────────────────┬───────────────────────────────────┘      │
└───────────────────────────┼──────────────────────────────────────────┘
                            │
                            ▼
┌────────────────────────────────────────────────────────────────────┐
│              分钟级RL策略 (Intraday RL Policy)                      │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  状态空间 (State):                                       │      │
│  │    • 当前持仓                                             │      │
│  │    • 实时价格(1分钟K线)                                 │      │
│  │    • 订单簿深度(买卖价差)                               │      │
│  │    • 历史成交量                                           │      │
│  │                                                          │      │
│  │  动作空间 (Action):                                       │      │
│  │    • 买入 N 股                                            │      │
│  │    • 卖出 N 股                                            │      │
│  │    • 等待(不交易)                                        │      │
│  │                                                          │      │
│  │  奖励函数 (Reward):                                       │      │
│  │    • -滑点成本                                            │      │
│  │    • +完成交易奖励                                         │      │
│  │    • -偏离VWAP惩罚                                         │      │
│  └──────────────────────────┬───────────────────────────────────┘      │
└───────────────────────────┼──────────────────────────────────────────┘
                            │
                            ▼
┌────────────────────────────────────────────────────────────────────┐
│                   环境模拟器 (Simulator)                             │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  • 提供实时数据流                                         │      │
│  │  • 模拟订单成交(部分成交、滑点)                          │      │
│  │  • 计算交易成本                                           │      │
│  │  • 反馈奖励信号                                           │      │
│  └───────────────────────────────────────────────────────────┘      │
└────────────────────────────────────────────────────────────────────┘
                    

📚 学术论文

核心论文

🏆 Qlib: An AI-oriented Quantitative Investment Platform

作者: Xiao Yang, Weiqing Liu, Dong Zhou, Jiang Bian, Tie-Yan Liu

发表: arXiv preprint arXiv:2009.11189 (2020)

链接: arXiv | PDF | Microsoft Research

内容: Qlib的原始论文,介绍了平台的设计理念、架构和核心功能。

相关研究

📊 Quantitative Trading using Deep Q Learning

作者: Soumyadip Sarkar

发表: arXiv:2304.06037 (2023)

链接: arXiv

内容: 使用深度Q学习进行量化交易的方法研究。

🤖 R&D-Agent-Quant: Multi-Agent Framework for Data-Centric Optimization

发表: arXiv:2505.15155 (2025)

链接: arXiv

内容: 多智能体框架,用于数据驱动的因子和模型联合优化。

🌊 Deep Reinforcement Learning for Quantitative Trading

发表: arXiv:2312.15730 (2023)

链接: arXiv

内容: 深度强化学习在量化交易中的应用综述。

📈 From Deep Learning to LLMs: AI in Quantitative Investment Survey

发表: arXiv:2503.21422 (2025)

链接: arXiv

内容: 从深度学习到大语言模型,AI在量化投资中的应用调查。

引用建议

📝
如何在论文中引用Qlib
bibtex
@article{yang2020qlib,
  title={Qlib: An AI-oriented Quantitative Investment Platform},
  author={Yang, Xiao and Liu, Weiqing and Zhou, Dong and Bian, Jiang and Liu, Tie-Yan},
  journal={arXiv preprint arXiv:2009.11189},
  year={2020}
}

🔗 相关资源链接

⚠️
资源更新

Qlib项目持续更新中,建议关注GitHub仓库获取最新功能和改进。学术论文和视频资源也在不断增加。

🌐

实战资源与最佳实践

本章节汇总了来自全网的 Qlib 实战资源、教程、博客和最佳实践,帮助您快速掌握 Qlib 并应用于实际量化投资研究。

📚 官方资源

🔥 高质量博客教程

1. Vadim's Blog - Qlib实战系列

深入浅出的Qlib实战教程,包含LightGBM和PyTorch MLP的完整案例:

💡
亮点

这些博客提供了完整的YAML配置示例、详细的日志解读、性能优化建议以及实际运行中遇到的问题解决方案。

2. 中文社区资源

3. 综合指南

⚡ 实战最佳实践

数据准备

bash
# 下载社区维护的A股数据集
wget https://github.com/chenditc/investment_data/releases/latest/download/qlib_bin.tar.gz
mkdir -p ~/.qlib/qlib_data/cn_data
tar -zxvf qlib_bin.tar.gz -C ~/.qlib/qlib_data/cn_data

关键性能指标解读

指标 含义 优秀标准
IC (Information Coefficient) 预测值与真实值的相关系数 > 0.05
Rank IC 秩相关系数 > 0.05
ICIR 信息比率(IC均值/IC标准差) > 0.5
Annualized Return 年化收益率 > 基准 + 5%
Max Drawdown 最大回撤 < -10%

🎓 学习路线建议

🎯
初学者路线
  1. 阅读本文档的"快速开始"章节
  2. 运行 examples/workflow_by_code.ipynb 熟悉基本流程
  3. 尝试修改 workflow 配置文件中的参数
  4. 阅读 Vadim 的博客教程了解实际应用
  5. 参考官方 examples 中的各种模型示例
🚀
进阶路线
  1. 深入理解数据框架和表达式引擎
  2. 学习自定义模型和策略
  3. 研究强化学习框架
  4. 探索高频交易和Point-in-Time数据库
  5. 部署在线服务和自动化流程

💻 社区与支持

🔧 常见问题实战

问题1: 数据质量检查

bash
# 检查数据健康度
python scripts/check_data_health.py check-data \
    --qlib_dir ~/.qlib/qlib_data/cn_data \
    --missing_threshold 300 \
    --price_step 0.5

问题2: 训练加速技巧

  • 启用 DatasetCache 优化I/O
  • 使用 Dask 并行计算
  • 配置 ExpressionCache 复用特征
  • 利用GPU加速深度学习模型

问题3: 模型性能优化

  • 特征工程: 添加宏观经济数据、情绪分析、替代数据
  • 模型选择: LightGBM欠拟合时尝试PyTorch神经网络
  • 超参数调优: 使用贝叶斯优化、网格搜索、随机搜索
  • 正则化: L1/L2惩罚或Dropout防止过拟合
  • 并行化: 设置 num_threads 利用多核
⚠️
实战建议

即使预测信号很强,高换手率也会侵蚀利润。在实盘部署前务必关注交易成本、滑点等实际因素。

📊 性能基准参考

根据社区案例,以下是典型策略的回测表现:

策略 年化收益(无成本) 年化收益(含成本) 最大回撤
LightGBM + Alpha158 17.83% 12.90% -9.11%
TopkDropout策略 15-20% 10-15% -8% 至 -12%

🔮 未来发展方向

  • 端到端学习: BPQP框架
  • 云原生部署: AWS/Azure集成
  • 替代数据: 新闻情绪、卫星数据处理
  • 可解释性: SHAP值、特征可视化
  • RD-Agent: LLM驱动的自动化因子发现和模型优化

常见问题

1. RuntimeError: multiprocessing 相关错误

错误信息:

text
RuntimeError: An attempt has been made to start a new process 
before the current process has finished its bootstrapping phase.

原因:Windows 下的多进程限制

解决方案:在主模块中使用 if __name__ == '__main__':

python
import qlib
from qlib.data import D

if __name__ == "__main__":
    qlib.init()
    df = D.features(instruments, fields, ...)

2. Redis lock 错误

错误信息:

text
QlibCacheException: redis lock key exists.

解决方案:清除 Redis 键

bash
$ redis-cli
> select 1
> flushdb

3. ModuleNotFoundError: qlib.data._libs.rolling

原因:在仓库目录中导入 qlib 而未编译

解决方案:

  • PyCharm:运行 python setup.py build_ext --inplace
  • 命令行:确保不在项目目录中运行脚本

4. python-socketio 版本兼容问题

错误信息:BadNamespaceError: / is not a connected namespace

解决方案:确保版本兼容

bash
pip install -U python-socketio==5.3.0 python-engineio==3.13.2

5. 换手率过高

可能原因:

  • 预测信号变化过于频繁
  • Topk 策略 k 值设置不当
  • 未考虑交易成本

优化建议:

  • 使用信号平滑技术
  • 调整换手率限制参数
  • 增加交易成本到优化目标
💡
提示

更多问题请访问 GitHub Issues 或查看 完整 FAQ