一天批量跑 213 因子 ML 量化策略|(ml-quant-trading)
配套媒体
本页对应的 PPT 与演示视频
下载没反应?点这里复制直链
侧边栏预览窗口(Electron webview)会拦截下载,把下面的链接复制到 Chrome / Edge 地址栏打开即可保存。
../../ml-quant-trading-recommend.pptx../../ml-quant-trading-recommend.mp4本文目录
- 🚀 什么是 ml-quant-trading?
- 项目背景
- ✨ 核心功能一览
- 7 大核心模块
- 213 因子家族分布
- 🛠️ 快速上手:5 分钟跑通示例
- 安装 / 部署
- Docker / Colab 一键部署
- 核心代码示例(PyTorch 训练管线)
- 因子注册表使用
- 📊 与竞品对比
- 🏗️ 系统架构
- 数据契约:Panel 一等公民
- Mask-first 设计理念
- 💡 适用场景
- 场景 1:因子有效性快速验证
- 场景 2:ML 模型 + 组合优化全流程
- 场景 3:矢量化回测与公开数据验证
- 用户群体总结
- 🔬 核心技术亮点
- 1. Tensor-accelerated 因子引擎
- 2. Alpha101 子集(9 个经典公式)
- 3. GBM Block-Bootstrap 数据增强
- 4. cvxpy Markowitz with α-sweep
- 🎯 总结
- 🎓 进阶阅读
一天批量跑 213 因子 ML 量化策略|(ml-quant-trading)
📌 核心价值:PyTorch + cvxpy 端到端 A股多因子研究栈,开箱即用 213 因子 + 偏差校正 + Markowitz 组合优化
一个干净、可 fork、端到端的 ML 量化交易研究栈:tensor 因子引擎、213 因子维度、bias correction、MLP/Transformer、Markowitz 优化、矢量化回测、公开数据验证,全套打包。

🚀 什么是 ml-quant-trading?
ml-quant-trading 是 Yimin Du 在 2026 年开源的 ML 多因子量化交易研究栈,是论文 arXiv:2507.07107 的配套代码。
核心定位:把"因子构造 → ML 训练 → 组合优化 → 矢量化回测"做成一条龙流水线
- 🧮 213 因子维度:204 个手工 legacy 因子 + 9 个 Alpha101 公式因子
- 🤖 ML 模型:MLP / Transformer,符号感知损失 + IC/RankIC 损失
- 📊 组合优化:cvxpy Markowitz + Ledoit-Wolf 协方差收缩
- 🛡️ 偏差校正:mask 一等公民、日内价格限制/停牌 mask、look-ahead 安全
- 📈 矢量化回测:标准指标(Sharpe / Sortino / Calmar / MDD / IC / RankIC)
- 🔬 学术严谨:30 个单元测试,CI 覆盖 Python 3.9 / 3.10 / 3.11
- 📦 现代工程:src 布局 + Click CLI + Docker + Google Colab
- 🌐 公开数据验证:Baostock(A 股)/ yfinance(美股 ETF)/ synthetic(GBM)
项目背景
传统量化研究代码散落在多个 notebook 里,缺少可复现的工程化封装。ml-quant-trading 提供了一套 PyTorch 研究栈,让学术研究者可以:
- 一行命令 clone 下来
pip install -e .[dev]安装make paper CONFIG=configs/small.yaml跑完整管线- 直接产出 benchmark 报告
⚠️ 本文仅作技术交流,不构成投资建议。股市有风险,投资需谨慎。
✨ 核心功能一览

7 大核心模块
| 模块 | 关键能力 | 技术实现 |
|---|---|---|
| data | OHLCV/财务/公司行为数据 → Panel dataclass | Baostock + yfinance + synthetic GBM |
| features | GPU 张量原语、213 因子 | cs_rank/ts_corr/ewma/delay/delta |
| bias | mask 一等公民、偏差校正 | 价格上下限/停牌 mask、行业中性化 |
| training | GBM 数据增强、trainer | block-bootstrap、grad clip |
| models | MLP + Transformer、符号感知 | AdjMSELoss / IC Loss / RankIC Loss |
| portfolio | cvxpy Markowitz + α sweep | Ledoit-Wolf 协方差收缩 |
| backtest | 矢量化引擎 + 标准指标 | Sharpe / Sortino / Calmar / MDD / IC |
213 因子家族分布

