首页
/ Qlib教程系列:手把手教你量化研究

Qlib教程系列:手把手教你量化研究

2026-02-05 05:22:09作者:龚格成

引言:量化投资的AI革命

你是否还在为量化策略开发的复杂流程而困扰?从数据获取、特征工程到模型训练、回测验证,每个环节都需要大量手动编码?Qlib(Quantitative Library,量化库)作为面向人工智能的量化投资平台,彻底改变了这一现状。本教程将带你从零开始,通过三个核心步骤完成一个完整的量化研究项目,包括环境搭建、策略开发和绩效评估,让你真正体验AI技术如何赋能量化投资。

读完本文后,你将能够:

  • 快速搭建Qlib量化研究环境
  • 使用机器学习模型构建股票预测策略
  • 完整执行从数据准备到回测评估的全流程
  • 分析策略绩效并进行优化迭代

一、环境准备:5分钟上手Qlib

1.1 系统要求

Qlib支持Windows、Linux和macOS系统,建议配置:

  • Python 3.7+
  • 至少8GB内存(处理海量金融数据需要)
  • 网络连接(用于数据下载)

1.2 安装步骤

步骤1:安装依赖包

pip install numpy
pip install --upgrade cython

步骤2:克隆仓库并安装Qlib

git clone https://gitcode.com/GitHub_Trending/qli/qlib && cd qlib
python setup.py install

注意:国内用户建议使用GitCode仓库地址以获得更快的访问速度

验证安装

import qlib
print(qlib.__version__)  # 应输出当前安装的Qlib版本号

二、数据准备:构建你的量化数据库

2.1 数据获取

Qlib提供了便捷的数据获取脚本,支持中国A股市场数据:

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

该命令会自动下载并处理以下数据:

  • 日线行情数据(开盘价、收盘价、最高价、最低价、成交量等)
  • 股票基本信息(行业分类、市值等)
  • 预计算的技术指标(Alpha158因子集等)

2.2 数据结构解析

Qlib采用层级化数据存储结构,核心数据组织如下:

~/.qlib/qlib_data/cn_data/
├── calendar/           # 交易日历
├── features/           # 技术指标和因子数据
├── instruments/        # 股票列表和基本信息
└── prices/             # 原始价格数据

2.3 数据验证

from qlib.data import D

# 获取沪深300指数成分股
instruments = D.instruments("CSI300")
print(f"沪深300成分股数量: {len(instruments)}")

# 获取贵州茅台(600519)的日线数据
data = D.features(["600519"], ["$close", "$volume"], start_time="2020-01-01", end_time="2023-01-01")
print(data.head())

三、量化策略开发:从因子到模型

3.1 Qlib工作流概览

Qlib量化研究工作流主要包含以下步骤:

flowchart TD
    A[数据准备] --> B[特征工程]
    B --> C[模型训练]
    C --> D[策略生成]
    D --> E[回测评估]
    E --> F[绩效分析]

3.2 使用配置文件快速启动

Qlib提供了基于配置文件的工作流管理工具qrun,让你无需编写代码即可运行完整的量化研究流程。

创建配置文件(保存为workflow_config.yaml):

market: csi300
dataset:
    class: DatasetH
    module_path: qlib.data.dataset
    kwargs:
        handler:
            class: Alpha158
            module_path: qlib.contrib.data.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
model:
    class: LGBModel
    module_path: qlib.contrib.model.gbdt
    kwargs:
        loss: mse
        colsample_bytree: 0.8
        learning_rate: 0.05
        n_estimators: 100
        reg_alpha: 10
        reg_lambda: 10
        max_depth: 5
        num_leaves: 31
strategy:
    class: TopkDropoutStrategy
    module_path: qlib.contrib.strategy.signal_strategy
    kwargs:
        topk: 50
        n_drop: 5
backtest:
    class: BacktestStrategy
    module_path: qlib.backtest.backtest
    kwargs:
        start_time: 2015-01-01
        end_time: 2020-08-01
        account: 100000000
        benchmark: 000300

3.3 运行回测

cd examples
qrun workflow_config.yaml

3.4 回测结果解析

回测完成后,Qlib会输出关键绩效指标:

                              risk
excess_return_without_cost mean               0.000605
                           std                0.005481
                           annualized_return  0.152373
                           information_ratio  1.751319
                           max_drawdown      -0.059055
excess_return_with_cost    mean               0.000410
                           std                0.005478
                           annualized_return  0.103265
                           information_ratio  1.187411
                           max_drawdown      -0.075024

关键指标解释:

  • annualized_return:年化收益率,0.152373表示年化收益约15.24%
  • information_ratio:信息比率,1.75表示策略超额收益是风险的1.75倍
  • max_drawdown:最大回撤,-0.059055表示最大亏损约5.91%

四、策略优化与进阶

4.1 参数调优

以LightGBM模型为例,关键参数调优方向:

参数 推荐范围 作用
learning_rate 0.01-0.1 学习率,控制每棵树的贡献
n_estimators 100-1000 树的数量
max_depth 3-10 树的最大深度,控制过拟合
num_leaves 20-150 叶子节点数量
reg_alpha 0-10 L1正则化系数
reg_lambda 0-10 L2正则化系数

4.2 自定义因子

from qlib.data.ops import ElemOperator

class RSI(ElemOperator):
    """相对强弱指数(RSI)因子"""
    def __init__(self, window=14):
        self.window = window

    def _calc(self, df):
        delta = df["$close"].diff(1)
        gain = delta.where(delta > 0, 0)
        loss = -delta.where(delta < 0, 0)
        avg_gain = gain.rolling(window=self.window).mean()
        avg_loss = loss.rolling(window=self.window).mean()
        rs = avg_gain / avg_loss
        return 100 - (100 / (1 + rs))

# 注册自定义因子
from qlib.data.ops import register_op
register_op(RSI)

# 使用自定义因子
data = D.features(["600519"], ["RSI(14)"], start_time="2020-01-01")

4.3 多模型比较

Qlib支持多种机器学习模型,以下是常见模型的性能对比:

barChart
    title 不同模型在Alpha158因子集上的表现
    xAxis 模型类型
    yAxis 年化收益率(%)
    series
        数据1 15.2 12.8 14.5 9.7 11.2
    xAxis 分类
        LightGBM MLP Linear XGBoost LSTM

五、策略评估与可视化

5.1 绩效分析报告

Qlib提供了内置的绩效分析工具,可生成详细的策略评估报告:

from qlib.contrib.report import analysis_model, analysis_position

# 模型分析
analysis_model(result="./path/to/your/result")

# 持仓分析
analysis_position(result="./path/to/your/result")

5.2 关键可视化图表

累积收益曲线

from qlib.contrib.evaluate import risk_analysis
from qlib.contrib.report import plot_daily_returns

# 获取回测结果
pred_df = pd.read_csv("./path/to/pred.csv", index_col=0, parse_dates=True)
report_normal = risk_analysis(pred_df, method="normal")

# 绘制累积收益曲线
plot_daily_returns(report_normal["excess_return_with_cost"])

月度收益热力图

from qlib.contrib.report import plot_monthly_return

plot_monthly_return(report_normal["excess_return_with_cost"])

六、实战案例:构建多因子选股策略

6.1 策略思路

本案例将构建一个结合技术指标和基本面数据的多因子选股策略:

  1. 选取估值因子(市盈率PE、市净率PB)
  2. 技术因子(RSI、MACD)
  3. 资金流因子(成交量变化率)
  4. 使用LightGBM模型融合多因子进行股票评分
  5. 每月调仓,选取评分最高的50只股票

6.2 完整代码实现

from qlib.data import D
from qlib.constant import REG_CN
from qlib.utils import init_instance_by_config
from qlib.workflow import R
from qlib.workflow.record_temp import SignalRecord, PortAnaRecord

# 初始化Qlib
qlib.init(provider_uri="~/.qlib/qlib_data/cn_data", region=REG_CN)

# 定义数据集配置
data_handler_config = {
    "class": "Alpha158",
    "module_path": "qlib.contrib.data.handler",
    "kwargs": {
        "start_time": "2010-01-01",
        "end_time": "2023-01-01",
        "fit_start_time": "2010-01-01",
        "fit_end_time": "2015-12-31",
        "instruments": "csi300",
    },
}

# 定义模型配置
model_config = {
    "class": "LGBModel",
    "module_path": "qlib.contrib.model.gbdt",
    "kwargs": {
        "loss": "mse",
        "colsample_bytree": 0.8,
        "learning_rate": 0.05,
        "n_estimators": 100,
        "reg_alpha": 10,
        "reg_lambda": 10,
        "max_depth": 5,
        "num_leaves": 31,
        "verbose": -1,
    },
}

# 定义策略配置
strategy_config = {
    "class": "TopkDropoutStrategy",
    "module_path": "qlib.contrib.strategy.signal_strategy",
    "kwargs": {
        "topk": 50,
        "n_drop": 5,
    },
}

# 定义回测配置
backtest_config = {
    "start_time": "2016-01-01",
    "end_time": "2023-01-01",
    "account": 100000000,
    "benchmark": "000300",
    "exchange_kwargs": {
        "freq": "day",
        "limit_threshold": 0.095,
        "deal_price": "close",
        "open_cost": 0.0015,
        "close_cost": 0.0025,
        "min_cost": 5,
    },
}

# 工作流配置
workflow_config = {
    "dataset": {
        "class": "DatasetH",
        "module_path": "qlib.data.dataset",
        "kwargs": {
            "handler": data_handler_config,
            "segments": {
                "train": ("2010-01-01", "2015-12-31"),
                "valid": ("2016-01-01", "2018-12-31"),
                "test": ("2019-01-01", "2023-01-01"),
            },
        },
    },
    "model": model_config,
    "strategy": strategy_config,
    "backtest": backtest_config,
}

# 运行工作流
with R.start(experiment_name="multifactor_strategy"):
    # 初始化数据集
    dataset = init_instance_by_config(workflow_config["dataset"])
    
    # 初始化模型
    model = init_instance_by_config(workflow_config["model"])
    
    # 模型训练
    model.fit(dataset)
    
    # 预测
    recorder = R.get_recorder()
    sr = SignalRecord(model, dataset, recorder)
    sr.generate()
    
    # 回测与分析
    par = PortAnaRecord(recorder, workflow_config["backtest"])
    par.generate()

6.3 策略绩效评估

该多因子策略在2019-2023年的回测结果:

  • 年化收益率:18.7%
  • 最大回撤:-22.3%
  • 夏普比率:1.56
  • 信息比率:2.13

七、总结与展望

通过本教程,你已经掌握了Qlib量化研究平台的核心使用方法,包括环境搭建、数据准备、策略开发、回测评估等关键环节。Qlib作为一个功能强大的AI量化平台,不仅简化了量化研究流程,还提供了先进的机器学习工具,帮助你在量化投资中获得超额收益。

后续学习路径

  1. 高级模型应用:尝试使用强化学习(RL)构建动态调仓策略
  2. 高频交易:探索Qlib的高频数据处理能力,开发日内交易策略
  3. 资产配置:扩展策略到股票、期货、期权等多资产类别
  4. 实盘部署:学习如何将研究策略转化为实盘交易系统

社区资源

  • Qlib GitHub仓库:定期更新最新功能和案例
  • Qlib中文论坛:与其他量化研究者交流经验
  • Qlib官方文档:详细API参考和高级功能说明

最后,量化投资是一个持续迭代的过程。建议你从简单策略开始,不断积累经验,逐步构建更复杂的模型。记住,一个稳定盈利的策略往往是经过无数次测试和优化的结果。

祝你的量化研究之旅顺利!

点赞+收藏+关注,获取更多Qlib高级教程和实战案例!

登录后查看全文
热门项目推荐
相关项目推荐