Stefan Jansen《Machine Learning for Trading》代码库:一人维护 19k stars 的 ML × 量化交易「事实教材」
GitHub: https://github.com/stefan-jansen/machine-learning-for-trading
一句话总结
这是 Stefan Jansen 2020 年出版《Machine Learning for Trading》第 2 版的配套代码库:23 章 + 150+ 个 Jupyter Notebooks,把「数据 → 特征 → 模型 → 回测 → 实盘「端到端流水线,用 Quantopian 时代遗产的 reloaded 工具链串成一本 800 页带可运行代码的「ML × 量化交易」教科书。
值得关注的理由
- 该垂直领域事实上的标准教学资源——ML for trading 教学/参考实现这一细分里没有同体量对手,最近邻是 López de Prado 的《Advances in Financial Machine Learning》,但 AFML 无 Notebooks、不覆盖 NLP/深度学习/另类数据,定位互补而非同质。
- 「reloaded「 工具链矩阵是别人很难复制的生态护城河——Quantopian 2020 年关停后,作者一个人 fork 并维护了 zipline-reloaded / pyfolio-reloaded / alphalens-reloaded / empyrical-reloaded 四个核心库,配套 conda-forge 与文档站,让这本书的全部 notebook 在 2026 年依然能跑通。
- 教科书 + 配套代码 + 持续更新的内容生态形成闭环——Notebook 仓库主分支虽已停维(2023-03 后无新 commit),但作者把后续迭代迁到 ml4trading.io 官网(6 个专用库 + Agent Lab + 56 个 agent skill),并通过 Substack 简报与 exchange 社区保持活性;2nd edition 19k stars、3rd edition 已挂封面宣传。
项目展示
书籍封面 + 目录(作者 S3 自托管)
— 类型: hero(README 首图,书籍封面与目录合页,是理解项目定位的最佳起点)
3rd Edition 封面
— 类型: hero(官网展示即将推出的第 3 版封面,主题扩展到多资产、加密、RL/RAG/Agent)
ml4t.io 官网 logo
— 类型: logo
仓库无在线可交互 Demo;ml4trading.io 上线了 Agent Lab(AI 研报环境)与 exchange.ml4trading.io 讨论社区。
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/stefan-jansen/machine-learning-for-trading |
| Star / Fork | 19,095 / 5,295(Watcher 449) |
| 代码行数 | 2,862 行 .py + ~200 个 .ipynb(tokei 不解析 notebook;真实代码量远大于此)+ 29,914 行注释/markdown 教学文案 |
| 语言分布 | Jupyter Notebook(GitHub 主语言识别)、Python 36.8%、YAML 57.4%(环境配置)、SVG 5.7%(图表) |
| 项目年龄 | 88.1 个月(2018-05 创建 → 2019-02 首提交 → 2024-08 最后推送) |
| 仓库体积 | 683 MB(含数据 + 模型权重 + notebook 输出缓存) |
| 开发阶段 | 稳定维护(主分支实质停维于 2023-03;3rd edition 改在 ml4trading.io 持续运营) |
| 贡献模式 | 单人主导(Stefan Jansen 93.4%,14 名贡献者中其余 13 人累计 < 7%) |
| 热度定位 | 大众热门(最近 194 个 star 集中在 7 天内,2026-06 单月即 ~194 star,日均 ~28 star) |
| License | 未声明(无 LICENSE 文件;trading_env.py 等多处声明 MIT) |
| Release | v2.0(1 个 tag,对应 2nd edition) |
| 质量评级 | 文档 ★★★★★ | 代码 ★★★ | 测试 ★★ |
作者视角:为什么存在这个项目
创始人/作者背景
Stefan Jansen,applied-ai.com(自 2015 年运营的 AI 咨询公司)Principal,13 年 GitHub 账户,2,652 粉丝。客户覆盖再保险、医疗、金融服务、资产管理四个领域。这种「咨询业 + 金融「双重身份塑造了项目定位:把客户项目中反复出现的 ML4T 工程化问题沉淀为可复用的教学内容。同时,Stefan 是 Quantopian 关停后整个生态(zipline / pyfolio / alphalens / empyrical)的「reloaded」接班人——这层身份让他能把这本书的 150+ notebook 真正在 2026 年跑通。
问题判断
作者看到了什么别人没看到或没重视的问题?
- 教材内容「纸面好看、代码难复现「——市面上讲 ML × 交易的教材要么给方法论不给代码(AFML),要么给代码不给系统化叙事(QuantConnect docs),要么依赖早已停维的库(多数 2018-2020 年的博客教程)。
- Quantopian 2020 年关停后整个生态断流——zipline / pyfolio / alphalens / empyrical 这套「教学界事实标准「瞬间失去维护,Python 3.7+ 用户无路可走。
- 金融专属陷阱三件套(lookahead / 多重检验 / 生存者偏差)在通用 ML 教材中极少提及——任何一个 ML 工程师拿 sklearn 直接套到金融数据上,几乎必然做出回测漂亮实盘亏钱的策略。
解法哲学
作者明确选择了什么,以及明确不做什么?
- 做: 教材 + 配套 Notebooks + 自维护的 reloaded 工具链 + 持续更新的内容生态(Substack 简报 + Agent Lab + exchange 社区)形成闭环
- 不做:
- 不做事件驱动的实盘网关(那是 quantconnect/lean 的地盘)
- 不做纯回测框架(那是 backtrader 的地盘)
- 不追求方法论严谨度对标 AFML,用「广度 + 工程化 + 维护性「换取读者的可入门性
战略意图
这是作者的旗舰项目(最近活跃仓库中排第 10,但 19k stars 远超其作者其他 65 个项目),处于「genuinely open + 知识服务商业化「组合中:
- 顶端漏斗: 开源仓库,免费、完整、有维护,吸引学生与从业者
- 中端: ml4trading.io 官网 + Substack 简报,沉淀读者与品牌
- 商业化: 2nd edition 出版(Amazon 等渠道)+ 3rd edition 已宣传 + AI 咨询业务的可信度背书
官方未提供独立的架构深度博客——官网本身是产品页,技术细节 defer 到 chapter / case study / library docs / primer / skill,专门讨论架构取舍的内容托管到 Substack 简报。
核心价值提炼
创新之处(按新颖度×实用性排序)
-
ML4T Workflow 六阶段模型 + 防三件套的内建基线(新颖度 3/5,实用性 5/5,可迁移性 4/5)
- 第 8 章显式把「Foundation → Feature Engineering → ML Models → Strategy Implementation → Advanced AI → Production「六阶段作为全书的统一工作流,每个阶段标注对应的陷阱防御
- 任何要把「模型预测「真正闭环到「交易执行「的团队都应该照搬
-
Deflated Sharpe Ratio 工具化封装(新颖度 2/5,实用性 5/5,可迁移性 5/5)
08_ml4t_workflow/01_multiple_testing/deflated_sharpe_ratio.py是 López de Prado 2014 年原始代码的直接移植,顶部明确署名原作者- 提供「蒙特卡洛 + 解析「两种 expected_max_sr 计算,是多策略上线前「是否真的有 alpha 还是只是过拟合「的统计校验
-
MultipleTimeSeriesCV防 lookahead purge 工具(新颖度 2/5,实用性 5/5,可迁移性 5/5)utils.py顶层一个 60 行实现,强制假设输入 MultiIndex 含symbol+date两个 level,通过lookahead参数在 train/test 之间插入 purge 期- sklearn 的
TimeSeriesSplit在金融场景会引发 lookahead 泄漏,这个工具是横截面 + 时序混合金融 ML 训练的硬需求
-
Zipline custom bundle + 自定义交易历(
AlgoSeekCalendar)(新颖度 3/5,实用性 4/5,可迁移性 3/5)- 第 8 章演示如何在 Zipline 注册一个「非美东 9:30-16:00 常规时段「的数据 bundle:自写 calendar(4AM-19:59 ET,960 分钟/天)+ ticker generator + data generator
- 适合任何想把分钟/自定义时段数据接入 Zipline 的项目
-
TradingEnvironment OpenAI Gym 封装(新颖度 2/5,实用性 4/5,可迁移性 4/5)
- 第 22 章
trading_env.py用 ~200 行实现「单标的、3 动作(short/hold/long)、252 天一回合、含交易成本与时间成本「的 Gym 环境 - 顶上明确标注 Tito Ingargiola 2016 原版 + Stefan 2019 改编,继承 MIT License
- 教学场景下演示「为何真实交易成本会让 naive RL agent 全面失效「
- 第 22 章
可复用的模式与技巧
- 教材双载体目录模式 — 目录编号严格对齐书章节(
08_ml4t_workflow/04_ml4t_workflow_with_zipline/),README 用二级标题对照书小节,编号 notebook 对应书中代码块。读者「翻书 + 开 GitHub「零摩擦切换。适用: 任何「书 + 代码「配对出版的项目。 - 多环境文件矩阵模式 — 一份
ml4t-base.yml(无 OS 特定依赖)+ 三份 OS 特定(windows / macosx / linux)完整版,用户从「我不想装一堆用不到的包「一路升到「我要全功能「。适用: 任何「依赖很多、跨平台、章节独立「的大型教学仓库。 - 数据工厂 notebook 模式 — 单独的
data/create_*.ipynb系列(create_stooq_data / create_datasets / create_yelp_review_data)把外部数据「下载 → 清洗 → 落 H5/CSV「的步骤显式化,不让数据准备成为黑盒。适用: 任何用真实(而非 sklearn 内置 toy)数据集的教学项目。 - 继承原作 + 顶部署名 + 同 License 模式 — 凡是移植/借鉴他人代码,都在文件顶部用注释块注明原作者(
trading_env.py顶部明确Copyright (c) 2016 Tito Ingargiola / Copyright (c) 2019 Stefan Jansen+ MIT 全文)。适用: 教学/咨询型代码仓库。 - Quantopian 遗产的 reloaded 分叉矩阵模式 — 一个上游 → 4 个 reloaded 分叉 → 共享文档站(xxx.ml4trading.io)→ 共享 conda-forge 分发。形成「个人开发者把碎片化开源遗产整合成可维护产品「的标准动作。适用: 任何「依赖某个已停维的开源项目,又无力自己全部重写「的场景。
关键设计决策
-
决策: 严格按书章节分目录,notebook 编号
00-99与书内小节锚定- 问题: 教材读者需要「翻到第 X 章,就能本地打开对应 notebook 跟着敲「
- 方案: 目录名带章节序数,README 用
##与书小节标题完全一致 - Trade-off: 牺牲了「代码模块按功能聚合「的工程性,换来了零认知摩擦的「人书对照「体验
- 可迁移性: 高
-
决策: 用环境文件(conda yml + pip txt)矩阵替代单一
requirements.txt- 问题: 数据科学 + 金融 + 深度学习三大类依赖叠加,跨平台(Win/Mac/Linux)+ M1/WSL 差异巨大
- 方案: 三个 OS 各自的
installation/{windows,macosx,linux}/ml4t.{yml,txt}加上 OS-agnostic 的ml4t-base.{yml,txt} - Trade-off: 维护 6 份配置文件,但每份只 ~100 行;换来「不装一堆用不到的包,大幅降低冲突概率「
- 可迁移性: 高
-
决策: 主动维护并贡献 Zipline/Pyfolio/Alphalens/Empyrical 的 reloaded 分支
- 问题: 2020 年 Quantopian 关停后这些库失去维护,互相之间版本锁死
- 方案: 不是「fork 了事「,而是分别建立独立 GitHub 仓库、上 conda-forge、写专门文档站,把 Quantopian 时代的遗产现代化
- Trade-off: 作者本人承担长期维护负担(主作者 93.4% 占比的部分原因);换来了「唯一能跑通 2nd edition 全部 notebook 的依赖链「
- 可迁移性: 中(需要作者具备「Python C 扩展编译、conda-forge 打包、文档站运维「等综合能力)
-
决策: 把回测环境(
backtestenv)与 ML 训练环境(ml4tenv)拆开,不强行合在一个 env- 问题: Zipline 1.4.1 当时(2021)只支持 Python 3.6,主流 ML 框架(TF 2 / PyTorch)早已要求 3.8+
- 方案: 维护两套 conda env,通过
nb_conda_kernels在 Jupyter 运行时切换 - Trade-off: 多装一套 env,多一份维护;换来 Zipline 用户不被迫放弃,ML 用户不被旧 Python 拖累
- 可迁移性: 中
-
决策: 大数据集不放进 Git(Alpaca data zip、earnings_calls zip 等少数小数据集除外),提供 algoseek 外部下载 + 数据准备 notebook
- 方案: 仓库 683 MB,但 .git 实际很轻;配
data/README.md与专门的create_stooq_data.ipynb/create_yelp_review_data.ipynb等「数据工厂「notebook - Trade-off: 用户首次 clone 后还要走一段「下载 + 准备「流程
- 可迁移性: 高
- 方案: 仓库 683 MB,但 .git 实际很轻;配
竞品格局与定位
竞品对比矩阵
| 维度 | stefan-jansen/ml4t | quantconnect/lean | mementum/backtrader | AI4Finance/FinGPT | AFML(López de Prado 教材) |
|---|---|---|---|---|---|
| Stars | 19k | ~11k+ | 18.4k | ~16k+ | 无对应 repo |
| 定位 | ML×交易教学/参考实现 | 商业级事件驱动算法交易引擎 | 纯 Python 回测/实盘框架 | 金融 LLM 微调与下游任务 | 量化金融 ML 方法论教材 |
| 实盘支持 | ❌(需用户自己接 broker) | ✅(多券商、多资产、多时间框架) | ✅(IB/Visual Chart/Oanda) | ❌ | ❌ |
| ML 范式覆盖 | 监督/无监督/时序/贝叶斯/深度/RL 全栈 | 部分(更偏策略执行) | 无(纯回测) | LLM 微调单一 | 统计/ML 方法论 |
| Notebooks | 150+ 完整可运行 | 弱(更偏平台 docs) | 无 | 部分 | 无(书 + 论文) |
| 另类数据 | SEC filings/卫星图像/期权/加密 | 替代数据需订阅 | 无 | 研报/情感/新闻 | 无 |
| 金融陷阱防御 | 内建(lookahead/purge/多重检验) | 有 | 弱 | 弱 | 严谨(purge/embargo/CPCV) |
| 上手成本 | 高(需读 800 页 + 装 6 个 env) | 中(注册云服务) | 低(pip install) | 中 | 高(数学 + Python) |
| 维护者 | 1 人(兼咨询业 Principal) | 公司 | 1 人 | 学术社区 | 1 人(已出版为书) |
差异化护城河
- 信任护城河: 作者独立维护 4 个 reloaded 库 + 整套配套生态,用户信任「有问题能找到人「——这是 lean/backtrader 等单工具项目很难复制的
- 生态护城河: Quantopian 遗产链(zipline / pyfolio / alphalens / empyrical → reloaded → 共享文档站 → 共享 conda-forge)是别人很难复制的整合
- 内容护城河: 2nd edition 800 页 + Substack 简报 + exchange 社区 + 56 个 agent skill,内容护城河在 AGI/LLM 时代反而有了新机会
竞争风险
最可能被「专门做某一块的现代工具「分散用户:
- FinGPT 抢 LLM/情感部分——本 repo 的 LLM 部分更偏传统 NLP pipeline,FinGPT 紧跟 Llama/Qwen/DeepSeek
- backtrader 抢回测部分——18.4k stars + 零依赖 + broker 集成广
- quantconnect 抢实盘部分——出厂即可接 IB/Coinbase/Tradier
本 repo 的「一站式教学「价值在 2026 年越来越难维持,但「内容漏斗顶端「的入口地位依然稳固。
生态定位
在整个技术生态中扮演「ML 交易领域的 O’Reilly 教科书「角色——不是工具,是「带示例代码的体系化课程「。在 AGI/LLM 时代反而有了新机会:Agent Lab + Skills 是顺势延伸,让这本书从「静态教材「变成「动态学习社区「。
套利机会分析
- 信息差: 此项目不是「低关注高价值「的发现型机会——它已经是该垂直领域事实教材;新读者因第 3 版预告 / 第 2 版迁移 / AI × quant 主题升温而持续涌入(最近 7 天 194 个 star,日均 28)。不要按「被低估「思路评估,应按「已被验证的高质量基础设施「思路使用。
- 技术借鉴: 教材双载体目录模式 / 多环境文件矩阵 / 数据工厂 notebook / 继承原作顶部署名 / reloaded 分叉矩阵 五个模式可迁移到任何「书 + 代码「或「碎片化开源遗产整合「项目。
- 生态位: 填补了「ML × 交易「领域系统化教学 + 可运行代码 + 持续生态的三合一空白;Quantopian 关停后这个生态位几乎只此一家。
- 趋势判断: 稳定增长(最近 7 天 194 star + 3rd edition 宣传);符合技术趋势(AI × quant 主题升温);比 AFML 等纯方法论教材有后发优势(带代码 + 维护)。
风险与不足
- 作者单点风险: 主作者占 93.4%,reloaded 工具链矩阵也由他一人维护——若作者长期投入转移,整个生态瞬间回到「2020 年 Quantopian 关停「那种断流状态。
- 主分支停维: Notebook 仓库主分支 2023-03 后无新 commit,2024-08-18 最后推送是文档类更新;后续内容迁到 ml4trading.io 官网 + Agent Lab,但「GitHub 是入口「这个惯例可能被打破。
- 回测严谨度不及 AFML: Amazon/Goodreads 读者共识——「应用广、覆盖全,但回测严谨度不及 López de Prado「。需要严谨回测方法论的团队应同时读 AFML。
- 代码质量工业级不足: 无 tests 目录、无 CI/CD、无 linter 配置、错误处理靠
assert+warnings.filterwarnings('ignore');适合教学,不适合直接做生产。 - License 不明确: 仓库顶层无 LICENSE 文件,trading_env.py 等多处声明 MIT——用户商用前需自行核实。
- 依赖版本分裂: 维护两套 conda env(
backtest+ml4t)反映 Zipline 旧 Python 兼容问题,新用户首次配置耗时显著。
行动建议
-
如果你要用它:
- 想系统学 ML × 量化交易 → 首选,特别是有 Python 基础但缺金融陷阱防御意识的 ML 工程师
- 想做严谨回测方法论 → 改读 López de Prado 的 AFML,本书作辅
- 想接实盘 → 不要指望本 repo 给你 broker 对接代码,请同时评估 quantconnect/lean 或 backtrader
- 想用最新 LLM 做金融任务 → 改走 FinGPT 路线
-
如果你要学它:
- 重点读
08_ml4t_workflow/(全书的精华,6 阶段工作流 + Zipline 集成 + MultipleTimeSeriesCV) utils.py顶层那个MultipleTimeSeriesCV是金融 ML 必带的 60 行工具02_market_and_fundamental_data/01_NASDAQ_TotalView-ITCH_Order_Book/演示了 NASDAQ 二进制行情解析,是数据层最复杂的部分14_topic_modeling/(财报电话会议 LDA/主题建模)是 NLP 部分的代表作
- 重点读
-
如果你要 fork 它:
- 用 3rd edition 的「6 个专用库 + Agent Lab + Skills「路线做扩展,比在原 repo 上叠 PR 更可持续
- 想做「非 Quantopian 系「——例如 RL 交易环境 / 多智能体 / 跨交易所套利——可从
trading_env.py入手改造 - 想要 LICENSE 明确化、CI/CD 自动化、test 覆盖——这是低风险高价值的 PR 方向
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | https://deepwiki.com/stefan-jansen/machine-learning-for-trading(已收录,2025-04-18 索引) |
| Zread.ai | 未收录 |
| 配套教材 | Stefan Jansen《Machine Learning for Trading》2nd Edition, Packt 2020;3rd Edition 宣传中 |
| 官方门户 | https://ml4trading.io(含 6 个专用库 + Agent Lab + 56 agent skill + Substack 简报) |
| 社区 | https://exchange.ml4trading.io |
| 关联论文 | 仓库内复用了多篇顶刊论文的代码路径:Sezer & Ozbahoglu 2018 CNN for financial time series;Gu, Kelly & Xiu 2019 autoencoder asset pricing;Yoon et al. 2019 Time-series GAN;López de Prado 2014 Deflated Sharpe Ratio |
| 在线 Demo | 无在线可交互 Demo(Agent Lab 是 3rd edition 营销点,待上线) |