🛠️ 快速上手:5 分钟跑通示例
安装 / 部署
# 克隆仓库
git clone https://github.com/initial-d/ml-quant-trading.git
cd ml-quant-trading
# 安装(src 布局,自动注册 mlquant CLI)
pip install -e .[dev]
# 跑完整管线(默认 200 股 × 500 天合成面板,CPU 约 30 秒)
make paper CONFIG=configs/small.yaml
# 跑因子引擎性能基准
make benchmark
# 跑 30 个单元测试
make test
Docker / Colab 一键部署
# Docker(CPU 版 PyTorch 镜像)
docker build -t ml-quant-trading .
docker run --rm -v $(pwd):/app ml-quant-trading make paper
# Google Colab
# 直接打开 notebooks/public_factor_ic.ipynb 即可
核心代码示例(PyTorch 训练管线)
import torch
from mlquant.features import TensorFactorEngine, alpha101_registry
from mlquant.training import FactorDataset, Trainer
from mlquant.models import MLPRegressor, ICMLPLoss
from mlquant.backtest import VectorizedBacktest
# 1. 构造特征(204 legacy + 9 alpha101)
engine = TensorFactorEngine(device="cuda")
features = engine.compute(panel) # shape: [T, N, 213]
# 2. 数据集 + 数据增强
dataset = FactorDataset(
features=features,
targets=returns,
augment="gbm_block_bootstrap",
)
# 3. 训练模型(符号感知损失)
model = MLPRegressor(input_dim=213, hidden=[256, 128])
trainer = Trainer(model, dataset, loss=ICMLPLoss())
trainer.fit(epochs=50)
# 4. 矢量化回测
preds = model.predict(features)
bt = VectorizedBacktest(preds, returns, cost_bps=10)
report = bt.run()
print(f"Sharpe: {report['sharpe']:.2f}, MDD: {report['mdd']:.2%}")
注意:必须使用 PyTorch 1.13+ 和 CUDA 12.x;CPU 也能跑但 213 因子计算偏慢
因子注册表使用
from mlquant.features.alpha101 import alpha101_registry
# 查看所有可用的 Alpha101 因子
print(alpha101_registry.list()) # ['alpha001', 'alpha002', ..., 'alpha101']
# 单独计算某个因子
alpha006 = alpha101_registry.get("alpha006")(panel)
# 自定义因子:只要遵循 (panel) -> Tensor 接口
@alpha101_registry.register("alpha_custom_momentum")
def alpha_custom_momentum(panel):
return panel.close.pct_change(20).fillna(0)
📊 与竞品对比
| 对比维度 | ml-quant-trading | Qlib | Rqalpha | Backtrader |
|---|---|---|---|---|
| 核心定位 | PyTorch 端到端 A股研究栈 | 微软 AI 量化平台 | 事件驱动研究框架 | 事件驱动回测框架 |
| 因子库 | 213 因子(开箱即用) | Alpha158 + 自定义算子 | 需自行实现 | 需自行实现 |
| ML 模型 | 内置 MLP + Transformer | LGB/LSTM/Transformer | 需自行集成 | 需自行集成 |
| 组合优化 | cvxpy Markowitz | 内置 Portfolio | 需手写 | 需手写 |
| Bias 校正 | 行业+log-size 中性化 | 需手工实现 | 无内置 | 无内置 |
| 公开数据验证 | Baostock/yfinance/synthetic | 需自备数据 | 需自备数据 | 需自备数据 |
| 学术严谨性 | 30 单测 + Docker + Colab | 较完善 | 较少 | 较少 |
ml-quant-trading 的差异化:
- 学术严谨:论文配套代码,arXiv 可查证
- 现代工程:src 布局 + Click CLI + Docker
- 偏差校正:mask-first 设计避免常见 A 股研究陷阱
- 公开数据验证:内置 Baostock/yfinance/synthetic 三套可复现实验
- 多语言文档:英文 + 简体中文 + 繁体中文
🏗️ 系统架构

整个系统是一个 Python 包 + CLI,每个子包独立:
src/mlquant/
├── data/ loaders, synthetic GBM panel, immutable Panel container
├── features/ GPU primitives, Alpha101 subset (9), legacy factors (204), neutralisation, bias mask
├── training/ FactorDataset, GBM augmentation, Trainer
├── models/ MLP / Transformer baselines, sign-aware losses
├── portfolio/ cvxpy-based Markowitz with α-sweep
├── backtest/ vectorised engine + paper-grade metrics
├── cli/ Click entry points wiring the stages together
└── utils/ config loading + deterministic seeding
数据契约:Panel 一等公民
所有阶段都操作一个不可变的 Panel dataclass(包含 7 个 [T, N] 张量 + 可交易 mask)。阶段之间通过 Panel 交换数据,不互相侵入内部。
@dataclass(frozen=True)
class Panel:
prices: Tensor # [T, N] 复权收盘价
volumes: Tensor # [T, N] 成交量
fundamentals: Tensor # [T, N, F] 财务数据
mask: Tensor # [T, N] 可交易 mask(价格上下限/停牌)
...
Mask-first 设计理念
传统 A 股研究代码经常混淆 nan、0、-1 的语义。ml-quant-trading 把 mask 作为 Panel 的一等公民:
- limit mask:日内价格上下限日不可买入
- halt mask:停牌日不可交易
- pre-IPO mask:上市前数据需排除
- look-ahead shift:未来信息泄漏防护
💡 适用场景
场景 1:因子有效性快速验证

