Skip to content

About

Quantitative Research Handbook

Topics

Resources

Stars

226 stars

Watchers

1 watching

Forks

Repository files navigation

量化研究手册 (Quantitative Research Handbook)

专业量化投研与工程实战体系
从数据工程、因子挖掘、机器学习到指增实盘闭环

Python Version uv VitePress Polars and DuckDB cvxpy Tests


📌 项目概览

《量化研究手册》是一套面向专业量化投研与工业级工程实现教程。全套教程涵盖 8 大核心模块、31 讲深度专题,配备完整的交互式网页文档,以及 31 个开箱即用的独立 Python 实战脚本与全套离线单元测试。

本项目面向具备 Python 编程基础、渴望系统建立买方/私募机构级量化投资与全流程工程闭环的研究员与开发者,彻底打通“数据清洗 $\rightarrow$ PIT 治理 $\rightarrow$ 特征工程 $\rightarrow$ 因子评估 $\rightarrow$ 机器学习 $\rightarrow$ 风险模型 $\rightarrow$ 组合优化 $\rightarrow$ 全真撮合 $\rightarrow$ 归因监控”的完整链路。

Important

教学与实盘边界声明:本项目所有示例均配备自包含的合成教学数据与契约测试,旨在验证工程架构逻辑与数学算法正确性。测试通过不代表真实交易收益证明,合成数据亦不代表真实市场行情。实盘接入前需另行对接合规行情柜台、交易接口与历史数据源。


🌟 核心特色与设计原则

flowchart LR
    A["01 认知与基础设施\n(A股规则与现代栈)"] --> B["02 数据工程与防泄漏\n(PIT财报与动态Universe)"]
    B --> C["03 特征与高频低频化\n(价量/基本面/微观OFI)"]
    C --> D["04 工业级因子评价\n(IC/IR/单调性/正交化)"]
    D --> E["05 截面与时序 ML\n(Purged CV/LightGBM)"]
    E --> F["06 Barra与组合优化\n(风险模型/cvxpy约束)"]
    F --> G["07 全真回测与交易摩擦\n(涨跌停限制/冲击成本)"]
    G --> H["08 归因监控与实盘落地\n(归因/风险控制/恢复演练)"]
Loading
  1. 立足 A 股微观制度与实盘约束
    • 深入建模 A 股特有的 T+1 机制、涨跌停板(±10% / ±20% / ±30%)限制与不可成交逻辑、停牌与退市处理、红利送转与除权除息四时点账本,以及印花税与市场冲击成本,拒绝脱离实盘的“玩具回测”。
  2. 严密的 Point-in-Time (PIT) 数据治理架构
    • 严格区分信息的生效时间(effective_date)与策略可见时刻(available_at),支持财务报告多次更正历史回溯,从数据根源彻底消除前瞻偏差(Lookahead Bias)与幸存者偏差(Survivorship Bias)。
  3. 拥抱现代高性能量化工程栈
    • 全面采用 Polars(向量化表达式与高速并行)与 DuckDB(极速嵌入式分析)替代传统低效的 Pandas 单线程计算,支持千万级高频与截面数据秒级聚合。
  4. 买方级量化机器学习与凸优化组合构建
    • 严格落实 Purged / Embargo K-Fold 时序交叉验证;基于 RankReturnCalibrator 校准收益预测;构建 Barra 多因子结构化风险模型;使用 cvxpy 实施年化跟踪误差(TE)硬上限与换手冲击惩罚的凸优化求解。
  5. 100% 离线自包含可复现验证
    • 31 讲全部具备独立可执行源码及合成测试夹具(fixtures.py、common.py),无需购买商业数据即可一键执行全套自动化回归测试(npm run test:examples)。

🗺️ 课程全景体系与实战源码映射

本课程包含 8 大模块、31 讲,每讲均配套独立 Python 源码与契约验证:

