quant-lit進階課程 ▸ Lesson 4

進階課程 · Lesson 4

Lesson 4:回測架構與工具選型

來源:Codex 製作

學習目標

1. 先定義問題,再選框架

工具選擇取決於策略需要模擬的細節:

2. Vectorized backtest

向量化回測以整列/整欄陣列運算產生 position 與 return,例如:

signal = close > close.rolling(20).mean()
position = signal.shift(1).astype(float)
strategy_return = position * close.pct_change()

shift(1) 表示今天收盤產生的訊號,最早從下一期承擔報酬。優點是快速、透明、適合 parameter sweep;缺點是複雜 order state、部分成交、同 bar 路徑與資金競爭較難真實建模。

VectorBT 的官方文件顯示其 Portfolio 物件可建立 position、equity curve、基本交易成本、orders、trades 與 drawdowns,適合大規模陣列研究;但高速不代表執行假設自然正確。

3. Event-driven backtest

事件驅動架構依序處理 market event、signal、order、fill、portfolio update。它較接近實際交易系統:

新 bar/tick → 更新資料 → 策略決策 → 建立訂單
→ broker 模擬撮合 → 回報 fill/reject/partial → 更新部位

Backtrader 官方訂單文件明確區分 Submitted、Accepted、Partial、Completed、Canceled 等狀態;一般 market order 在回測中於下一個可用價格、通常下一 bar open 成交。LEAN 則是模組化的開源研究、回測與 live engine。

代價是程式較複雜、速度較慢,且「event-driven」仍不保證真實:若 broker model 假設所有量都能成交,仍會高估容量。

4. 四層工具地圖

層級 目的 例子 不負責什麼
Data/API 抓行情、下單介面 CCXT、vendor SDK 不自動保證資料品質
Research 特徵、統計、快速回測 pandas、NumPy、vectorbt 不必然模擬完整訂單生命週期
Engine 事件、portfolio、broker model Backtrader、LEAN 不保證預設參數符合你的市場
Bot/Operations 排程、dry-run、監控 Freqtrade 等 不替策略創造 alpha

CCXT 官方 manual 提供多交易所 unified API,但各交易所仍有 market id、pagination、rate limit、funding、精度與私有參數差異;「統一」不等於完全相同。

5. 工具選型評分表

每項 0–2 分:

低分工具不是一定不能用,但應縮小責任範圍。

6. Evan 的合理路線

目前以學習與 ORB 驗證為主:

  1. 先以 pandas 教學回測建立可讀 baseline。
  2. 用自寫測試確認 signal timing、成本與 position。
  3. 參數探索增加時,再考慮 vectorbt。
  4. 需要 order lifecycle 或 paper/live parity 時,才升級 event-driven engine。
  5. Vibe-Trading/QuantDinger 可作工作介面,但不能取代 data audit 與獨立驗證。

通關判準

你應能說明:「我的策略為何需要這個框架的某項能力」,而不是只說「大家都用」或「stars 很多」。

上一課Lesson 3