使用 Qlib 进行量化投资

June 24, 2026 · View on GitHub

简介

Qlib 是微软开发的 AI 导向量化投资平台。它提供了数据处理、模型开发和交易策略实施的工具。

什么是 Qlib?

Qlib 是一个量化投资研究平台,将机器学习与金融数据分析相结合,用于开发交易策略。

特性描述
数据管理金融数据处理
模型训练ML 模型开发
策略回测测试交易策略
投资组合管理优化投资组合
风险分析评估风险指标

与其他方案的比较

特性QlibZiplineBacktrader
ML 集成原生有限有限
数据管理内置外部外部
云支持
中国市场
文档良好良好良好

安装

系统要求

要求最低推荐
Python3.7+3.9+
内存4 GB16+ GB
存储10 GB100+ GB
CPU2 核8+ 核

安装步骤

# 从 PyPI 安装
pip install pyqlib

# 或从源码安装
git clone https://github.com/microsoft/qlib.git
cd qlib
pip install -e ".[dev]"

数据准备

# 下载市场数据
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# 美国市场
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/us_data --region us

数据结构

市场数据

字段描述
open开盘价
high最高价
low最低价
close收盘价
volume成交量
factor调整因子

数据格式

格式描述
CSV逗号分隔值
HDF5层次数据格式
In-memoryPandas DataFrame

数据提供者

提供者描述
Local本地数据文件
Remote远程数据服务器
YahooYahoo Finance
Alpha VantageAlpha Vantage API

特征工程

内置特征

特征描述
Price基于价格的特征
Volume基于成交量的特征
Technical技术指标
Fundamental基本面数据
Custom用户自定义特征

技术指标

import qlib
from qlib.contrib.data.handler import Alpha158

# 初始化处理器
handler = Alpha158(
    instruments="csi300",
    start_time="2020-01-01",
    end_time="2023-12-31"
)

# 获取特征
features = handler.fetch()

Alpha158 特征

类别数量示例
KMID6价格动量
KLEN6价格范围
KSFT6价格偏移
KLOW12低价特征
OPEN12开盘价特征
HIGH12最高价特征
LOW12最低价特征
CLOSE12收盘价特征
VOLUME12成交量特征
RSV6相对强弱
ROLL12滚动特征
CORR12相关性特征
CORD12相关性差异
SUMP12正向求和特征
SUMN12负向求和特征
SUMD12求和差异特征
VMA6成交量均线
VSTD6成交量标准差
WVMA6加权成交量均线
VSUMP6成交量正向求和
VSUMN6成交量负向求和
VSUMD6成交量求和差异

自定义特征

from qlib.data.dataset import DatasetH

# 定义自定义特征
FEATURES = [
    "Ref($close, 1) / $close - 1",  # 1日收益
    "Ref($close, 5) / $close - 1",  # 5日收益
    "Mean($close, 10) / $close - 1",  # 均线比率
]

# 创建数据集
dataset = DatasetH(
    handler={
        "class": "Alpha158",
        "module_path": "qlib.contrib.data.handler",
        "kwargs": {
            "instruments": "csi300",
            "start_time": "2020-01-01",
            "end_time": "2023-12-31",
        },
    }
)

模型开发

内置模型

模型类型描述
LightGBM树模型梯度提升
XGBoost树模型梯度提升
CatBoost树模型梯度提升
Linear线性线性回归
LSTM深度学习长短期记忆
GRU深度学习门控循环单元
Transformer深度学习注意力模型

训练模型

import qlib
from qlib.contrib.model.gbdt import LGBModel

# 初始化模型
model = LGBModel(
    loss="mse",
    colsample_bytree=0.8879,
    learning_rate=0.0421,
    subsample=0.8789,
    lambda_l1=205.6999,
    lambda_l2=580.9768,
    max_depth=8,
    num_leaves=210,
    num_threads=20,
)

# 训练模型
model.fit(dataset)

模型配置

# LightGBM 参数
LGB_PARAMS = {
    "colsample_bytree": 0.8879,
    "learning_rate": 0.0421,
    "subsample": 0.8789,
    "lambda_l1": 205.6999,
    "lambda_l2": 580.9768,
    "max_depth": 8,
    "num_leaves": 210,
}

深度学习模型

from qlib.contrib.model.pytorch_lstm import LSTM

model = LSTM(
    d_feat=6,
    hidden_size=64,
    num_layers=2,
    dropout=0.0,
    lr=0.001,
)

策略开发