模块 讲次 核心专题(教程链接) 配套 Python 运行入口 依赖 Extra 核心验证重点
M1 工程与认知 01 A 股量化生态与盈利模式全景 examples.lecture_01_comprehensive_cost_engine 基础 收益来源、对冲基差与成本敏感性测算
02 量化回测的“四大死因”与防范心法 examples.lecture_02_backtest_sanitizer 基础 前瞻偏差、幸存者偏差与 DSR 试验离散
03 告别缓慢传统栈:Polars + DuckDB examples.lecture_03_benchmark_massive 基础 百万行级基准测速与结果一致性校验
04 A 股多源数据接入与本地落库实战 examples.lecture_04_industrial_data_pipeline data (可选) 增量数据湖、原子替换写盘与接口防御
M2 数据工程与 PIT 05 行情数据复权与动态股票池构建 examples.lecture_05_dynamic_universe_builder 基础 后复权计算、上市天数过滤与动态股票池
06 Point-in-Time 财报无泄漏对齐 examples.lecture_06_pit_financial_engine 基础 财报披露时刻、修订版本选择与防未来对齐
07 行业分类演变与概念标签维护 examples.lecture_07_industry_engine 基础 行业分类版本变更、未知类别与概念事件
08 【实战】手写 A 股 PIT 检索引擎 examples.lecture_08_pit_engine_practice 基础 15:00 收盘截面查询与多表 PIT 综合装配
M3 特征与因子挖掘 09 经典量价因子体系与 Polars 加速 examples.lecture_09_price_volume_factors 基础 复权量价特征、窗口滚动与表达式向量化
10 基本面与分析师预期因子挖掘 examples.lecture_10_fundamental_factors 基础 杜邦拆解、单季同比与 TTM 财务指标构建
11 高频数据低频化特征工程(微观 OFI) examples.lecture_11_high_freq_to_low_freq 基础 订单失衡 OFI 三分支计算与日度截面聚合
12 因子预处理工业级四步法 examples.lecture_12_factor_preprocessing_pipeline 基础 去极值、标准化、缺失填充与 WLS 加权中性化
13 因子正交化与共线性消除 examples.lecture_13_factor_orthogonalization 基础 施密特/对称正交化、满秩截面与共线报错
M4 因子评估与验证 14 因子预测力核心指标(IC/Rank IC/ICIR) examples.lecture_14_factor_ic_metrics 基础 截面秩相关、时间序列 t 检验与 HAC 调整
15 分层回测与单调性检验 examples.lecture_15_quantile_and_monotonicity 基础 分位数多空对冲、单调性得分与最大回撤
16 因子换手率与衰减曲线(Alpha Decay) examples.lecture_16_turnover_and_alpha_decay 基础 因子自相关、边际 IC 半衰期与调仓情景估算
17 【实战避坑】假因子的“打脸”排查案例 examples.lecture_17_fake_alpha_forensics 基础 市值暴露寄生、涨跌停伪胜率与未成交现金
M5 金融机器学习 18 金融时序交叉验证(CV)正确切法 examples.lecture_18_financial_cv_purging_embargo 基础 Purged & Embargo 时序切分、双侧防泄漏
19 表格级梯度提升树(LightGBM)实战 examples.lecture_19_lightgbm_catboost_ranking ml 标签成熟边界控制与 LambdaRank 截面排序
20 特征重要性与可解释性(SHAP) examples.lecture_20_shap_interpretability ml TreeSHAP 特征贡献度分解与加和自洽校验
21 时序深度学习模型简析与边界 examples.lecture_21_deep_learning_boundaries deep CNN/GRU 3D 时序张量训练与过拟合边界
22 【实战】截面打分到全自动选股流水线 examples.lecture_22_ml_stock_selection_pipeline ml 样本外预测、收益校准器与目标权重生成
M6 风险模型与优化 23 Barra 结构化风险模型数学解构 examples.lecture_23_barra_risk_model_architecture 基础 WLS 因子收益估计、EWMA 协方差与特异风险收缩
24 凸优化求解器(cvxpy)实战 examples.lecture_24_cvxpy_portfolio_optimization optimization 行业/风格中性约束与年化跟踪误差(TE)二次约束
25 换手率约束与交易成本惩罚项引入 examples.lecture_25_turnover_constraints_and_costs optimization AUM/ADV 非线性冲击成本、换手软硬约束求解
26 风险平价(Risk Parity)与 HRP examples.lecture_26_risk_parity_and_hrp 基础 等风险贡献(ERC)、分层聚类风险平价(HRP)
M7 全真回测与执行 27 A 股回测引擎:向量化 vs 事件驱动 examples.lecture_27_vectorized_vs_event_driven_backtest 基础 次日开盘撮合、现金/应收/股份复式对账
28 真实交易摩擦全真模拟 examples.lecture_28_transaction_friction_and_market_impact 基础 佣金、过户费、印花税梯级计算与单边容量模型
29 A 股特殊撮合规则代码级实现 examples.lecture_29_matching_rules_limits_suspensions 基础 一字板限制、流动性占比、分红送转四时点演化
M8 绩效归因与监控 30 业绩归因实战:Beta 还是纯 Alpha? examples.lecture_30_performance_attribution_brinson_barra 基础 单期 Brinson 资产配置与 Barra 因子收益闭合归因
31 实盘运行监控与风控预警看板 examples.lecture_31_live_monitoring_risk_dashboard 基础 相对净值跟踪、PSI 特征漂移、三级熔断滞回