核心优势:213 因子开箱即用,无需自己实现
功能说明:内置 204 个 legacy 因子 + 9 个 Alpha101 因子,覆盖动量、反转、波动率、流动性、价值质量等 9 大类。
输入要求:标准 OHLCV 面板(Baostock/yfinance/synthetic 都可)
输出效果:每个因子的 IC、RankIC、ICIR 指标
适用场景:
- 研究者快速验证因子有效性
- 教学中演示因子构造原理
- 复现 WorldQuant Alpha101 论文
场景 2:ML 模型 + 组合优化全流程

核心优势:从 ML 训练到 Markowitz 组合的端到端管线
功能说明:内置 MLP 和 Transformer 两个 baseline 模型,配合符号感知损失(AdjMSE/IC Loss/RankIC Loss),可直接接到 cvxpy Markowitz 组合优化。
输入要求:因子矩阵 + 未来回报标签
输出效果:ML 预测值 + Markowitz 最优权重 + 矢量化回测报告
适用场景:
- 学术论文的 ML 因子模型实验
- 个人量化研究者的策略验证
- 教学演示 ML × 量化研究流程
场景 3:矢量化回测与公开数据验证

功能说明:矢量化回测引擎计算标准指标(Sharpe、Sortino、Calmar、MDD、IC、RankIC、turnover),支持成本拖累建模。
输入要求:ML 预测值或因子评分 + 价格数据 + 交易成本假设
输出效果:完整的绩效报告(净值曲线、IC 衰减、换手率)
适用场景:
- 量化基金研究员验证策略可行性
- 学生学习回测引擎的工程实现
- 复现论文 benchmark 表
用户群体总结
- ✅ 学术研究者:论文配套代码,arXiv 可查证
- ✅ 个人量化爱好者:开箱即用的端到端管线
- ✅ 教学场景:学生可以从因子构造学到组合优化
- ✅ 开源贡献者:现代工程化封装,便于二次开发
- ❌ 不适合:直接用于实盘交易(仅供研究)
🔬 核心技术亮点
1. Tensor-accelerated 因子引擎
GPU 矢量化、mask-aware 张量原语:
# cs_rank(带 ties)
ranked = cs_rank(features, mask=panel.mask)
# 时序算子
ma20 = ts_mean(panel.close, window=20, mask=panel.mask)
corr = ts_corr(panel.close, panel.benchmark, window=20)
# 指数加权移动平均
ewma_vol = ewma(panel.returns, halflife=30)
2. Alpha101 子集(9 个经典公式)
from mlquant.features.alpha101 import alpha101_registry
# Alpha006: (-1 * correlation(open, volume, 10))
alpha006 = alpha101_registry.get("alpha006")
# Alpha012: (sign(delta(volume, 1)) * sign(delta(close, 1)) * sign(delta(close, 1)))
alpha012 = alpha101_registry.get("alpha012")
3. GBM Block-Bootstrap 数据增强
为训练集扩充样本,提升模型鲁棒性:
from mlquant.training.augment import gbm_block_bootstrap
augmented = gbm_block_bootstrap(
features=train_features,
block_size=20,
n_samples=1000,
seed=42,
)
4. cvxpy Markowitz with α-sweep
from mlquant.portfolio import MarkowitzOptimizer
optimizer = MarkowitzOptimizer(
covariance_estimator="ledoit_wolf",
weight_upper_bound=0.05, # 单股权重上限 5%
solver="SCS", # 默认 SCS,可选 MOSEK
)
# α sweep 扫描有效前沿
weights = optimizer.solve(mu, sigma, alpha=1.0)
🎯 总结
ml-quant-trading 是 2026 年面向量化研究者的优秀开源项目:
- 🏆 学术严谨:论文 arXiv:2507.07107 配套代码
- 🛠️ 现代工程:src 布局 + Click CLI + Docker + Colab
- 📊 数据驱动:213 因子 + 公开数据验证 + Bootstrap CI
- 🌐 多语言:英文 + 简体中文 + 繁体中文
推荐指数: ⭐⭐⭐⭐(4/5 星)
适合人群: 量化研究者 / 学术论文实验 / 量化教学 / 个人量化爱好者
立即体验:
GitHub 仓库: initial-d/ml-quant-trading
论文: arXiv:2507.07107
官方文档: docs/
🎓 进阶阅读
- 📘 Factor Handbook(英文)
- 📗 Factor Handbook(中文)
- 📙 Architecture
- 📕 Backtest Assumptions
- 📒 Reality Check
- 📓 Public Data Validation
数据截至 2026-07-18,最新信息请以官网为准。