内置策略

策略描述
TopK选择前 K 只股票
WeightStrategy基于权重的分配
SignalStrategy基于信号的交易

TopK 策略

from qlib.contrib.strategy.signal_strategy import TopkDropoutStrategy

strategy = TopkDropoutStrategy(
    signal=predictions,
    topk=50,
    n_drop=5,
)

自定义策略

from qlib.contrib.strategy.signal_strategy import BaseSignalStrategy

class MyStrategy(BaseSignalStrategy):
    def __init__(self, signal, **kwargs):
        super().__init__(signal, **kwargs)
    
    def generate_target_weight_position(self, score):
        # 自定义权重计算
        weights = score / score.sum()
        return weights

回测

运行回测

from qlib.backtest import backtest

# 运行回测
report, metrics = backtest(
    start_time="2023-01-01",
    end_time="2023-12-31",
    strategy=strategy,
    executor={
        "class": "SimulatorExecutor",
        "module_path": "qlib.backtest.executor",
        "kwargs": {
            "time_per_step": "day",
            "generate_report": True,
        },
    }
)

回测指标

指标描述
Annual return年化收益率
Sharpe ratio夏普比率
Max drawdown最大回撤
Win rate胜率
Profit factor盈亏比

绩效分析

from qlib.contrib.report import analysis_model, analysis_position

# 分析持仓
analysis_position.report_graph(report)

# 分析模型
analysis_model.model_performance_graph(predictions)

投资组合管理

投资组合优化

from qlib.contrib.strategy.weight_strategy import WeightStrategyStrategy

strategy = WeightStrategyStrategy(
    signal=predictions,
    method="max_sharpe",
)

优化方法

方法描述
equal等权重
min_variance最小方差
max_sharpe最大夏普比率
risk_parity风险平价
black_littermanBlack-Litterman 模型

风险分析

风险指标

指标描述
Value at Risk潜在损失
Conditional VaR预期短缺
Beta市场敏感度
Alpha超额收益
Volatility价格波动率

风险分析代码

from qlib.contrib.eva import risk_analysis

# 分析风险
risk_metrics = risk_analysis(report)
print(risk_metrics)

数据管道

数据流

原始数据 → 处理 → 特征 → 模型 → 预测 → 策略 → 回测

数据处理

from qlib.data.dataset import DatasetH

# 使用处理器创建数据集
dataset = DatasetH(
    handler={
        "class": "Alpha158",
        "module_path": "qlib.contrib.data.handler",
        "kwargs": {
            "instruments": "csi300",
            "start_time": "2020-01-01",
            "end_time": "2023-12-31",
        },
    }
)

# 获取数据
data = dataset.prepare(
    segments={
        "train": ("2020-01-01", "2021-12-31"),
        "valid": ("2022-01-01", "2022-12-31"),
        "test": ("2023-01-01", "2023-12-31"),
    }
)

配置

Qlib 配置

import qlib
from qlib.config import REG_CN

qlib.init(
    provider_uri="~/.qlib/qlib_data/cn_data",
    region=REG_CN,
)

配置选项

选项描述
provider_uri数据目录
region市场区域
expression_cache缓存表达式
dataset_cache缓存数据集

高级功能

多模型集成

from qlib.contrib.ensemble import Ensemble

# 创建集成模型
ensemble = Ensemble(
    models=[model1, model2, model3],
    method="average",
)

超参数调优

from qlib.contrib.tuner import Tuner

tuner = Tuner(
    model=LGBModel,
    param_grid={
        "learning_rate": [0.01, 0.05, 0.1],
        "max_depth": [5, 8, 10],
    },
)

部署

实盘交易

from qlib.contrib.strategy.signal_strategy import TopkDropoutStrategy

# 创建实盘策略
strategy = TopkDropoutStrategy(
    signal=model.predict(live_data),
    topk=50,
    n_drop=5,
)

部署选项

选项描述
Paper trading模拟交易
Live trading实盘交易
Batch mode定时运行

最佳实践

开发流程

步骤描述
1. 数据准备和清洗数据
2. 特征特征工程
3. 模型训练和验证
4. 回测测试策略
5. 优化调参
6. 部署上线

常见陷阱

陷阱解决方案
过拟合使用交叉验证
前视偏差注意数据分割
幸存者偏差包含退市股票
交易成本包含真实成本

总结

组件用途
数据市场数据管理
特征技术指标
模型ML 模型训练
策略交易逻辑
回测策略测试
投资组合资产配置