🚀 快速上手指南

1. 前置环境要求

  • Python:>= 3.11, < 3.14
  • Node.js:>= 18
  • 包管理器推荐:uv(现代极速 Python 包管理工具)与 npm

2. 本地启动 VitePress 交互式文档站点

# 1. 安装前端文档依赖
npm ci

# 2. 启动本地开发服务 (支持热更新,默认访问 http://localhost:5173)
npm run dev

# 3. 构建静态站点产物
npm run build

# 4. 本地预览构建产物
npm run preview

3. 配置 Python 运行环境并执行示例

本项目推荐使用 uv 进行可复现的环境锁管理(依赖已完全锁定于 uv.lock)。

# 基础依赖同步 (涵盖 25 个核心讲次)
uv sync --locked

# 全量依赖同步 (包含机器学习、深度学习与凸优化求解器)
uv sync --locked --extra ml --extra deep --extra optimization

运行单个实战示例模块(必须在项目根目录下以 -m 模块模式运行):

# 运行基础示例(如第 8 讲:手写 A 股 PIT 检索引擎)
uv run --locked python -m examples.lecture_08_pit_engine_practice

# 运行机器学习选股流水线(第 22 讲,需 --extra ml)
uv run --locked --extra ml python -m examples.lecture_22_ml_stock_selection_pipeline

# 运行组合换手约束与凸优化(第 25 讲,需 --extra optimization)
uv run --locked --extra optimization python -m examples.lecture_25_turnover_constraints_and_costs

# 运行全真事件驱动回测引擎(第 27 讲)
uv run --locked python -m examples.lecture_27_vectorized_vs_event_driven_backtest

# 运行实盘监控看板与熔断预警(第 31 讲)
uv run --locked python -m examples.lecture_31_live_monitoring_risk_dashboard

Note

真实数据下载(可选):如需联网下载真实历史样本数据并写入本地数据湖 data_lake/,可使用 --extra data:

uv sync --locked --extra data
uv run --locked --extra data python -m examples.lecture_04_industrial_data_pipeline --fetch

4. 运行全量自动化测试套件

项目配备了完整的契约与数学逻辑单元测试,所有测试均使用内建合成数据,无需联网:

# 执行全套回归测试
npm run test:examples

# 或直接调用 uv 执行 unittest:
uv run --locked --extra ml --extra deep --extra optimization python -m unittest discover -s tests -v

测试套件分类说明:

  • tests/test_tutorial.py:覆盖模块 01–02(数据湖原子写盘、前瞻偏差诊断、PIT 历史多版本检索与动态 Universe)。
  • tests/test_factor_modules.py:覆盖模块 03–04(量价微观 OFI、WLS 加权正交、共线性拦截、IC/IR 统计、单调性与未成交现金排查)。
  • tests/test_ml_risk_modules.py:覆盖模块 05–06(Purged CV 时间隔离、SHAP 贡献加和、Barra 风险模型、TE 约束凸优化求解)。
  • tests/test_execution_monitoring.py:覆盖模块 07–08(复式记账守恒、开盘不可成交限制、红利送转四时点演化、Brinson 归因闭合与风控滞回熔断)。

