回测方法论 (Backtesting Methodology)
模块编号:第⑥模块
前置知识:机器学习基础、特征工程、树模型实战、深度学习模型
难度等级:⭐⭐⭐⭐
预计学习时间:7-9 小时
模块简介
回测(Backtesting)是量化投资中至关重要的一环。它用历史数据模拟交易过程,验证策略的有效性。但回测不仅仅是”写代码模拟交易”——更重要的是识别回测中的陷阱,避免被虚假的策略表现所欺骗。
💡 核心理念:回测的目的是发现策略的问题,而不是证明策略有效。一个诚实的回测应该让你对策略的局限性有清晰的认识。
学习目标
完成本模块后,你将能够:
- 理解回测的完整流程:从数据准备到绩效评估的各个环节
- 构建投资组合:掌握多种仓位分配方法(等权、IC加权、均值方差优化等)
- 建模交易成本:理解并计算佣金、印花税、滑点、冲击成本
- 评估策略表现:计算并解读各类绩效指标(Sharpe、最大回撤、换手率等)
- 识别回测陷阱:防范过拟合、前视偏差、幸存者偏差等常见问题
- 独立完成回测:用纯 Python 实现完整的端到端回测系统
回测在量化流程中的位置
┌─────────────────────────────────────────────────────────────────────┐
│ 量化投资完整流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 数据 │ → │ 研究 │ → │ 回测 │ → │ 实盘 │ │
│ │ 获取 │ │ 开发 │ │ 验证 │ │ 交易 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │
│ ↓ ↓ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 特征工程 │ │ 风险管理 │ │
│ │ 模型训练 │ │ 监控报警 │ │
│ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
↑ 本模块聚焦于此区域
回测承上启下:
- 向上:验证研究结果是否有效
- 向下:为实盘交易提供信心和参数
文件导航
| 文件 | 内容 | 预计时间 | 难度 |
|---|---|---|---|
| 01-回测理论 | 回测的基本概念、目的、流程,以及与实盘的关系 | 1小时 | ⭐⭐ |
| 02-投资组合构建 | 从信号到持仓:等权、Top-K、IC加权、均值方差优化等方法 | 1.5小时 | ⭐⭐⭐ |
| 03-交易成本模型 | 佣金、印花税、滑点、冲击成本的建模与计算 | 1小时 | ⭐⭐⭐ |
| 04-绩效评估指标 | 收益、风险、风险调整收益等各类指标的计算与解读 | 1.5小时 | ⭐⭐⭐ |
| 05-回测陷阱与防范 | 过拟合、前视偏差、幸存者偏差等七大陷阱及防范方法 | 1.5小时 | ⭐⭐⭐⭐ |
| 06-实战案例 | 完整的端到端回测项目,从数据生成到绩效报告 | 2.5小时 | ⭐⭐⭐⭐ |
总计:约 9 小时
推荐学习路径
起点
│
├→ 01-回测理论 ─────────────────────────────────┐
│ [建立基本概念] │
│ │
├→ 02-投资组合构建 ─────────────────────────────┤
│ [如何从信号到持仓] │
│ │ │
├→ 03-交易成本模型 ────────────┼→ 04-绩效评估指标 ─┐
│ [真实成本有多高] │ [如何评估表现] │
│ │ │
├→ 05-回测陷阱与防范 ────────┴→ 06-实战案例 ←───┘
│ [批判性思维] [综合应用]
│
└→ 终点:具备独立完成回测的能力
学习建议:
- 顺序学习:每个章节都建立在前一章基础上
- 动手实践:每看完一节,运行代码示例
- 批判思考:回测方法论的核心是”怀疑”——永远质疑回测结果
- 对照实盘:理解回测与实盘的差异,避免过度自信
为什么不使用 qlib/backtrader?
本模块所有代码使用纯 Python + pandas/numpy 实现,不引入专门的回测框架。原因如下:
- 理解底层原理:直接写代码能让你明白回测的每一个细节
- 灵活性:框架往往有特定假设,自己写可以完全定制
- 调试方便:出现问题时,你完全知道代码在做什么
- 通用技能:掌握 pandas/numPy 技能可迁移到任何场景
💡 在掌握本模块内容后,你可以:
- 用这些知识理解 qlib/backtrader 的设计
- 根据需要选择合适的框架
- 也可以继续用纯 Python 实现自己的回测系统
代码环境准备
# 安装必要的包
pip install numpy pandas scipy matplotlib empyrical
# empyrical 是专业的量化绩效计算库
# 如果安装失败,可以用纯 Python 实现(本模块会提供)本模块使用的包:
| 包名 | 用途 |
|---|---|
| numpy | 数值计算 |
| pandas | 数据处理 |
| scipy | 优化求解(均值方差) |
| matplotlib | 可视化 |
| empyrical | 绩效指标计算(可选) |
核心知识点预览
回测的五大支柱
┌────────────────────────────────────────────────────────────┐
│ 回测系统五大支柱 │
├────────────────────────────────────────────────────────────┤
│ │
│ 1. 数据质量 → 垃圾进,垃圾出(GIGO) │
│ │
│ 2. 组合构建 → 信号如何转化为仓位 │
│ │
│ 3. 成本模型 → 决定策略是否可行 │
│ │
│ 4. 绩效评估 → 全面评估风险收益 │
│ │
│ 5. 偏差控制 → 确保回测诚实可靠 │
│ │
└────────────────────────────────────────────────────────────┘
A股市场特殊注意事项
| 特性 | 说明 | 影响 |
|---|---|---|
| T+1 | 当日买入次日才能卖出 | 调仓延迟 |
| 印花税 | 卖出时 0.1% | 增加交易成本 |
| 涨跌停 | 单日 ±10%(创业板/科创板 ±20%) | 可能无法成交 |
| 停牌 | 股票暂停交易 | 组合中可能有”死”仓位 |
| ST股 | 风险警示股票 | 通常需要过滤 |
开始学习
准备好进入回测的世界了吗?记住:一个好的量化投资者,首先是回测的批判者。
补充资源
推荐阅读:
- 《主动投资组合管理》- Grinold & Kahn
- 《量化投资:策略与技术》- 丁鹏
- 《打开量化投资的黑箱》- Rishi K. Narang
在线资源:
- Quantopian Lectures(已停止更新,但内容经典)
- towardsdatascience.com 上的回测系列文章
版本信息
- 创建日期:2026-03-28
- 最后更新:2026-03-28
- 作者:mlqt 团队
- 许可:CC BY-NC-SA 4.0