Machine Learning for Trading 2nd Edition — 完整教學

一句話定位:Stefan Jansen《Machine Learning for Algorithmic Trading》(ML4T 縮寫;機器學習演算法交易)2nd Edition 一整本書的官方配套程式碼倉庫,含 24 章 / 156 個 Jupyter notebook / 420MB,從原始市場資料一路走到深度強化學習(deep reinforcement learning, DRL;深度強化學習)交易代理人,是該領域 GitHub 上影響力最大的單一教學資產(17.8k stars / 5.2k forks)。

適合:想系統性學「ML 怎麼套到金融時間序列」的開發者、研究者、面試 buy-side quant ML role 的工程師、quantitative finance 大學課程助教。

不適合:想拿到「即插即用 alpha 策略」的散戶(書中所有範例都是教學用,不會直接賺錢);想跑 production live trading 的人(書本只覆蓋 backtest)。

⚠️ 重要提醒:repo 無 LICENSE 檔案,預設保留所有權利;商用、再散佈、製成內訓教材前必須先聯絡作者。


目錄

  1. 專案定位
  2. 安裝指南
  3. 核心架構解析
  4. Helper Scripts 詳細用法
  5. 應用場景:24 章逐章精讀
  6. 資安掃描報告
  7. FAQ — 從 issue tracker 整理的踩坑集
  8. 進階技巧
  9. 整合進其他工作流
  10. 重點摘要 Checklist
  11. 進一步閱讀

1. 專案定位

1.1 這是什麼

stefan-jansen/machine-learning-for-trading(以下簡稱 ml4t repo)是書本 Machine Learning for Algorithmic Trading: Predictive models to extract signals from market and alternative data for systematic trading strategies with Python, 2nd Edition(Packt 出版,2020-07-31)的官方程式碼倉庫。

書的核心命題:把「過去十年從學術界 → 工業界落地的現代 machine learning (ML; 機器學習) 與 deep learning (DL; 深度學習) 方法」,套到金融時間序列特有的問題上(包括 alpha factor research、portfolio optimization、backtesting、live trading 模擬),完整展示 end-to-end 的 ML for trading (ML4T) 工作流

24 章的內容組織遵循 alpha 策略真實開發路徑:

 1原始市場 + 另類資料 (Part 1)
 2 3特徵工程 / alpha factor 設計 (Ch 4)
 4 5strategy evaluation 框架 (Ch 5)
 6 7ML 模型 (Part 2: 古典 ML,Ch 6-13)
 8 9NLP 應用 (Part 3: Ch 14-16)
1011Deep Learning / DRL (Part 4: Ch 17-22)
1213總結 + alpha factor 工具庫 (Ch 23-24)

1.2 作者背景:為什麼是 Stefan Jansen

  • 經歷:紐約 hedge fund 量化研究員、現任 Applied AI 創辦人、Packt 雙書作者(前作 Hands-On Machine Learning for Algorithmic Trading 1st edition 2018)。
  • 維護的開源生態系:原版 Quantopian 倒閉後,作者把整套量化研究三件套(zipline 回測、pyfolio 績效歸因、alphalens 因子分析)fork 到自己的 GitHub organization,重命名為 zipline-reloaded / pyfolio-reloaded / alphalens-reloaded / empyrical-reloaded,是這些工具在 Python 3.8+ 下唯一仍可運行的版本。
  • 影響力:書本被 NYU、Columbia、Imperial College London 等多所大學 quantitative finance 碩士 / MFE program 列為主要參考。
  • 官方資源:

1.3 與其他經典量化教材比較

教材風格ML 含量適合對象
本書(Jansen 2020)hands-on Jupyter90%(古典 + NLP + DL + DRL)工程出身、要快速上手的 quant developer
Quantitative Trading(E. Chan, 2008/2013/2021)偏實務、書面30%(最後幾章)散戶轉量化、學 mean reversion / pair trading 基本盤
Advances in Financial Machine Learning(López de Prado, 2018)理論 + 方法論70%(meta-labeling, fractional differentiation)PhD / 已有 ML 基礎、要進階打怪的量化研究員
Active Portfolio Management(Grinold & Kahn 2000)純理論0%想理解 information ratio / fundamental law 的人

本書的賣點是「書 + 程式碼 + 章節 README markdown 三位一體」,即使沒買書,光啃 24 章 README 已經覆蓋約 60% 內容。

1.4 統計資料快照(2026-06-02)

指標數值
Stars17,844
Forks5,183
Default branchmain
Created2018-05-09
Last commit2023-03-05
Releases1(2021-02-27, 2nd Edition)
章節數24
Notebook 總數156 個 .ipynb
Python 檔案29 個 .py(utils + helpers)
文件40 個 .md(README × 25 + 雜項)
Repo 大小420 MB
主要語言Jupyter Notebook
Primary topicsmachine-learning / trading / investment / finance / data-science / deep-learning / synthetic-data / ml4t-workflow / trading-agent
LicenseNone(無 LICENSE 檔)

2. 安裝指南

2.1 三條路線總覽

installation/README.md 提供三條路徑,按推薦順序:

  1. mamba + conda 環境(推薦)— 跨 Windows / macOS / Linux;ml4t base + 3 個 OS-specific 環境檔。
  2. pip 環境(macOS / Linux 限定,無 Windows 官方支援)— ml4t-base.txt
  3. Docker(已 deprecated 2021-04 起)— 原本 Quantopian-style zipline 必須的方案,Zipline-reloaded 解放後不再需要。

⚠️ 環境檔自 2022-04 後就沒更新;下面會列出版本漂移地雷。

2.2 推薦:mamba + conda 路線

2.2.1 前置

1# 1. 裝 miniconda(任何作業系統官方文件)
2#    https://docs.conda.io/en/latest/miniconda.html
3
4# 2. 裝 mamba(conda-forge 上的快速 solver)
5conda install -n base -c conda-forge mamba
6
7# 3. clone repo
8git clone https://github.com/stefan-jansen/machine-learning-for-trading.git
9cd machine-learning-for-trading

2.2.2 創建 ml4t 主環境

 1# OS 對應檔案:installation/{linux,macosx,windows}/ml4t.yml
 2mamba env create -f installation/linux/ml4t.yml      # Linux
 3# mamba env create -f installation/macosx/ml4t.yml   # macOS Intel
 4# mamba env create -f installation/windows/ml4t.yml  # Windows
 5
 6# 啟用
 7conda activate ml4t
 8
 9# 註冊 Jupyter kernel(為了在 notebook 內切 kernel)
10python -m ipykernel install --user --name ml4t --display-name "Python 3.8 (ml4t)"

2.2.3 另外建議分開的環境

書本第 22 章 deep reinforcement learning 用較新 TensorFlow,作者建議獨立環境:

1mamba env create -f 22_deep_reinforcement_learning/environment.yml
2conda activate ml4t-rl
3python -m ipykernel install --user --name ml4t-rl --display-name "Python 3.8 (ml4t-rl)"

2.2.4 啟動 Jupyter Lab

1conda activate ml4t
2jupyter lab

2.3 pip 路線(macOS / Linux)

1# 用 pyenv 或 venv 切一個 Python 3.8 環境
2pyenv install 3.8.13
3pyenv local 3.8.13
4python -m venv .venv
5source .venv/bin/activate
6
7# 裝 OS-agnostic 套件
8pip install -r installation/ml4t-base.txt

注意:ml4t-base.txt 不含 TA-Lib(要自己 build C 程式庫)、不含 PyMC3(裝 conda 版較簡單)。整體 pip 路線維護成本較高,作者明確建議 conda 路線優先

2.4 ⚠️ 版本漂移地雷(2024+ 必看)

installation/ml4t-base.yml 鎖死的關鍵版本:

1python=3.8         # Python 3.9+ 上 zipline-reloaded 仍可用,但部分 NLP 章節 spaCy 模型版本要對齊
2pandas<1.3         # pandas 1.4+ 刪掉 .append() → ch02 / ch14 部分 notebook 會掛
3gensim<4.0         # gensim 4.x API 大改 → ch15 LDA 部分 notebook 會掛
4nbconvert=5.6.1    # 為了避免 jupyter launch 警告,但近代 notebook 已不需要

結論:2024 年以後 clone 下來,建議 嚴格用 Python 3.8 + 環境檔 pin 版本,不要嘗試升級 pandas / numpy / gensim,否則會撞各章節的 issue tracker bug。

2.5 資料下載

書中許多 notebook 需要外部資料,主要分四類:

來源章節取得方式
NASDAQ TotalView-ITCH samplech0202_market_and_fundamental_data/01_NASDAQ_TotalView-ITCH_Order_Book/ 的 notebook 內附下載連結(NASDAQ 官方公開 sample)
AlgoSeek minute barsch02, ch12書本網站提供下載:https://www.algoseek.com/ml4t-book-data.html
Quandl WIKI pricesch04, ch07+pandas-datareader 拉;Quandl WIKI 2018 後不再更新但歷史資料仍可下載
SEC EDGAR XBRLch02, ch16公開 API,notebook 內直接抓
書本配套 zip多章書本網站提供

2.6 安裝流程圖


flowchart TD
    A[Clone repo] --> B{選環境}
    B -->|conda + mamba 推薦| C[mamba env create -f
installation/OS/ml4t.yml] B -->|pip macOS Linux| D[pyenv 3.8.13
pip install -r ml4t-base.txt] B -->|Docker deprecated| E[直接跳過 用 1 2] C --> F[conda activate ml4t] D --> F F --> G[python -m ipykernel install --name ml4t] G --> H{需要 DRL?} H -->|是| I[另建 ml4t-rl 環境] H -->|否| J[jupyter lab 開工] I --> J J --> K[下載 NASDAQ ITCH
AlgoSeek SEC EDGAR
章節 README 指示] K --> L[執行 notebook]

3. 核心架構解析

3.1 24 章 4 大 Part 全貌


flowchart LR
    subgraph P1["Part 1: From Data to Strategy
ch 1-5"] C1[ch01 ML4T
idea→execution] C2[ch02 Market &
Fundamental Data] C3[ch03 Alternative
Data] C4[ch04 Alpha Factor
Research] C5[ch05 Strategy
Evaluation] end subgraph P2["Part 2: Classical ML
ch 6-13"] C6[ch06 ML Process] C7[ch07 Linear Models] C8[ch08 ML4T Workflow
Backtesting] C9[ch09 Time Series
ARIMA/GARCH/VAR] C10[ch10 Bayesian ML
PyMC3] C11[ch11 Random Forests] C12[ch12 Gradient Boosting
LightGBM/XGBoost] C13[ch13 Unsupervised
HRP/Manifold] end subgraph P3["Part 3: NLP for Trading
ch 14-16"] C14[ch14 Text Data
spaCy/sentiment] C15[ch15 Topic Modeling
LDA] C16[ch16 Word Embeddings
word2vec/doc2vec] end subgraph P4["Part 4: Deep & RL
ch 17-24"] C17[ch17 Deep Learning] C18[ch18 CNN] C19[ch19 RNN/LSTM] C20[ch20 Autoencoders] C21[ch21 GANs synth TS] C22[ch22 DRL trading agent] C23[ch23 Next Steps] C24[ch24 Alpha Factor
Library appendix] end P1 --> P2 --> P3 --> P4

3.2 整本書的工作流哲學

書中所有章節都圍繞同一條 alpha 策略生命週期展開:


sequenceDiagram
    participant Data as 原始資料
(market/fund/alt) participant FE as Feature Engineering
(alpha factor) participant Eval as Factor Evaluation
(alphalens IC) participant Model as ML Model
(linear/boost/DL) participant BT as Backtesting
(zipline/backtrader) participant PF as Performance
(pyfolio) Data->>FE: tick/OHLCV/fund metrics FE->>Eval: factor scores 多空分組 Eval->>FE: 留下 IC 高 alphalens 分析合格 FE->>Model: 多 factor 組合 Model->>BT: 預測 trade signal BT->>PF: portfolio time series PF->>BT: Sharpe MDD turnover PF-->>Data: 結論 重新挑 factor

Key point:書中反覆強調,ML 是這條流水線中間的一塊,不是全部。沒有 alphalens IC 篩過的 factor、沒有 zipline 公正回測、沒有 pyfolio 績效歸因,ML 模型再準也救不了壞策略。

3.3 重要依賴模組對應章節

模組用途出現章節
pandas / numpy資料處理基底全部
zipline-reloadedevent-driven 回測ch04, ch08, ch11, ch12, ch17, ch18
backtrader簡化版回測ch08
alphalens-reloadedfactor IC / quantile 分析ch04, ch07, ch11, ch12, ch20, ch24
pyfolio-reloadedportfolio 績效歸因ch05
empyrical-reloadedrisk metrics(Sharpe, sortino…)ch05, ch12
pandas-datareaderQuandl / Yahoo / FRED 拉資料ch02
talib(TA-Lib python wrapper)158 個技術指標ch04, ch24
pykalman / pywtKalman filter / waveletch04
statsmodels經典統計(OLS, ARIMA, VAR)ch07, ch09
archGARCH 族群ch09
pymc3Bayesian inference / MCMCch10
scikit-learn古典 MLch06-08, ch11, ch13
lightgbm / xgboost / catboostgradient boostingch12
spaCy / nltk / textblobNLP pipelinech14, ch15
gensimLDA / word2vec / doc2vecch15, ch16
tensorflow 2.xDL backbone(含 ch22 DRL)ch17-21, ch22
pytorchDL 對照(少數 notebook)ch17
gym / pymdptoolboxRL 環境ch22
umap-learn / hdbscan非線性降維 / 密度聚類ch13
shap特徵重要性解釋ch12, ch24

3.4 目錄樹

 1machine-learning-for-trading/
 2├── 01_machine_learning_for_trading/       # 純概念 README(無 notebook)
 3├── 02_market_and_fundamental_data/        # ITCH/AlgoSeek/EDGAR/Storage benchmark
 4│   ├── 01_NASDAQ_TotalView-ITCH_Order_Book/
 5│   ├── 02_algoseek_intraday/
 6│   ├── 03_data_providers/
 7│   ├── 04_sec_edgar/
 8│   └── 05_storage_benchmark/
 9├── 03_alternative_data/                   # OpenTable / SeekingAlpha 爬蟲
10│   ├── 01_opentable/
11│   └── 02_earnings_calls/
12├── 04_alpha_factor_research/              # 5 notebook:feature eng / TA-Lib / Kalman / zipline single / alphalens
13├── 05_strategy_evaluation/                # 5 notebook:backtest demos / mean variance / Kelly
14├── 06_machine_learning_process/           # 3 notebook:workflow / mutual info / bias-variance
15├── 07_linear_models/                      # 8 notebook:OLS / Fama-Macbeth / statsmodels / logistic / alphalens 評估
16├── 08_ml4t_workflow/                      # 完整管線示範(含 4 個 zipline 範例)
17│   ├── 00_data/
18│   ├── 01_multiple_testing/
19│   ├── 02_vectorized_backtest.ipynb
20│   ├── 03_backtesting_with_backtrader.ipynb
21│   └── 04_ml4t_workflow_with_zipline/
22├── 09_time_series_models/                 # 7 notebook:TSA / ARIMA / GARCH / VAR / 共整合 / pairs trading
23├── 10_bayesian_machine_learning/          # 5 notebook:共軛先驗 / PyMC3 / Bayesian Sharpe / 隨機波動
24├── 11_decision_trees_random_forests/      # 8 notebook:Japanese equity long-short
25├── 12_gradient_boosting_machines/         # 11 notebook:LightGBM/CatBoost intraday strategy + SHAP
26├── 13_unsupervised_learning/              # 17 notebook 4 subdir:HRP / manifold / clustering
27├── 14_working_with_text_data/             # 6 notebook:spaCy pipeline / sentiment Yelp Twitter
28├── 15_topic_modeling/                     # 7 notebook:LSI / pLSA / LDA on news + earnings calls
29├── 16_word_embeddings/                    # 8 notebook:word2vec / doc2vec on SEC filings
30├── 17_deep_learning/                      # 5 notebook:TF/PyTorch 入門 + NN architecture optimization
31├── 18_convolutional_neural_nets/          # 13 notebook:LeNet → AlexNet → time series CNN → 衛星影像
32├── 19_recurrent_neural_nets/              # 8 notebook:univariate/multivariate LSTM + SEC 預測
33├── 20_autoencoders_for_conditional_risk_factors/  # 7 notebook:Gu/Kelly/Xiu 2020 風險因子 paper 復現
34├── 21_gans_for_synthetic_time_series/     # 3 notebook:DCGAN / TimeGAN / synthetic data 評估
35├── 22_deep_reinforcement_learning/        # 4 notebook:DP gridworld → Q-learning → Lunar Lander → trading agent
36├── 23_next_steps/                         # 純結論章(無 notebook)
37├── 24_alpha_factor_library/               # 6 notebook:101 alpha + indicator zoo(書本 appendix)
38├── assets/                                # 章節用到的圖片資源
39├── data/                                  # 範例小資料 + 下載指南
40├── figures/                               # 書本所有圖表的彩色版
41├── installation/                          # 三條安裝路徑
42├── utils.py                               # 全 repo 唯一共用 helper(MultipleTimeSeriesCV)
43└── README.md                              # 17.8k stars 的 main README

4. Helper Scripts 詳細用法

4.1 utils.py — 全 repo 共用 helper

整個 repo 共用的 Python helper 只有一個檔案 utils.py(< 70 行),包含兩個工具:

4.1.1 format_time(t)

把秒數轉成 HH:MM:SS 格式字串,用於 notebook 內訓練進度顯示。

1from utils import format_time
2import time
3t0 = time.time()
4# ... 訓練 ...
5print(f'Training took {format_time(time.time() - t0)}')   # → "00:12:34"

4.1.2 MultipleTimeSeriesCV — 全書最重要的 cross-validation 工具

scikit-learn 內建的 TimeSeriesSplit 只處理單一時間序列,但金融資料典型是 multi-index (symbol, date) 的 panel data,且要處理 lookahead overlap(多日 forward return 標籤會跨越 train/test 界線)。

MultipleTimeSeriesCV 解決的問題:

  1. 對齊 multi-index panel data
  2. lookahead 參數消除 train/test 之間的 forward return 重疊
  3. 按交易日(不是日曆日)切分

關鍵簽名:

1class MultipleTimeSeriesCV:
2    def __init__(self,
3                 n_splits=3,
4                 train_period_length=126,   # ~半年交易日
5                 test_period_length=21,     # ~1 個月
6                 lookahead=None,            # 目標變數 forward return 天數
7                 date_idx='date',
8                 shuffle=False):
9        ...

典型用法(書本 ch11–12 反覆出現):

 1from utils import MultipleTimeSeriesCV
 2
 3cv = MultipleTimeSeriesCV(
 4    n_splits=10,
 5    train_period_length=252,      # 1 年
 6    test_period_length=63,        # 1 季
 7    lookahead=21,                 # 1 個月 forward return
 8)
 9
10for fold, (train_idx, test_idx) in enumerate(cv.split(X)):
11    X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
12    y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
13    model.fit(X_train, y_train)
14    preds[fold] = model.predict(X_test)

坑點X 的 multi-index 必須有名為 'date' 的 level;如果你的 DataFrame 沒這個 level,要先 set_index(['symbol', 'date'])

4.2 各章節的 helper 模式

整本書沒有統一的 helper module 框架,各章節獨立

  • ch11, ch12 多數 helper inline 寫在 notebook 內
  • ch08 04_ml4t_workflow_with_zipline/ 有自己的 factor_pipeline.py / algo.py 等 zipline 標準 algo 檔
  • ch22 DRL 用 OpenAI gym 標準介面,agent class 寫在 notebook 內

這設計反映書的教學取向:每章獨立可讀,不要求讀者跨章節導入 module。


5. 應用場景:24 章逐章精讀

每章列:核心觀念、notebook 清單、key takeaway、踩坑提醒。本節是整本書最濃縮的「目錄式」精讀,可當「下次要研究某主題時,第幾章第幾個 notebook 直接讀」的索引。

5.1 Part 1 — From Data to Strategy Development (ch 1–5)

第一部份建立 alpha 策略的工程框架,無 ML 內容但必須讀懂,後面才接得上。


Chapter 1 — Machine Learning for Trading: From Idea to Execution

核心觀念:演算法交易產業的演化(電子化 → HFT → factor investing → smart beta → quantamental → ML4T);Grinold’s Fundamental Law of Active Management

1IR ≈ IC × √Breadth
2IR = Information Ratio
3IC = Information Coefficient (forecast 與實際結果的 rank correlation)
4Breadth = 獨立 bet 的數量

意思是「alpha 來源 = 更準的預測 × 更多的獨立機會」。整本書都圍繞這條公式打轉。

Notebook:無,純概念章節,讀 README.md 即可。

Key takeaway

  • ML4T workflow 6 個步驟:sourcing data → alpha factor research → portfolio management → strategy backtesting → live trading → performance attribution
  • 三大 ML 應用:feature extraction、supervised alpha factor、asset allocation
  • 區分 “ML in the loop”(每次 rebalance 重新訓練)vs “ML one-shot”(離線訓練、線上 inference)

踩坑提醒:別跳過這章;後面所有「為什麼這樣切 train/test」「為什麼 IC 是這樣定義」的答案都在這。


Chapter 2 — Market & Fundamental Data: Sources and Techniques

核心觀念:市場資料 = 交易環境的副產品;想做 ML4T 必須懂 market microstructure(市場微結構):order types、execution venues、FIX protocol、tick data 規格。Fundamental data 來自 XBRL 標記的財報。

Notebook(11 個 / 5 子目錄)

子目錄 / 檔案主題
01_NASDAQ_TotalView-ITCH_Order_Book/01_parse_itch_order_flow_messages.ipynb解析 ITCH 4.1 binary order book 流
01_NASDAQ_TotalView-ITCH_Order_Book/02_rebuild_nasdaq_order_book.ipynb重建 NASDAQ 訂單簿
02_algoseek_intraday/處理 algoseek minute bar
03_data_providers/Quandl / IEX / pandas-datareader / Yahoo
04_sec_edgar/SEC EDGAR XBRL 財報資料
05_storage_benchmark/HDF5 vs Parquet vs SQLite 速度比較

Key takeaway

  • ITCH binary 解析是 quantitative engineer 的入門儀式
  • AlgoSeek 提供 ml4t-book 專用 dataset(書本網站可下載)
  • 儲存層:書中結論是 HDF5 / pandas 對混合 dtype 最快、Parquet 最便攜

踩坑提醒

  • 熱門 issue #330 / #310 / #328 都是 chapter 2 的 ITCH notebook 撞 pandas .append() 棄用,要把 .append(...) 改成 pd.concat([...], ignore_index=True)
  • ITCH sample 連結曾換過,2022-08 commit 已修正

Chapter 3 — Alternative Data for Trading

核心觀念:另類資料(alternative data)三大來源:

  1. Individuals — social media、review、search query
  2. Business processes — credit card transaction、supply chain
  3. Sensors — 衛星影像、cell tower、IoT

評估資料價值的關鍵維度:signal content、quality、frequency、reliability、entitlement / licensing。

Notebook(5 子目錄之 2 個有 code)

子目錄主題
01_opentable/OpenTable 餐廳訂位資料 web scraping demo
02_earnings_calls/Seeking Alpha 季報電話會議逐字稿爬取(Selenium)

Key takeaway

  • 另類資料市場 2020+ 已超過 30 億美金 / 年
  • 爬蟲的法律邊界:robots.txt + ToS + 反爬機制 + 各國資料保護法

踩坑提醒

  • 02_earnings_calls/scrape_test.py 用 Selenium 直登 Seeking Alpha — 違反該站 ToS,不要在 production 用。書中只當教學示範。
  • 帳號密碼用 os.environ['SEEKING_ALPHA_USER']os.environ['SEEKING_ALPHA_PWD'] 讀取 — 不是硬編碼,但你還是要先去 Seeking Alpha 註冊帳號。

Chapter 4 — Financial Feature Engineering: How to Research Alpha Factors

核心觀念:這是書本最重要的章節之一。alpha factor research workflow 包含:

  1. 從 OHLCV / fundamental / alt data 衍生 raw factor
  2. cross-sectional normalize(z-score、rank)
  3. alphalens 做 quantile 多空分組、IC 時序分析、turnover 評估
  4. 留下 IC > 0.05 且持續性高的 factor

Notebook(5 個)

檔案主題
01_feature_engineering.ipynb經典金融特徵:return lag、moving average、volatility
02_how_to_use_talib.ipynbTA-Lib 158 個技術指標的 Python 包裝
03_kalman_filter_and_wavelets.ipynbKalman filter denoise、wavelet decomposition
04_single_factor_zipline.ipynb用 zipline 跑單一 factor 的 long-short backtest
06_performance_eval_alphalens.ipynb核心:alphalens 的 IC / quantile / sector neutral 完整工作流

Key takeaway

  • 學 alphalens 就是學「怎麼快速判斷一個 factor 值不值得進管線」
  • Kalman filter 對 noisy price 的去噪能讓單純 moving average 變強很多
  • 永遠先把 factor 經 alphalens 看過,再決定要不要 feed 給 ML

踩坑提醒

  • TA-Lib 安裝是 macOS / Linux 老問題(要先 brew install ta-libpip install TA-Lib
  • alphalens-reloaded 跟原 alphalens API 100% 相容,但要從 conda-forge 裝
  • notebook 編號跳過 05,這是原作者刻意(書本目錄沒有第 5 個 demo)

Chapter 5 — Portfolio Optimization and Performance Evaluation

核心觀念:把 alpha signal 變成 portfolio weight 的橋樑。三大方法:

  1. Mean-variance optimization (MVO) — Markowitz 古典解
  2. Kelly criterion — 賭場數學家 1956 提出,最大化 log return
  3. Hierarchical Risk Parity (HRP) — López de Prado 2016,繞開 covariance matrix 反矩陣的數值問題

加上 pyfolio 績效歸因(Sharpe、Sortino、Calmar、max drawdown、tear sheet)。

Notebook(5 個)

檔案主題
01_backtest_with_trades.ipynb從 trade list 重建 portfolio time series
02_backtest_with_pf_optimization.ipynbMVO + backtest 整合
03_pyfolio_demo.ipynbpyfolio tear sheet 完整 demo
04_mean_variance_optimization.ipynbMVO 數學 + 實作
05_kelly_rule.ipynbKelly criterion 推導 + 實證

Key takeaway

  • pyfolio tear sheet 是業界最常見的 portfolio 評估報告格式
  • HRP 留到 ch13 才講(屬於 unsupervised learning 的應用)
  • Kelly 在 leverage 受限環境下需要 fractional Kelly(取 1/2、1/4)

踩坑提醒

  • 熱門 issue #331:pyfolio demo notebook 在新 pandas 上會跳 deprecation warning,不影響執行
  • MVO 的 covariance matrix shrinkage 在實證上比 sample covariance 穩定很多

5.2 Part 2 — Classical ML for Trading (ch 6–13)

第二部份是書本核心:把 古典 ML(線性、樹、boosting、貝氏、unsupervised) 套到 alpha 預測。


Chapter 6 — The Machine Learning Process

核心觀念:ML workflow 的金融版適配。重點不是 model,是「金融資料如何違反一般 ML 的 i.i.d. 假設」:時間序列、cross-section、survivorship bias、look-ahead bias。

Notebook(3 個)

檔案主題
01_machine_learning_workflow.ipynb從 data → model → evaluate 的標準框架
02_mutual_information.ipynbmutual information 做非線性 feature selection
03_bias_variance.ipynbbias-variance decomposition 視覺化

Key takeaway

  • 在金融資料上 cross-validation 必須用 MultipleTimeSeriesCV(utils.py),不能用 KFold
  • mutual information 比 Pearson correlation 抓得到非線性關係

Chapter 7 — Linear Models: From Risk Factors to Return Forecasts

核心觀念:線性模型在量化金融的地位被嚴重低估。Fama-MacBeth 兩階段回歸 是 asset pricing 學界的標配;logistic regression 是 alpha factor 分類預測的最常見模型。

Notebook(8 個)

檔案主題
01_linear_regression_intro.ipynbOLS 基礎
02_fama_macbeth.ipynb核心:Fama-MacBeth two-pass 回歸
03_preparing_the_model_data.ipynbfactor data 準備
04_statistical_inference_of_stock_returns_with_statsmodels.ipynb用 statsmodels 完整跑統計推論
05_predicting_stock_returns_with_linear_regression.ipynbOLS 預測 return
06_evaluating_signals_using_alphalens.ipynb模型輸出當 factor 餵給 alphalens
07_logistic_regression_macro_data.ipynblogistic regression 預測景氣循環
08_predicting_price_movements_with_logistic_regression.ipynblogistic 預測股價漲跌

Key takeaway

  • 線性模型是「baseline 必須建」,後面所有 boosting / NN 都要打贏這條線
  • statsmodels 的統計推論比 sklearn 完整

Chapter 8 — The ML4T Workflow: From Model to Strategy Backtesting

核心觀念:把前面學的 model + factor + backtest 串成完整管線。展示 ziplinebacktrader 兩個回測框架。

Notebook(4 個 + 多個 zipline algo 檔)

檔案 / 目錄主題
00_data/範例資料
01_multiple_testing/多重檢驗校正(避免 data snooping)
02_vectorized_backtest.ipynb向量化 backtest 教學版
03_backtesting_with_backtrader.ipynbbacktrader 範例
04_ml4t_workflow_with_zipline/zipline 完整 algo + custom pipeline factor

Key takeaway

  • vectorized backtest 快但不準(不模擬訂單匹配、滑點);event-driven (zipline / backtrader) 慢但接近真實
  • multiple testing correction 是量化研究最容易被忽略的細節

踩坑提醒

  • 熱門 issue #333:第 8 章 02_vectorized_backtest.ipynb signal generation 有潛在 bug(社群討論中)
  • zipline ingest custom bundle 在 Windows 上 path 容易出錯

Chapter 9 — Time Series Models for Volatility Forecasts and Statistical Arbitrage

核心觀念:經典時間序列模型(ARIMA / GARCH / VAR)+ pairs trading(cointegration / Engle-Granger / Johansen)。

Notebook(7 個)

檔案主題
01_tsa_and_stationarity.ipynb平穩性檢定(ADF / KPSS)
02_arima_models.ipynbARIMA(p,d,q)
03_arch_garch_models.ipynbARCH / GARCH 波動度模型
04_vector_autoregressive_model.ipynbVAR 多變量
05_cointegration_tests.ipynb共整合檢定
06_statistical_arbitrage_with_cointegrated_pairs.ipynbpair trading signal generation
07_pairs_trading_backtest.ipynbpair trading 回測

Key takeaway

  • GARCH 是 risk model 的 backbone,VaR 計算必備
  • Pair trading 是統計套利最入門也最容易在實證上失效的策略(regime change)

Chapter 10 — Bayesian Machine Learning: Dynamic Sharpe Ratios and Pairs Trading

核心觀念:用 PyMC3 做 Bayesian inference,把不確定性顯式建模。

Notebook(5 個)

檔案主題
01_updating_conjugate_priors.ipynb共軛先驗手算範例
02_pymc3_workflow.ipynbPyMC3 工作流
03_bayesian_sharpe_ratio.ipynb核心:Bayesian Sharpe ratio 估計(含信賴區間)
04_rolling_regression.ipynb動態 hedge ratio
05_stochastic_volatility.ipynb隨機波動度模型

Key takeaway

  • Bayesian Sharpe 給出 Sharpe 的後驗分布,比點估更可信
  • Stochastic volatility 模型適合做尾部風險

踩坑提醒

  • PyMC3 在 2022 後改名 PyMC,API 有變;conda 環境鎖 pymc3=3.x,不要嘗試升級

Chapter 11 — Random Forests: A Long-Short Strategy for Japanese Stocks

核心觀念:從決策樹 → bagging → random forest,套到日本股市 long-short alpha。

Notebook(8 個)

檔案主題
00_data_prep.ipynb日本股市資料準備
00_custom_bundle/把日本資料做成 zipline custom bundle
01_decision_trees.ipynb單一 decision tree 教學
02_bagged_decision_trees.ipynbbagging 推導
03_random_forest_tuning.ipynbRF 超參數調整
04_japanese_equity_features.ipynbfeature engineering
05_random_forest_return_signals.ipynbRF 預測 return
06_alphalens_signals_quality.ipynbalphalens 評估
07_backtesting_with_zipline.ipynbzipline 回測

Key takeaway

  • 日本股票市場相對美股有 alpha capacity(流動性 +)但 microstructure 差很多
  • zipline custom bundle 是把外部資料變成 zipline 可吃格式的標準操作

Chapter 12 — Boosting your Trading Strategy

核心觀念:boosting 全家桶(scikit-learn GBM / XGBoost / LightGBM / CatBoost),跑 intraday 高頻 alpha。SHAP 解釋。

Notebook(11 個)

檔案主題
01_boosting_baseline.ipynbsklearn GBM baseline
02_sklearn_gbm_tuning.ipynb超參數調整
03_sklearn_gbm_tuning_results.ipynb結果分析
04_preparing_the_model_data.ipynbfeature pipeline
05_trading_signals_with_lightgbm_and_catboost.ipynb核心:LightGBM + CatBoost
06_evaluate_trading_signals.ipynbsignal 品質
07_model_interpretation.ipynbSHAP 特徵重要性
08_making_out_of_sample_predictions.ipynbOOS 預測
09_backtesting_with_zipline.ipynbzipline 回測
10_intraday_features.ipynbintraday feature engineering(AlgoSeek 分鐘 bar)
11_intraday_model.ipynbintraday model

Key takeaway

  • LightGBM 在金融 panel data 上幾乎永遠贏 sklearn GBM 與 XGBoost(速度 + AUC)
  • SHAP 在量化 review 已是必備工具
  • intraday strategy 對 transaction cost 極度敏感,回測必須加滑點 + commission

Chapter 13 — Data-Driven Risk Factors and Asset Allocation with Unsupervised Learning

核心觀念:unsupervised learning 4 大派系。

Notebook(17 個 / 4 子目錄)

子目錄主題
01_linear_dimensionality_reduction/PCA / ICA / NMF
02_manifold_learning/t-SNE / UMAP / Isomap
03_clustering_algorithms/k-means / GMM / DBSCAN / HDBSCAN / hierarchical
04_hierarchical_risk_parity/核心:HRP(López de Prado 2016)

Key takeaway

  • HRP 是「反 Markowitz」:不依賴 covariance matrix inversion,更穩定
  • UMAP / HDBSCAN 在量化研究中對「找市場 regime」很有用

5.3 Part 3 — NLP for Trading (ch 14–16)

第三部份套 NLP 到財經文本(新聞、財報、社群、電話會議逐字稿)。


Chapter 14 — Text Data for Trading: Sentiment Analysis

核心觀念:建立 NLP pipeline(tokenize → POS tag → NER → lemmatize)、document-term matrix、各家 sentiment lexicon。

Notebook(6 個)

檔案主題
01_nlp_pipeline_with_spaCy.ipynbspaCy 標準 pipeline
02_nlp_with_textblob.ipynbTextBlob 快速 sentiment
03_document_term_matrix.ipynbDTM、TF-IDF
04_news_text_classification.ipynb新聞分類
05_sentiment_analysis_twitter.ipynbTwitter sentiment
06_sentiment_analysis_yelp.ipynbYelp review sentiment

Key takeaway

  • 金融特化 sentiment:Loughran-McDonald 字典(適合 10-K 文件)
  • TextBlob 易用但商用建議自訓金融專用模型

踩坑提醒

  • 熱門 issue #336:05_sentiment_analysis_twitter.ipynb 在新 pandas 上 df.info(null_counts=True) 會跳 TypeError,改成 df.info(show_counts=True) 或省略參數

Chapter 15 — Topic Modeling: Summarizing Financial News

核心觀念:從 LSI → pLSA → LDA(Latent Dirichlet Allocation)。

Notebook(7 個)

檔案主題
01_latent_semantic_indexing.ipynbLSI (SVD-based)
02_probabilistic_latent_analysis.ipynbpLSA
03_dirichlet_distribution.ipynbDirichlet 視覺化
04_lda_with_sklearn.ipynbsklearn LDA
05_lda_with_gensim.ipynbgensim LDA(快)
06_lda_earnings_calls.ipynbLDA on 季報
07_lda_financial_news.ipynbLDA on 財經新聞

Key takeaway

  • gensim 的 LDA 比 sklearn 快很多
  • 主題穩定性是 LDA 在金融場景最大痛點(重新訓練主題會變)

踩坑提醒

  • gensim<4.0 的鎖死意味著要用舊 API;升級 gensim 4 後 LdaModel 介面有變

Chapter 16 — Word embeddings for Earnings Calls and SEC Filings

核心觀念:把字詞變稠密向量(word2vec / GloVe / doc2vec),在 SEC 10-K / 10-Q 文件上訓金融專用 embedding。

Notebook(8 個)

檔案主題
01_using_pretrained_vectors.ipynb預訓練 vector 用法
02_evaluating_embeddings.ipynbembedding 評估
03_financial_news_preprocessing.ipynb財經新聞前處理
04_financial_news_word2vec_tensorflow.ipynbTF 訓練 word2vec
05_financial_news_word2vec_gensim.ipynbgensim 訓 word2vec
06_sec_preprocessing.ipynbSEC EDGAR 文件前處理
07_sec_word2vec.ipynbSEC 文件 word2vec
08_doc2vec_yelp_sentiment.ipynbdoc2vec 文件級向量

Key takeaway

  • 2020 年寫的;現在當然會用 BERT / FinBERT,但 word2vec 訓練成本低、能解釋性強,在小規模研究還是有用
  • SEC EDGAR XBRL 解析在 ch02 做過、這裡做更深

5.4 Part 4 — Deep Learning & RL for Trading (ch 17–24)

第四部份是最炫但也最容易過擬合的章節。


Chapter 17 — Deep Learning for Trading

核心觀念:feedforward NN 基礎、TensorFlow 2 / PyTorch 對照、NN architecture optimization。

Notebook(5 個)

檔案主題
01_build_and_train_feedforward_nn.ipynb從零搭 NN
02_how_to_use_tensorflow.ipynbTF 2.x 入門
03_how_to_use_pytorch.ipynbPyTorch 對照
04_optimizing_a_NN_architecture_for_trading.ipynbarchitecture search
05_backtesting_with_zipline.ipynbzipline 回測

Key takeaway

  • 在低 signal-to-noise 的金融資料上,NN 不一定打贏 LightGBM
  • regularization(dropout、L2、early stopping)對金融 NN 比 vision 更關鍵

Chapter 18 — CNN for Financial Time Series and Satellite Images

核心觀念:CNN 兩條路:

  1. 把時間序列重排為 2D image,套經典 CNN
  2. 用衛星影像(停車場 / 油桶 / 農地)做 alpha 預測

Notebook(13 個)

檔案主題
01_filter_example.ipynbCNN filter 基本
02_digit_classification_with_lenet5.ipynbLeNet-5 教學
03_image_classification_with_alexnet.ipynbAlexNet
04_time_series_prediction.ipynb1D CNN 預測
05_cnn_for_trading_feature_engineering.ipynbtime series → image feature
06_cnn_for_trading_features_to_clustered_image_format.ipynbclustering + image
07_cnn_for_trading.ipynbCNN 預測 return
08_backtesting_with_zipline.ipynbzipline 回測
09_bottleneck_features.ipynb取 bottleneck layer 當 feature
10_transfer_learning.ipynbtransfer learning
11_satellite_images.ipynb核心:衛星影像 alpha
12_svhn_preprocessing.ipynbSVHN 數字辨識前處理
13_svhn_object_detection.ipynbSVHN 物件偵測

Key takeaway

  • 衛星影像 alpha 是 2010s 後期最熱的 alt data,門檻已降到一般 fund 也能跑
  • transfer learning 對小資料金融場景特別合用

Chapter 19 — RNN for Multivariate Time Series and Sentiment Analysis

核心觀念:RNN / LSTM / GRU 應用在 multivariate time series 與 NLP。

Notebook(8 個)

檔案主題
00_build_dataset.ipynb資料集準備
01_univariate_time_series_regression.ipynb單變量 LSTM 預測
02_stacked_lstm_with_feature_embeddings.ipynbstacked LSTM 分類
03_stacked_lstm_with_feature_embeddings_regression.ipynbstacked LSTM 回歸
04_multivariate_timeseries.ipynb多變量 LSTM
05_sentiment_analysis_imdb.ipynbIMDB sentiment
06_sentiment_analysis_pretrained_embeddings.ipynb結合預訓練 embedding
07_sec_filings_return_prediction.ipynb核心:用 SEC 文件 embedding 預測 return

Key takeaway

  • LSTM 在金融時序上贏 ARIMA 不一定明顯,但贏多變量 VAR 較確定
  • feature embedding(symbol / sector 當類別變數)是 panel data 的好用招式

Chapter 20 — Autoencoders for Conditional Risk Factors and Asset Pricing

核心觀念:復現 Gu, Kelly, Xiu (2020) 的 conditional autoencoder asset pricing model

Notebook(7 個)

檔案主題
01_deep_autoencoders.ipynb基礎 autoencoder
02_convolutional_denoising_autoencoders.ipynbdenoise CAE
03_variational_autoencoder.ipynbVAE
04_build_us_stock_dataset.ipynb建立美股資料集
05_conditional_autoencoder_for_asset_pricing_data.ipynb資料準備
06_conditional_autoencoder_for_asset_pricing_model.ipynb核心:模型訓練
07_alphalens_analysis.ipynbalphalens 評估

Key takeaway

  • conditional autoencoder 在 latent factor 上的解釋力可贏經典 Fama-French
  • 這章難度最高,建議先讀 paper

Chapter 21 — GANs for Synthetic Time Series

核心觀念:用 GAN 生成合成金融時間序列(解決資料稀缺問題)。

Notebook(3 個)

檔案主題
01_deep_convolutional_generative_adversarial_network.ipynbDCGAN 教學
02_TimeGAN_TF2.ipynb核心:TimeGAN(Yoon et al. 2019)
03_evaluating_synthetic_data.ipynb合成資料品質評估

Key takeaway

  • 合成資料的 fidelity / utility tradeoff 是評估關鍵
  • TimeGAN 在 backtesting 增廣資料、避免 overfit 上有用

Chapter 22 — Deep Reinforcement Learning: Building a Trading Agent

核心觀念:從 dynamic programming → Q-learning → deep Q-learning(DQN)→ 自製 trading env。

Notebook(4 個)

檔案主題
01_gridworld_dynamic_programming.ipynbgridworld DP
02_gridworld_q_learning.ipynbgridworld Q-learning
03_lunar_lander_deep_q_learning.ipynbOpenAI gym Lunar Lander DQN
04_q_learning_for_trading.ipynb核心:自製 trading env + DQN agent

Key takeaway

  • DRL 在量化交易實證效果尚有爭議;但「state design + reward shaping」的思路有借鑑價值
  • 用獨立環境檔(environment.yml)避開 ml4t 主環境 TF 版本衝突

踩坑提醒

  • 第 22 章的 environment 跟主環境分開(用 ml4t-rl 環境);不分會踩 TF 版本衝突
  • gym 介面 2022 後改 gymnasium,書本用舊 gym API

Chapter 23 — Conclusions and Next Steps

純結論章,無 notebook。總結 ML4T 的方向:multi-modal data、transformer、causal inference、explainable AI、alternative data scaling。


Chapter 24 — Appendix: Alpha Factor Library

核心觀念:把書本所有用過 + 額外整理的 alpha factor 編成可重用 library;包含 WorldQuant 著名的 101 Formulaic Alphas 全部復現。

Notebook(6 個)

檔案主題
00_indicator_zoo.ipynb技術指標集合
01_sample_selection.ipynbsample selection 處理
02_common_alpha_factors.ipynb常見 alpha factor
03_101_formulaic_alphas.ipynb核心:WorldQuant 101 alphas
04_factor_evaluation.ipynb全部 factor alphalens 評估
05_alphalens_analysis.ipynb彙總分析

Key takeaway

  • 這章是 quant 面試常考內容:「WorldQuant 101 alphas 中你最熟的是哪幾個?」
  • 整章是寫策略時的「factor 抄寫本

6. 資安掃描報告

掃描時間:2026-06-02 / 掃描範圍:*.py *.sh *.yml *.txt + notebook 高風險模式抽樣 / 排除 .git.ipynb_checkpoints

6.1 🟢 低風險項目(教學用 repo 表現良好)

  • 無硬編碼 secretscrape_test.pyos.environ['SEEKING_ALPHA_USER'] / os.environ['SEEKING_ALPHA_PWD'] 讀取,未硬編碼。
  • eval() / exec() 在 .py 程式碼(單一 asttokens=2.0.5 命中是套件版本字串,非執行)。
  • os.system / shell=True:所有外部呼叫都走標準 Python API。
  • pickle.load / joblib.load 在共享程式碼:僅 notebook 內部使用,不會跨 user 載入不信任的 pickle。
  • 無 notebook !sudo / !pip install:清乾淨,安裝靠環境檔。

6.2 🟡 中度風險項目(需要使用者了解)

6.2.1 無 LICENSE 檔案

最大的法律風險:repo 根目錄無 LICENSE / COPYING

後果說明
預設保留所有權利美國 / 國際版權法:無明示授權 = 作者保留全部權利
不能商用不能拿來做 product、SaaS、付費課程
不能再散佈嚴格說 fork 也只限 GitHub TOS 默許範圍
不能改製內訓教材公司內訓重製教材前必須先聯絡作者取得書面授權

建議:商用 / 內訓前先去 ml4trading.io 聯絡 Stefan Jansen 取書面授權,或限縮為「研究 / 自學 / GitHub fork 內 modification」的範圍。

6.2.2 環境檔版本鎖死導致已知 CVE 風險

installation/*/ml4t.yml 鎖在 2021-2022 的版本:

1- python=3.8
2- pandas<1.3
3- curl=7.78.0 / 7.76.1 / 7.83.0    # 各 OS
4- libcurl=...
5- tensorflow=2.x(書本時的版本)
6- pillow=(書本時的版本)

歷史 CVE 概覽:

  • Python 3.8 已於 2024-10 結束 security maintenance
  • 舊版 curl / libcurl 有歷史 CVE(CVE-2023-38545, CVE-2023-23914 等)
  • TensorFlow 2.4-2.6 範圍有多個 CVE
  • Pillow < 9.x 有多個影像解析 CVE

建議:環境是 學習用容器,不要拿到 production 或讓不信任的人連 jupyter server;課堂環境建議在獨立 conda env 或 Docker 內。

6.2.3 第三方 conda channel 信任

ml4t-base.yml 啟用的 channel:

 1channels:
 2  - conda-forge        # 🟢 主流,信任度高
 3  - defaults           # 🟢 Anaconda 官方
 4  - anaconda           # 🟢
 5  - bashtage           # 🟡 個人 channel
 6  - ranaroussi         # 🟡 個人 channel(yfinance 作者)
 7  - powerai            # 🟡 IBM PowerAI(已 EOL)
 8  - fastai             # 🟢
 9  - jiayi_anaconda     # 🟡 個人 channel
10  - districtdatalabs   # 🟡 公司 channel

🟡 標記的個人 / 小組織 channel 信任度低於 conda-forge;如果該 channel 被棄置或被劫持,環境構建會失敗或可能引入惡意套件。

建議:在 corporate 環境用前,先 audit 一次 channel 列表;可考慮把所有套件改從 conda-forge 取(少數套件可能不可用,可改 pip 裝)。

6.2.4 scrape_test.py

1# 03_alternative_data/02_earnings_calls/scrape_test.py
2driver = webdriver.Chrome()
3url = 'http://seekingalpha.com/account/login'
4EMAIL = environ['SEEKING_ALPHA_USER']
5PASS  = environ['SEEKING_ALPHA_PWD']

Selenium 模擬登入並爬取 — 違反 Seeking Alpha Terms of Service:

  • 個人帳號被停權的可能
  • 大量 request 可能觸發法律風險(CFAA 在美國)

建議:書中當教學用,不要在 production 跑。實際商用要走 Seeking Alpha 付費 API。

6.3 🔴 高風險項目

無高風險 finding。 教學 repo 該有的衛生狀況。

6.4 結論

項目等級建議
程式碼資安🟢通過
套件供應鏈🟡個人 channel 注意
LICENSE🟡商用 / 內訓前先取書面授權
環境版本🟡學習用 OK,不要連 production
爬蟲合規🟡教學用 OK,不要 production
高風險 finding🟢

整體判定:🟢 教學用安全可用;🟡 三個風險需要使用者知道並自行管理。


7. FAQ — 從 issue tracker 整理的踩坑集

從 open / closed issue + 熱門 comment 萃取出的高頻問題。

Q1: clone 下來跑第二章 ITCH notebook 就掛 KeyError: No object named P(issue #310 / #328 / #330)

根因:pandas 1.4+ 刪掉 DataFrame.append(),書本 notebook 還在用。

解法:把所有 store['P'].append(store['Q'].rename(...)) 改成:

1trades = pd.concat(
2    [store['P'], store['Q'].rename(columns={'cross_price': 'price'})],
3    ignore_index=True,
4    sort=False,
5).merge(stocks)

或者乾脆用環境檔鎖死的 pandas<1.3

Q2: 第 14 章 train.info(null_counts=True) 報 TypeError(issue #336)

根因:pandas 1.5+ 改成 show_counts 參數。

解法

1# 改前
2train.info(null_counts=True)
3# 改後
4train.info(show_counts=True)

Q3: Windows 上 conda 環境建立失敗

根因:Windows 環境檔的 curl / libcurl 版本對應不存在 conda-forge channel。

解法

  1. 先試 mamba env create -f installation/windows/ml4t.yml(mamba solver 容錯比 conda 高)
  2. 失敗的話手動裁掉 yml 內所有版本 pin,跑 conda env create -n ml4t -f ml4t-base.yml
  3. 仍失敗就轉走 WSL2 + Linux 環境檔

Q4: PyMC3 在新環境上裝不起來

根因:PyMC3 在 2022-08 重命名為 PyMC(4.x)並大改 API。

解法:嚴格按環境檔用 pymc3=3.x;或全部跳過第 10 章。

Q5: zipline ingest 卡住

根因:Quandl 在 2018 停止更新 WIKI prices;zipline-reloaded 的 quandl bundle 預設仍指向那個 endpoint。

解法

  1. 用 yahoo bundle:zipline ingest -b yahoo
  2. 或自製 custom bundle(書本 ch11 00_custom_bundle/ 有示範)

Q6: TA-Lib 在 macOS Apple Silicon 上裝不起來

根因:TA-Lib 的 C 程式庫對 ARM 編譯需要額外步驟。

解法

1brew install ta-lib
2export TA_LIBRARY_PATH=/opt/homebrew/lib
3export TA_INCLUDE_PATH=/opt/homebrew/include
4pip install --no-binary TA-Lib TA-Lib

Q7: 第 22 章 DRL notebook 跟主環境 TF 版本衝突

根因:DRL 用較新的 TF,跟主 ml4t 環境(鎖 TF 2.x 舊版)衝突。

解法:作者本人建議建立獨立環境:

1mamba env create -f 22_deep_reinforcement_learning/environment.yml

Q8: 沒買書,光看 repo 能學到多少?

:大概 60-70%。每章 README 把書中 narrative 濃縮重寫,notebook 把程式碼補全。缺的是書本第 1-3 章對產業背景的論述、各章節結尾的延伸閱讀注釋、附錄的數學推導完整版。建議當作「目錄 + cheat sheet」用,要深入再買書。

Q9: 書本 Python 3.8 鎖死,到 2026 還有意義嗎?

:有,只要你的目的是學概念而不是跑 production。書本核心觀念(factor research workflow、alphalens / pyfolio 用法、LightGBM 訓練流程、DRL trading env design)跟 Python 版本無關;2026 用最新 Python + 新版套件重寫 notebook 是讀者作業。

Q10: 跟 López de Prado 的 Advances in Financial ML 比哪本好?

:互補。

  • Jansen(本書):寬廣、實作優先、code-heavy、覆蓋 NLP / DL / DRL
  • López de Prado:深度、理論優先、math-heavy、聚焦古典 ML 的金融特化(meta-labeling、fractional differentiation、purged k-fold)

建議:兩本一起讀。先 Jansen 走完工作流,再 López de Prado 補理論深度。


8. 進階技巧

8.1 把書本 notebook 變成可重用的研究模板

書本 notebook 設計為「章節獨立、自包含」,但實際做研究時,你會想把 ch04 的 factor research + ch08 的 zipline workflow + ch12 的 LightGBM 串起來。建議流程:

  1. 在你自己的 repo 開 research/notebooks/
  2. 把 ml4t 的 utils.py 抓過來當基礎
  3. 把 ch11/12 的「資料準備 → 模型訓練 → alphalens 評估 → zipline 回測」做成 4 個獨立 .py
  4. 每個研究主題開一個 notebook,import 上面 4 個 module 串起來
  5. MultipleTimeSeriesCV 做嚴格的 walk-forward 評估

8.2 Backtest 時必做的衛生檢查

  • Look-ahead bias:feature t 的計算只能用到 ≤t 的資料
  • Survivorship bias:universe 必須包含 delisted 股票
  • Transaction cost:commission + slippage + market impact
  • Position sizing:不要 cherry-pick 賺錢的最大化權重
  • Multiple testing:跑 100 個 factor 找到 5 個 IC > 0.05 不算 alpha;補 Bonferroni / FDR
  • Out-of-sample:留 ≥ 20% 資料不碰、最終確認用

書本 ch08 01_multiple_testing/ 有專章。

8.3 把 LightGBM 串到 zipline pipeline 的範本

ch12 09_backtesting_with_zipline.ipynb 示範了關鍵手法:

  1. 離線訓 LightGBM、存模型
  2. 在 zipline algo 中 load 模型
  3. zipline initialize() 註冊 custom pipeline factor
  4. pipeline factor 在每個 rebalance 呼叫模型 inference
  5. before_trading_start() 取得 signal,計算 target weight
  6. order_optimal_portfolio() 下單

這是業界 quant fund 標準作法的教學版本。

8.4 Alphalens IC 解讀的 5 個閾值

1IC > 0.10          頂級 alpha(罕見、可能是 look-ahead bias)
2IC > 0.05          有效 alpha(值得進管線)
3IC > 0.02          marginal(可能跟其他 factor 組合後有用)
40   ~ 0.02         噪音
5IC < 0             反向 factor 或資料錯誤

8.5 把書本的 dataset 升級到 2024+

書本資料止於 2018-2020。要把研究做到 2024+:

  1. yfinance(ranaroussi 維護)拉 daily price
  2. SEC EDGAR XBRL 仍可即時抓
  3. AlgoSeek 改買 2020+ 的新版資料集
  4. 自己跑爬蟲收 alternative data(注意 §6.2.4)

9. 整合進其他工作流

9.1 整合進 AI knowledge template

把這份教學丟回 AI knowledge template 的場景:

Layer用途
ai-gh-save已自動產生 inbox/2026-06-02-github-stefan-jansen-machine-learning-for-trading.md(標準 metadata 報告)
gh-tutorial-qd已產生本詳細教學 md + qd + plain HTML(本流程)
paper-search用「conditional autoencoder asset pricing」找 ch20 對應的 Gu/Kelly/Xiu 2020 paper 全文
paper-qa-lite把書本 + ch20 paper 餵成 corpus,問「conditional autoencoder 在 latent factor 數量怎麼決定?」
graphify對 ml4t repo 跑 graphify,看 notebook 間的 import 關係(不過大多 notebook 自包含,圖不會很豐富)
kami把這份教學的 §5 萃出 24 章單頁 cheat sheet(kami one-pager template)

9.2 量化研究團隊 onboarding 流程

新人 onboarding:

  • Week 1:ch01 + ch04 + ch05(理解 alpha 工作流框架)
  • Week 2:ch06 + ch07 + ch08(古典 ML + backtest 框架)
  • Week 3:ch11 + ch12(從決策樹到 LightGBM intraday strategy)
  • Week 4:依團隊方向選 NLP(ch14-16)/ DL(ch17-21)/ DRL(ch22)

9.3 內訓教材設計範本

每章設計成 2 小時 workshop:

  • 30 min:concept 講解(用該章 README 帶)
  • 60 min:跟著 notebook 跑(先 demo、再讓學員手動跑)
  • 30 min:學員自己改 feature / 改參數、討論結果差異

24 章可以撐 48 小時的講師時數(≈ 6 個 8 小時的訓練日)。

9.4 面試準備

buy-side ML role 的面試常問本書內容。重點章節:

  • ch04 + ch07 + ch12:factor research + IC 評估 + LightGBM(最常考)
  • ch08:backtest 設計考量(survivorship、look-ahead、transaction cost)
  • ch10 + ch20:Bayesian Sharpe / autoencoder factor model(進階)
  • ch24:WorldQuant 101 alphas(高頻常考)

10. 重點摘要 Checklist

學完整本書後應該能:

10.1 概念與框架

  • 能複述 Grinold’s Fundamental Law of Active Management(IR = IC × √Breadth)
  • 能解釋 alpha factor research 的完整 6 步驟工作流
  • 能區分 vectorized backtest vs event-driven backtest 的優劣
  • 能說明金融時間序列為什麼不能用 sklearn KFold、必須用 walk-forward CV
  • 能列舉 backtest 5 大衛生檢查(look-ahead / survivorship / transaction cost / position sizing / multiple testing)

10.2 工具與生態系

  • 會用 alphalens 跑 IC + quantile + turnover 三件套
  • 會用 pyfolio 出 tear sheet
  • 會寫 zipline algo + custom pipeline factor + custom data bundle
  • 會用 LightGBM 訓金融 panel data,並用 SHAP 解釋
  • 會用 MultipleTimeSeriesCV 做 panel data 的 walk-forward CV

10.3 模型與技巧

  • OLS / logistic regression:能跑 Fama-MacBeth 兩階段回歸
  • 時間序列:ARIMA / GARCH / VAR 能挑合適場景;能跑 cointegration test
  • 樹模型:能調 random forest / LightGBM 超參數
  • Bayesian:能用 PyMC3 做 Bayesian Sharpe ratio
  • NLP:能用 spaCy 建 pipeline、用 gensim 訓 LDA / word2vec
  • DL:能搭 feedforward / CNN / LSTM;能套 transfer learning
  • DRL:能設計 trading env + 訓 DQN agent

10.4 工程與系統

  • 能設計可重複的 research notebook 模板
  • 能把離線訓練好的模型嵌入 zipline live signal 流程
  • 能設計 alpha library(如 ch24)並維護版本
  • 知道 production live trading 跟 backtest 的差距在哪

11. 進一步閱讀

11.1 同作者 / 同生態系資源

  • 書本網站https://ml4trading.io
  • Zipline-reloaded docshttps://zipline.ml4trading.io
  • Alphalens-reloaded GitHub:stefan-jansen/alphalens-reloaded
  • Pyfolio-reloaded GitHub:stefan-jansen/pyfolio-reloaded
  • Empyrical-reloaded GitHub:stefan-jansen/empyrical-reloaded
  • 作者 1st edition(2018):PacktPublishing/Hands-On-Machine-Learning-for-Algorithmic-Trading

11.2 配套書 / 延伸書

  • López de Prado, Advances in Financial Machine Learning (Wiley 2018) — 古典 ML 金融特化深度版
  • López de Prado, Machine Learning for Asset Managers (Cambridge 2020) — 簡潔版
  • Ernest Chan, Quantitative Trading / Algorithmic Trading / Machine Trading 三部曲
  • Grinold & Kahn, Active Portfolio Management (McGraw-Hill 2000) — 理論基礎
  • Larry Harris, Trading and Exchanges (Oxford 2003) — market microstructure 聖經

11.3 學術 paper(書中重點引用)

  • Gu, Kelly, Xiu (2020) “Autoencoder Asset Pricing Models” — ch20 復現對象
  • Yoon et al. (2019) “Time-series Generative Adversarial Networks” — ch21 復現對象
  • Kakushadze (2016) “101 Formulaic Alphas” — ch24 復現對象
  • López de Prado (2016) “Building Diversified Portfolios that Outperform Out of Sample” — HRP 原始 paper(ch13)

11.4 開源 alpha / factor library

  • Alphalens-reloaded:因子分析
  • Qlib (Microsoft):替代型量化研究框架
  • VectorBT:高速 vectorized backtest
  • Backtesting.py:lightweight backtest 框架
  • Nautilus Trader:production-grade event-driven framework

11.5 資料來源

  • AlgoSeek — 書本 minute bar 提供商(買書送 sample)
  • SEC EDGAR — XBRL 財報、公開
  • FRED — Fed 經濟資料
  • Quandl / Nasdaq Data Link — 多元 dataset
  • IEX Cloud — 美股即時 + 歷史

📅 教學文件版本:2026-06-02 / 對應 repo commit ≤ 2023-03-05 / 由 AI Knowledge Template Layer 12(gh-tutorial-qd)自動產生

🔐 重要法律提醒:本 repo 無 LICENSE 檔案,所有商用、再散佈、改製成內訓教材的計畫,請先聯絡作者 Stefan Jansen 取得書面授權。本教學文件僅供個人學習與內部參考使用。