📐 核心数据契约规范 (Point-in-Time Schema)

在模块 02(第 4–8 讲)中,项目定义了标准的工业级共享数据契约。后续所有特征挖掘、模型训练及回测撮合均严格遵照此契约执行:

1. 时间与时区标准

  • 日期字段:统一采用 pl.Date。
  • 高频与事件时间戳:必须统一采用 Asia/Shanghai 本地无时区 pl.Datetime。外部带时区时间必须先转换为上海时间再剔除时区,严禁直接丢弃 UTC 时区标识。
  • 数值与状态:价格、成交量为非负浮点或整型,状态一律采用布尔值 Boolean。

2. 七大核心表结构定义

表名 必需字段 (Primary Fields) 字段语义与数据治理约束
交易日历 (trading_calendar) trade_date 经核验的交易所开市日,覆盖所有测试样本的上市与交易生命周期。
股票档案 (stock_universe) symbol, list_date, delist_date 必须包含历史退市股票(防幸存者偏差);退市日为排除边界,未退市填 Date 空值。
行情表 (daily_quote) symbol, trade_date, open, high, low, close, close_hfq, volume, turnover OHLC 为原始未复权价;close_hfq 单独保存;成交量为股、成交额为元;唯一键 (symbol, trade_date)。
状态事件 (status_event) symbol, effective_date, available_at, is_st, is_delisting 包含历史 ST/退市整理期标记。追加式写入,支持历史追溯更正。
财报版本 (financial_pit) symbol, report_period, available_at, roe, net_profit_yoy 保留原始首次披露与后续历次更正版本;禁止同一次查询发生跨版本污染。
行业事件 (industry_event) symbol, taxonomy, industry_name, effective_date, available_at 记录行业分类变更历史;未映射股票单列为 ind_未知,严禁归入“综合”或随意填充。
基准快照 (index_weight) symbol, asof_date, weight, available_at 完整批次记录;weight 范围为 $[0, 1]$;观测时间不能倒填为编制日期。

3. 关键字段语义与业务约束

  • effective_date vs available_at:
    • effective_date 为状态在现实中实际生效的业务日期。
    • available_at 为该信息经由上游数据源处理后、量化系统真正可知并可下单的客观物理时间。二者决不可混同。
  • 上市交易天数规则:
    • 上市交易天数按交易所开市日逐日计数,包含停牌期间,绝对不等于已下载行情记录行数。日历缺失立即报错。
  • 动态池候选资格 (in_universe):
    • 仅表示该标的在此截面具备选股候选资格,不代表持仓被剔除后可以立即按最新价变现。
  • 收盘截面 15:00 假设:
    • PIT 引擎模拟盘后选股,假定 15:00 日线行情已形成。实际生产环境应计入数据入库延迟,所生成的信号最早于次日开盘时段执行。

🛡️ 各阶段实现边界与工程规范

1. 模块 01–02:数据工程与 PIT 检索引擎

  • 版本选择规则:财报查询时先按指定时刻过滤 available_at <= query_time,再取每个报告期当前可见的最新更正版本。更新历史年报不会导致当前季度财务指标退回旧期。
  • 行情文件存储:按 (symbol, trade_date) 保证主键唯一,写盘前严格检查有限值与 $Low \le Open, Close \le High$ 关系;年度 Parquet 文件采用临时文件原子替换(Atomic Rename),避免写入中断损坏数据。

2. 模块 03–04:特征工程与因子评估排查

  • 收益率口径:计算跨日收益必须使用后复权价格 close_hfq。财务同比增速不应冒充超预期 SUE 指标。
  • 高频微观结构:第 11 讲 OFI 严格采用本地无时区时间戳,不支持跨交易日平滑衔接;定时快照(Snapshot)不等于逐笔委托事件(Tick by Tick)。
  • 正交化与中性化:第 12 讲使用 NumPy 求解加权最小二乘(WLS),验证残差与约束向量的加权正交;第 13 讲正交化前对常数列与共线输入显式报错,杜绝虚假独立因子。
  • 评估隔离:第 14–15 讲标签必须由调用方按实际信号产生与成交时点对齐;第 17 讲排查伪 Alpha 时,未成交委托必须保留为现金,杜绝“一字涨停虚构暴利”。

