专业量化投研与工程实战体系
从数据工程、因子挖掘、机器学习到指增实盘闭环
《量化研究手册》是一套面向专业量化投研与工业级工程实现教程。全套教程涵盖 8 大核心模块、31 讲深度专题,配备完整的交互式网页文档,以及 31 个开箱即用的独立 Python 实战脚本与全套离线单元测试。
本项目面向具备 Python 编程基础、渴望系统建立买方/私募机构级量化投资与全流程工程闭环的研究员与开发者,彻底打通“数据清洗
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(归因/风险控制/恢复演练)"]
- 立足 A 股微观制度与实盘约束
- 深入建模 A 股特有的 T+1 机制、涨跌停板(±10% / ±20% / ±30%)限制与不可成交逻辑、停牌与退市处理、红利送转与除权除息四时点账本,以及印花税与市场冲击成本,拒绝脱离实盘的“玩具回测”。
- 严密的 Point-in-Time (PIT) 数据治理架构
- 严格区分信息的生效时间(
effective_date)与策略可见时刻(available_at),支持财务报告多次更正历史回溯,从数据根源彻底消除前瞻偏差(Lookahead Bias)与幸存者偏差(Survivorship Bias)。
- 严格区分信息的生效时间(
- 拥抱现代高性能量化工程栈
- 全面采用 Polars(向量化表达式与高速并行)与 DuckDB(极速嵌入式分析)替代传统低效的 Pandas 单线程计算,支持千万级高频与截面数据秒级聚合。
- 买方级量化机器学习与凸优化组合构建
- 严格落实 Purged / Embargo K-Fold 时序交叉验证;基于
RankReturnCalibrator校准收益预测;构建 Barra 多因子结构化风险模型;使用cvxpy实施年化跟踪误差(TE)硬上限与换手冲击惩罚的凸优化求解。
- 严格落实 Purged / Embargo K-Fold 时序交叉验证;基于
- 100% 离线自包含可复现验证
- 31 讲全部具备独立可执行源码及合成测试夹具(
fixtures.py、common.py),无需购买商业数据即可一键执行全套自动化回归测试(npm run test:examples)。
- 31 讲全部具备独立可执行源码及合成测试夹具(
本课程包含 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 特征漂移、三级熔断滞回 |
- Python:
>= 3.11, < 3.14 - Node.js:
>= 18 - 包管理器推荐:uv(现代极速 Python 包管理工具)与
npm
# 1. 安装前端文档依赖
npm ci
# 2. 启动本地开发服务 (支持热更新,默认访问 http://localhost:5173)
npm run dev
# 3. 构建静态站点产物
npm run build
# 4. 本地预览构建产物
npm run preview本项目推荐使用 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_dashboardNote
真实数据下载(可选):如需联网下载真实历史样本数据并写入本地数据湖 data_lake/,可使用 --extra data:
uv sync --locked --extra data
uv run --locked --extra data python -m examples.lecture_04_industrial_data_pipeline --fetch项目配备了完整的契约与数学逻辑单元测试,所有测试均使用内建合成数据,无需联网:
# 执行全套回归测试
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 归因闭合与风控滞回熔断)。
在模块 02(第 4–8 讲)中,项目定义了标准的工业级共享数据契约。后续所有特征挖掘、模型训练及回测撮合均严格遵照此契约执行:
- 日期字段:统一采用
pl.Date。 - 高频与事件时间戳:必须统一采用 Asia/Shanghai 本地无时区
pl.Datetime。外部带时区时间必须先转换为上海时间再剔除时区,严禁直接丢弃 UTC 时区标识。 - 数值与状态:价格、成交量为非负浮点或整型,状态一律采用布尔值
Boolean。
| 表名 | 必需字段 (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 范围为 |
effective_datevsavailable_at:effective_date为状态在现实中实际生效的业务日期。available_at为该信息经由上游数据源处理后、量化系统真正可知并可下单的客观物理时间。二者决不可混同。
- 上市交易天数规则:
- 上市交易天数按交易所开市日逐日计数,包含停牌期间,绝对不等于已下载行情记录行数。日历缺失立即报错。
- 动态池候选资格 (
in_universe):- 仅表示该标的在此截面具备选股候选资格,不代表持仓被剔除后可以立即按最新价变现。
- 收盘截面 15:00 假设:
- PIT 引擎模拟盘后选股,假定 15:00 日线行情已形成。实际生产环境应计入数据入库延迟,所生成的信号最早于次日开盘时段执行。
-
版本选择规则:财报查询时先按指定时刻过滤
available_at <= query_time,再取每个报告期当前可见的最新更正版本。更新历史年报不会导致当前季度财务指标退回旧期。 -
行情文件存储:按
(symbol, trade_date)保证主键唯一,写盘前严格检查有限值与$Low \le Open, Close \le High$ 关系;年度 Parquet 文件采用临时文件原子替换(Atomic Rename),避免写入中断损坏数据。
- 收益率口径:计算跨日收益必须使用后复权价格
close_hfq。财务同比增速不应冒充超预期 SUE 指标。 - 高频微观结构:第 11 讲 OFI 严格采用本地无时区时间戳,不支持跨交易日平滑衔接;定时快照(Snapshot)不等于逐笔委托事件(Tick by Tick)。
- 正交化与中性化:第 12 讲使用 NumPy 求解加权最小二乘(WLS),验证残差与约束向量的加权正交;第 13 讲正交化前对常数列与共线输入显式报错,杜绝虚假独立因子。
- 评估隔离:第 14–15 讲标签必须由调用方按实际信号产生与成交时点对齐;第 17 讲排查伪 Alpha 时,未成交委托必须保留为现金,杜绝“一字涨停虚构暴利”。
- 时间隔离:训练集与测试集必须施加 Purged 与 Embargo 机制;严禁使用未来信息拟合数据预处理变换器(如 Scaler/Imputer)。
-
收益校准:树模型的排序输出(LambdaRank 分数)不能直接作为预期收益率输入给优化器,必须通过
RankReturnCalibrator拟合成熟历史样本外的持有期超额收益。 -
Barra 与优化求解:
- 风险模型接收
$(T, N, K)$ 历史期初暴露面板与独立的当前期初暴露。 - 优化器使用
Clarabel凸优化求解器处理年化跟踪误差(TE)二次硬约束,求解后自动校验对偶残差与可行性。
- 风险模型接收
-
进程隔离注意事项:
[!WARNING] 在已训练 LightGBM 的同一 Python 进程中执行 PyTorch 深度学习模型可能引发底层 OpenMP / 卷积线程池阻塞。第 21 讲与深度模型测试建议在独立进程中调用。
- 撮合纪律:次日开盘撮合严禁读取当日最高价、最低价或收盘价。成交数量受当日成交量占比上限(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 # 依赖精确锁定文件
- 学习路径与逐章掌握标准:提供量化六大基础入门自测题、三条并行学习线以及逐讲交付证据核验清单。
- 公开资源与权威书目导读:收录 MIT 18.06(线性代数)、Boyd 凸优化、上交所最新交易规则、AKShare 接口规范等核验清单。
- 课程全景体系大纲:31 讲完整知识图谱、各讲设计思路与进阶目标。
- 现代工程栈:Polars 官方文档 · DuckDB 官方文档 · uv 包管理器
- 优化与建模:CVXPY 凸优化库 · LightGBM 文档 · SHAP 可解释性
- 市场制度与基准:上交所交易规则 · 中证指数计算与维护细则 · AKShare 开源财经数据
量化研究求真务实 · 严谨敬畏市场 · 构建稳健复利