1. 课程导入

课程导入 学习卡片

欢迎进入《Qlib组合策略与回测实战》。在正式动手写策略之前,我们需要先建立一张清晰的“地图”:这门课要解决什么问题、Qlib在其中扮演什么角色、组合策略与回测之间的边界在哪里,以及我们将沿着怎样的路线从零走到可复现的实战结果。本章不涉及复杂代码,但会决定你后续三十章的学习效率。

一、学习目标:从“会跑示例”到“能交付策略”

很多量化初学者能跑通Qlib官方示例,却无法独立完成一个可解释、可复现、可评估的组合策略。本课程的目标不是让你记住若干API,而是让你具备一条完整的工程化能力链。具体而言,完成本课程后,你应当能够:

  • 理解Qlib的数据组织方式:掌握表达式引擎、数据集划分、特征与标签的构造逻辑,知道数据从哪里来、如何被策略消费。
  • 独立构建组合策略:能够基于打分、排序、筛选、权重分配四步法,写出可运行的选股与组合构建流程。
  • 正确执行回测:理解回测配置、交易成本、调仓频率、基准与评估指标之间的关系,避免“回测很美、实盘很惨”。
  • 完成策略复盘与迭代:能够阅读回测报告,定位收益来源与风险暴露,并据此调整策略参数或逻辑。

一句话概括:本课程培养的是“能把想法变成可回测组合策略,并能解释结果”的实战能力,而不是单纯的工具使用能力。

二、核心概念:组合策略与回测的四个关键词

在Qlib语境下,组合策略与回测涉及大量术语。为了避免后续章节反复解释,这里先锁定四个最核心的概念。

概念 含义 在Qlib中的典型载体 常见误解
因子/特征 用于描述股票某方面属性的数值,如动量、估值、波动率 表达式引擎、特征数据集 把因子直接等同于策略
打分与排序 将多个因子合成为每只股票的预期收益分数,并排序 模型输出、打分函数 认为排序越复杂越好
组合构建 根据排序结果决定买什么、买多少、何时调仓 策略类、权重分配逻辑 忽略仓位约束与交易成本
回测 在历史数据上模拟策略交易并计算绩效 回测执行器、评估指标 把回测收益当作未来收益

这四个概念构成一条链:特征 → 打分 → 组合 → 回测。任何一环出错,最终结果都不可信。后续章节会逐一展开,但你现在就要建立“链条思维”,而不是孤立地看待某个模型或某个指标。

三、整体框架:Qlib组合策略的工程结构

Qlib的设计哲学是“数据、模型、策略、回测”分层解耦。理解这个分层,你就能知道每一章在整体中的位置。一个典型的Qlib组合策略工程包含以下层次:

  1. 数据层:负责原始行情、财务数据、特征数据的存储与读取,核心是表达式引擎和数据集划分。
  2. 模型层:负责从特征到打分的映射,可以是线性模型、树模型或深度学习模型。
  3. 策略层:负责将打分转化为持仓,包括选股规则、权重分配、调仓逻辑。
  4. 回测层:负责模拟交易、计算收益、生成报告,并处理交易成本与滑点。
  5. 评估层:负责计算年化收益、最大回撤、夏普比率、信息比率等指标,并支持归因分析。

学习建议:不要试图一次性记住所有API。先理解每一层的职责与输入输出,再在实战中逐步填充细节。框架清晰后,API只是查文档的问题。

为了更直观地展示这条链路,下面用一张简图概括从数据到评估的完整流程。图中每个节点都对应后续章节的核心内容。

数据层 行情/财务/特征 模型层 特征→打分 策略层 选股/权重/调仓 回测层 模拟交易/成本 评估层 指标/归因 Qlib组合策略与回测的完整链路 每一层都有明确的输入输出,层与层之间通过标准接口衔接

四、实战路线图:三十章如何推进

本课程共三十章,整体遵循“先建认知、再搭环境、后做策略、终复盘”的节奏。你可以把它理解为四个阶段:

  • 第一阶段(第1-6章)认知与环境:建立组合策略与回测的基本认知,完成Qlib环境搭建、数据准备与第一个可运行示例。
  • 第二阶段(第7-16章)策略构建:深入特征工程、打分模型、选股规则、权重分配与调仓逻辑,逐步搭建完整策略。
  • 第三阶段(第17-24章)回测与评估:配置回测参数、处理交易成本、阅读回测报告、计算风险指标并进行归因分析。
  • 第四阶段(第25-30章)实战与复盘:完成端到端实战项目,进行策略复盘、参数敏感性分析与常见误区总结。

这条路线图的核心逻辑是:先让策略跑起来,再让策略跑得对,最后让策略跑得稳。很多学习者卡在“跑起来”之后就直接追求高收益,忽略了“跑得对”和“跑得稳”,最终得到不可复现的结果。本课程会反复强调可复现性与可解释性。

五、常见误区与复盘:开始之前先避坑

在正式进入实战之前,先列出初学者最容易踩的五个坑。这些误区会在后续章节中反复出现,提前建立警惕意识,能显著减少无效调试时间。

  1. 把回测当预测:回测是历史模拟,不是未来保证。任何策略都有失效可能,回测的作用是验证逻辑与评估风险,而不是承诺收益。
  2. 忽略交易成本:高频调仓策略在扣除手续费与滑点后,收益可能由正转负。回测配置中必须显式设置成本参数。
  3. 数据泄露:使用未来信息构造特征或标签,会导致回测虚高。Qlib的数据集划分机制正是为了避免这一问题。
  4. 过拟合参数:在历史数据上反复调参直到收益曲线完美,往往意味着策略只记住了噪声。需要保留样本外验证。
  5. 只看收益不看风险:最大回撤、波动率、换手率同样重要。一个高收益高回撤的策略,实盘中很难坚持执行。

特别提醒:本课程所有示例仅用于教学,不构成任何投资建议。回测结果受数据质量、参数选择、市场环境等多重因素影响,请勿直接将课程示例用于实盘交易。

最后,用一段伪代码概括本课程要完成的端到端流程。你不需要现在看懂每一行,但可以感受一下从数据到评估的完整闭环:

# 伪代码:Qlib组合策略端到端流程
data = load_qlib_data(market="csi300", start="2018-01-01", end="2023-12-31")
features = build_features(data, expressions=["Ref($close,20)/$close-1", "($close-$open)/$open"])
model = train_model(features, label="Ref($close,-5)/$close-1")
scores = model.predict(features)
portfolio = build_portfolio(scores, top_k=50, weight="equal")
backtest = run_backtest(portfolio, cost=0.001, freq="weekly")
report = evaluate(backtest, metrics=["annual_return", "max_drawdown", "sharpe"])
print(report)