3. 模块 05–06:金融机器学习与组合优化

  • 时间隔离:训练集与测试集必须施加 Purged 与 Embargo 机制;严禁使用未来信息拟合数据预处理变换器(如 Scaler/Imputer)。
  • 收益校准:树模型的排序输出(LambdaRank 分数)不能直接作为预期收益率输入给优化器,必须通过 RankReturnCalibrator 拟合成熟历史样本外的持有期超额收益。
  • Barra 与优化求解:
    • 风险模型接收 $(T, N, K)$ 历史期初暴露面板与独立的当前期初暴露。
    • 优化器使用 Clarabel 凸优化求解器处理年化跟踪误差(TE)二次硬约束,求解后自动校验对偶残差与可行性。
  • 进程隔离注意事项:

    [!WARNING] 在已训练 LightGBM 的同一 Python 进程中执行 PyTorch 深度学习模型可能引发底层 OpenMP / 卷积线程池阻塞。第 21 讲与深度模型测试建议在独立进程中调用。

4. 模块 07–08:回测撮合、交易摩擦与归因监控

  • 撮合纪律:次日开盘撮合严禁读取当日最高价、最低价或收盘价。成交数量受当日成交量占比上限(ADV Limit)硬约束,未成交订单继续保留于持仓或资金中,当日成交股份严格受 T+1 锁定。
  • 红利送转四时点演化:股权登记日收盘锁定权益,除权除息日确认应收红利与锁定送股,红利发放日与送股上市日分别释放可用资金与可用股份,实现账本幂等。
  • 归因闭合与风控滞回:第 30 讲归因显式纳入现金留存与交易手续费,确保组合收益与归因分项严格等式闭合;第 31 讲风控监控实行滞回熔断机制,触发三级最高预警后禁止新开买单,且必须经显式条件复位并记录审批引用。

📂 项目目录结构

quant-handbook/
├── .vitepress/              # VitePress 站点配置、Mermaid 插件与课程目录定义
│   ├── config.mts           # 站点全局配置与导航
│   └── curriculum.ts        # 8 大模块 31 讲大纲数据源
├── examples/                # 31 讲独立 Python 源码与公共工具库
│   ├── common.py            # 数据契约核验与通用断言
│   ├── fixtures.py          # 离线合成数据集生成器
│   ├── factor_utils.py      # 因子计算与加权中性化工具
│   ├── ml_utils.py          # 机器学习验证与收益校准工具
│   ├── portfolio_utils.py   # 组合优化与风险归因工具
│   ├── lecture_01_*.py      # 第 1 讲配套可运行示例
│   └── ...                  # 第 2 ~ 31 讲对应示例源码
├── module_01/ ~ module_08/  # 31 讲详细教程 Markdown 正文
├── tests/                   # 自动化回归测试套件 (100% 离线通过)
│   ├── test_tutorial.py             # 模块 01–02 单元测试
│   ├── test_factor_modules.py       # 模块 03–04 单元测试
│   ├── test_ml_risk_modules.py      # 模块 05–06 单元测试
│   └── test_execution_monitoring.py # 模块 07–08 单元测试
├── index.md                 # 网站主页
├── learning_path.md         # 学习路径、入门自测与逐章掌握标准
├── resources.md             # 公开权威书目、大学课程与官方规则导读
├── syllabus.md              # 完整课程体系全景大纲
├── package.json             # 前端与全局测试脚本定义
├── pyproject.toml           # Python 项目依赖与 Extras 配置
└── uv.lock                  # 依赖精确锁定文件

📚 延伸指南与参考资料

站内核心文档指南

官方文档与开源生态


量化研究求真务实 · 严谨敬畏市场 · 构建稳健复利

About

Quantitative Research Handbook

Topics

Resources

Stars

226 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages