進階課程 · Lesson 4
工具選擇取決於策略需要模擬的細節:
向量化回測以整列/整欄陣列運算產生 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,適合大規模陣列研究;但高速不代表執行假設自然正確。
事件驅動架構依序處理 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 假設所有量都能成交,仍會高估容量。
| 層級 | 目的 | 例子 | 不負責什麼 |
|---|---|---|---|
| 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、精度與私有參數差異;「統一」不等於完全相同。
每項 0–2 分:
低分工具不是一定不能用,但應縮小責任範圍。
目前以學習與 ORB 驗證為主:
你應能說明:「我的策略為何需要這個框架的某項能力」,而不是只說「大家都用」或「stars 很多」。