Lesson 0
起點:一份清單,不是一份驗證
awesome-systematic-trading(GitHub 12,436 顆星)把量化交易的入門資源攤開成四類:套件與函式庫 97 個、策略 40+ 個(標 Sharpe、波動率、再平衡頻率)、書單 55 本、影片訪談 23 支。
加密貨幣工具排行最實用的五個:ccxt(100+ 交易所統一 API,建議先裝這個當基礎)、Freqtrade、Jesse、Hummingbot、Cryptofeed。
先立這條規矩
這份清單的角色是「工具與研究題目的索引」,不等於任何一項已經過獨立驗證。後面十六堂課,是把「怎麼從一個想法走到能上實單」的完整流程攤開,這份清單只是其中一站。
Lesson 1
量化交易的完整流程
量化交易不是預測價格,核心是:在明確條件下,重複執行具有正期望值的決策,並控制錯誤時的損失。
任何一層說不清楚,漂亮的回測都可能沒有意義。Lesson 2 到 8,就是把這六格逐一放大來看。
Lesson 2
Hypothesis:報酬從哪裡來
研究假設必須回答四個問題:這個現象為什麼可能存在?誰提供了你的報酬?為什麼它不會立即被套利消失?什麼情況下應該失效?
「RSI 低於 30 就買」不是完整假設,只是指標規則——它沒有說明報酬來源。常見的 alpha 來源有五種:
- Risk premium(風險溢酬)——承擔別人不願承擔的風險
- Behavioral bias(行為偏誤)——過度反應、反應不足
- Structural constraint(結構限制)——基金再平衡、被迫交易
- Information diffusion(資訊擴散)——資訊尚未立即反映
- Liquidity provision(流動性提供)——承接短期買賣壓力
追問
若說不出合理機制,策略較可能只是 data mining(資料探勘)湊出來的結果——這也是 Lesson 11「防止 overfitting」要處理的核心問題。
Lesson 3
Data:只能用當下已知的資訊
回測只能使用交易當下已經知道的資料。策略在時間 t 做決策,只能用「當時已公開、已確定」的資訊——不能用 t 之後才形成、公布或修訂的資料。
最低限度要定義:市場與商品、資料頻率、時區、交易日曆、價格是否經 corporate action(公司行動)調整、是否包含已下市商品、資料何時真正發布。
由此衍生三個最常見的資料偏誤:
- Survivorship bias(倖存者偏誤)——資料只留下活到現在的標的,倒閉、下市的沒算進去,績效系統性偏高
- Look-ahead bias(前視偏誤)——用了在當時時間點根本還不存在的資訊,例如財報標示為第一季不代表季末當天就已公開,用當日收盤價決定「以同一個收盤價成交」也是典型例子
- Selection bias(選擇偏誤)——先看過結果才把策略放進清單,清單本身就是倖存者
Lesson 4
Signal:把想法寫成無歧義規則
訊號必須完全沒有語意模糊。「NVDA 強勢突破 opening range 就買」是模糊版本,無法回測。
可回測版本要定義清楚:使用哪個時間窗的哪個價格欄位定義關卡(例如美東時間 09:30–09:44 這 15 根 1-minute bars 的最高價,定義 opening-range high);突破多少才算(例如收盤價高於該高點 0.1%);在哪根 K 棒成交(例如訊號 K 棒之後的下一根開盤);一天最多觸發幾次;缺資料或 trading halt(暫停交易)時如何處理。
陷阱
某根 K 棒 high 是 101、close 是 100.8:策略看到 close 突破 100.5 後,不可能回頭用該根 K 棒的 100.5 成交。策略若無法寫成明確規格,就無法可靠回測。
Lesson 5
Position:部位怎麼決定
訊號只回答「想不想交易」,position sizing(部位配置)回答「承擔多少風險」。即使訊號完全相同,不同 sizing 也會產生完全不同的 drawdown。
常見方法:固定股數、固定資金比例、固定單筆風險、volatility targeting(波動率目標)、portfolio risk allocation(投資組合風險配置)。
以固定單筆風險為例:資金 100,000 美元、每筆最大風險為帳戶的 0.5%(=500 美元)、進場價 100 美元、stop 設在 98 美元(每股風險 2 美元):
Lesson 6
Execution:回測怎麼假設成交
回測不能假設每次都以理想價格成交。需要定義:market 或 limit order、訊號產生後何時送單、用 next-bar open、VWAP 還是其他成交模型、未成交與部分成交如何處理。
三種常被忽略的隱藏成本:
- Fees——交易所/券商手續費
- Slippage——滑價,實際成交價跟想下單的價格之間的落差;再加上 bid–ask spread(買賣價差)與 market impact(市場衝擊)
- Funding/borrow cost——資金成本或借券成本,尤其做空、槓桿、永續合約策略特別重要
沒扣這三項的回測,等於沒把運費算進去的網購比價——看起來划算,結完帳不是那回事。合理的最簡成交模型通常是:訊號於本根 K 棒收盤確認,最早於下一根 K 棒成交。
Lesson 7
組裝:一個策略的最小規格
把 Lesson 2 到 6 的答案填進同一張表,才算是一個可以開始實作的策略。以一個假設性的 NVDA ORB(開盤區間突破)為例:
- 市場
- NVDA,美股正常交易時段
- 資料
- 1-minute OHLCV,美東時間,納入拆股處理
- Opening range
- 09:30–09:44
- 進場
- 09:45 後第一根收盤價高於 opening-range high 0.1% 的 K 棒,於下一根 K 棒開盤買進
- 部位
- 每筆最多承擔帳戶淨值 0.5% 的風險
- 出場
- 初始 stop 為 opening-range low,或 15:45 強制平倉,以先發生者為準
- 成本
- 每次成交加入 spread、commission 與 slippage
- 限制
- 每天最多交易一次;不持倉過夜;交易暫停日不交易
- 驗證
- 依時間切割 train/validation/test,另與 buy-and-hold 及隨機進場比較
Lesson 8
Evaluation:績效怎麼算、跟誰比
Sharpe = (策略報酬 − 無風險利率) ÷ 報酬的標準差——每承受一分波動,換到多少超額報酬。清單裡 40+ 策略,沒有一個 Sharpe 超過 1:
| 策略 | 類別 | Sharpe | 波動率 |
|---|---|---|---|
| Overnight Seasonality in Bitcoin | 加密 | 0.892 | 20.8% |
| Asset Growth Effect | 股票 | 0.835 | 10.2% |
| Short Term Reversal Effect in Stocks | 股票 | 0.816 | 21.4% |
| Reversal During Earnings-Announcements | 股票 | 0.785 | 25.7% |
不同策略若採用不同期間、risk-free rate、交易成本、年化方式,Sharpe 不能直接橫向排名比較。單一指標也永遠能被優化到好看卻沒有意義,要一起看:
- Sortino——只算下檔波動,不懲罰「往上噴」的波動
- Calmar——報酬 ÷ 最大回撤
- Drawdown duration——套牢多久才回本,不只是賠多深
- Tail risk——黑天鵝情境下會多慘
- 策略間 correlation——手上一堆策略會不會其實都在賭同一件事
最重要的比較:跟 benchmark 比
NVDA 多頭策略表現很好,可能只是因為 NVDA 本身長期上漲、策略大部分時間持有 NVDA——真正報酬來自 beta,不是訊號本身。要比較:buy and hold、相同曝險比例的 buy and hold、隨機但相同持有時間的進場、簡單規則基準。
Lesson 9
回撤、換手率、容量
三個決定「這個策略在真實世界能不能活下去」的數字。
- Max drawdown——策略最慘會賠掉多少;你抱不抱得住,決定策略能不能撐到均值回歸那天
- Turnover——換手率,換手越高吃掉的交易成本越兇,跟 Lesson 6 直接連動
- Capacity——策略能裝多少資金;機構版本測出來的 Sharpe,你的小資金不見得吃得到,你的小資金能做的滑價假設也未必適用機構規模
Lesson 10
Out-of-sample/Walk-forward
問一句話就能戳破大部分「漂亮回測」:這個 Sharpe 是在沒看過的資料上測出來的,還是在同一段歷史資料上反覆調參調出來的?
反覆調參的回測,本質上是拿到答案卷練習過後,自己再出一張考卷替自己打分數——數字當然好看。Walk-forward 測試(用一段資料訓練、下一段沒碰過的資料驗證,滾動前進)才是比較誠實的檢驗方式。
Lesson 11
防止 Overfitting 的進階檢驗
Walk-forward 只是第一關。更嚴謹的做法要處理「你到底試了幾次」這件事。
- Train/validation/test 三段切割——訓練找規則、驗證挑參數、測試只用一次做最終確認,三段資料互不重疊
- Parameter sensitivity(參數敏感度)——把參數微調 ±10% 績效就崩潰,代表策略是在某個巧合的參數點被「調」出來的,不是真的有效
- Multiple testing/data snooping——同一份資料上測過越多參數組合或越多策略,純粹靠運氣冒出一個「看起來很好」的機率就越高,必須針對「試了幾次」做校正
- Deflated Sharpe Ratio(DSR)——把觀察到的 Sharpe,依「測試過幾次」「報酬分布是否常態(偏態、峰度)」「樣本長度」打折,估出真實 Sharpe 大於零的機率
- Probability of Backtest Overfitting(PBO)——估計「你挑出來的最佳策略,樣本外表現輸給候選組中位數」的機率,直接衡量挑選過程本身有沒有過擬合
連結 Lesson 2
說不出機制的策略,最容易死在這一關——沒有 hypothesis 撐腰的規則,很難分辨「真訊號」跟「測了很多次剛好中一次」。
Lesson 12
發表即衰減(Post-publication decay)
學術策略一旦發表、被大量複製,超額報酬通常會衰減甚至消失——市場會把它套利掉。
清單上的 Sharpe,是「論文發表當下」那次回測的值,不是「你今天照做」還能拿到的報酬。策略區的表格也只是舊版快照,完整實作要去 paperswithbacktest.com,部分內容需要付費。
Lesson 13
策略組合與風險管理
單一策略驗證過關,不代表放進投資組合後行為一樣。
- Volatility targeting(波動率目標)——依近期實現波動率反向調整部位大小,讓風險貢獻不隨市場波動狀態亂跳
- Correlation 與 conditional correlation——平常看起來低相關的策略,往往在市場壓力時相關性同步飆高,分散效果剛好在最需要的時候消失
- Portfolio-level drawdown——組合回撤不等於各策略回撤的簡單平均,要用合併後的權益曲線重新模擬
- 同一因子的不同外觀——幾個「看起來不同」的策略,可能其實都只是同一個風險因子(例如都在賭 BTC beta)包裝成不同規則,會一起崩
Lesson 14
工具怎麼選
不看 GitHub star 數。看三件事:
- 維護狀態——最後一次 commit 是什麼時候,超過兩年直接跳過
- 資料品質——資料源可不可信、有沒有處理除權息/前視問題
- Execution realism——模擬撮合有沒有貼近真實市場(滑價模型、訂單簿深度)
工具本身也在腐爛
97 個工具裡,Zipline、Quantopian 相關工具特別明顯已無人維護。清單常見分類:vectorized 回測框架(速度快、假設較粗,如 vectorbt)vs event-driven 框架(貼近真實下單流程,較慢,如 Backtrader);加密貨幣則靠 ccxt 統一交易所 API、Freqtrade 做完整實盤機器人。清單不會替你篩掉腐爛的部分,這件事要自己做。
Lesson 15
從研究到實單:Paper Trading Checklist
通過 Lesson 8–13 的檢驗,還不等於可以直接下真錢。
- Research checklist——足夠長的 out-of-sample 歷史、walk-forward 穩定、扣完真實成本後 Sharpe 仍為正、drawdown 在能接受的範圍、容量對得上你打算投入的資金規模
- Acceptance criteria——上線前先訂死門檻:最低 OOS Sharpe、最大可接受 drawdown、最少獨立交易筆數、與既有組合的相關性上限
- Shadow/paper account——用即時資料跑策略、產生假設性(或極小額真實)交易,先抓實作 bug 跟資料源落差,再投入完整資金
- Live vs backtest divergence monitoring——持續追蹤實單的 Sharpe、滑價是否偏離回測假設;如果實單滑價持續超出回測假設,就要重新檢驗
- 何時淘汰策略——用事先訂好的 drawdown/時間門檻判斷,而不是「現在正在賠錢」;如果 Lesson 2 找到的報酬機制本身已經結構性改變(法規、市場微結構變化),也是淘汰訊號
Lesson 16 · 綜合演練
把整套流程,套在清單裡分數最高的那個策略上
Overnight Seasonality in Bitcoin——清單裡 40+ 策略中 Sharpe 最高:0.892,波動率 20.8%。現在用前面十六課的問題,逐項過一遍。
| 檢查項 | 公開清單有揭露嗎 | 該去哪裡查 |
|---|---|---|
| Hypothesis 機制(Lesson 2) | 未揭露 | 日曆效應通常歸類 behavioral bias/structural constraint(例如亞洲時段機構下單模式)——原始論文有沒有講清楚機制 |
| Out-of-sample/walk-forward(Lesson 10) | 未揭露 | 回原始論文或 paperswithbacktest.com 的完整實作 |
| Overfitting/multiple testing(Lesson 11) | 未揭露 | 日曆效應類最容易撞上——是先篩出「有效果」的時段/幣種才發表的嗎? |
| Fees/slippage/funding cost(Lesson 6) | 未揭露 | 自行拿交易所實際費率+(若用永續合約)funding rate 重算——「隔夜」策略最怕被 funding cost 吃掉大半優勢 |
| Max drawdown/capacity(Lesson 9) | 未揭露 | 自己拿歷史資料重跑回測 |
| Post-publication decay(Lesson 12) | 未揭露 | 日曆效應一旦公開,套利者會直接卡在那個時間點進出,是 decay 風險最高的一類 |
結論:0.892 不是答案,是「值得繼續問下去的起點」。清單能給你的到此為止,剩下六格「未揭露」——外加把它組成一個像 Lesson 7 那樣的完整規格、跑過 Lesson 15 的上線檢查——才是真正要花時間的地方。