模組 01:為什麼選擇 NautilusTrader 理解量化交易的挑戰,以及這個框架如何解決它們
一、量化交易的核心挑戰
在你開始了解 NautilusTrader 之前,先來看看量化交易中最常見的「坑」。 這些不是技術問題,而是每一個做量化交易的人都會遇到的實際痛點:
回測和實盤不一致
用 Python 做回測結果很好,但換成 C++ 或 Java 寫實盤代碼後,結果完全不同。因為回測和實盤是兩套完全不同的代碼。
速度不夠快
Python 好學好用,但速度慢。高頻策略需要微秒級的執行速度,純 Python 根本做不到。
難以擴展
一開始只交易一個交易所,後來想加更多交易所或資產類別,整個代碼就要重寫。
數據靜默錯誤
一個錯誤的價格數據沒被發現,策略用錯誤的價格下了單,造成不可逆的虧損。
重複造輪子
每次新策略都要從零開始寫訂單管理、風控、數據處理、持倉追蹤。大量時間花在基礎設施而非策略本身。
風險管控薄弱
沒有系統化的風控,一個 bug 就可能導致無限下單。凌晨出問題時沒人發現。
如果你曾經用 Excel 或 Python 腳本做過回測,你一定遇過第一個問題 — 回測賺錢但實盤虧錢。這在量化圈叫做「回測-實盤落差」(Backtest-Live Gap)。NautilusTrader 的最大賣點就是解決這個問題。
二、NautilusTrader 是什麼
NautilusTrader 是一個開源的、高性能的、可用於生產環境的算法交易平台。 它的核心理念可以用一句話概括:
它由澳洲的 Nautech Systems 公司開發和維護,使用 LGPL v3.0 開源許可。核心用 Rust 編寫(追求極速和安全),外層用 Python 封裝(方便使用和研究)。
三、核心優勢一覽
極速
核心用 Rust 編寫,配合 Tokio 非同步網絡。在保持 Python 易用性的同時,獲得接近 C++ 的性能。
回測 = 實盤
策略代碼在回測和實盤中完全一致,不需要任何修改。徹底消除「回測-實盤落差」。
可靠安全
Rust 保證類型安全和線程安全。Fail-Fast 策略確保錯誤數據立即被發現,不會靜默傳播。
模組化可擴展
適配器架構可以接入任何 REST API 或 WebSocket。想加新交易所?只需寫一個適配器。
功能全面
9 種訂單類型、18 種 Bar 聚合方式、條件單(OCO/OTO/OUO)、冰山訂單、移動止損、TWAP 算法 — 一應俱全。
AI 友好
回測引擎足夠快,可以直接用來訓練 AI 交易代理(強化學習/進化策略)。
四、支援的資產和交易所
4.1 支援的資產類別
NautilusTrader 是資產類別無關的設計,理論上可以交易任何東西:
| 資產類別 | 說明 | 例子 |
|---|---|---|
| 🏦 外匯 (FX) | 貨幣對交易 | EUR/USD, GBP/JPY |
| 📈 股票 (Equities) | 股票交易 | AAPL, TSLA |
| 📋 期貨 (Futures) | 期貨合約 | ES, NQ, CL |
| 🎰 期權 (Options) | 期權合約 | 股票期權、指數期權 |
| 🪙 加密貨幣 (Crypto) | 中心化及去中心化交易所 | BTC, ETH |
| 🌐 DeFi | 去中心化金融協議 | dYdX, Hyperliquid |
| 🏇 博彩 (Betting) | 運動賽事博彩交易 | Betfair |
| 🔮 預測市場 | 預測市場交易 | Polymarket |
4.2 已整合的交易所和數據源
截至目前,NautilusTrader 已經有 15 個官方整合適配器:
| 名稱 | 類型 | 狀態 |
|---|---|---|
| 🟢 Binance(幣安) | 加密貨幣交易所 | 穩定 |
| 🟢 Bybit | 加密貨幣交易所 | 穩定 |
| 🟢 OKX | 加密貨幣交易所 | 穩定 |
| 🟢 Interactive Brokers(盈透) | 券商(多市場) | 穩定 |
| 🟢 BitMEX | 加密貨幣交易所 | 穩定 |
| 🟢 dYdX | 去中心化交易所 | 穩定 |
| 🟢 Betfair | 博彩交易所 | 穩定 |
| 🟢 Polymarket | 預測市場 | 穩定 |
| 🟢 Databento | 數據供應商 | 穩定 |
| 🟢 Tardis | 加密貨幣數據 | 穩定 |
| 🟢 Deribit | 加密貨幣期權交易所 | 穩定 |
| 🟢 Kraken | 加密貨幣交易所 | 穩定 |
| 🟢 AX Exchange | 傳統金融(多市場執行) | 穩定 |
| 🟢 Hyperliquid | 去中心化永續合約 | 穩定 |
不管你交易哪個市場、哪個交易所,你的策略代碼都是一樣的。只需要切換適配器,就能把同一個策略從幣安切到盈透,從加密貨幣切到股票期貨。
五、為什麼用 Rust + Python?
這是一個很重要的設計決策。NautilusTrader 不是純 Python,也不是純 Rust, 而是「Rust 核心 + Python 封裝」的混合架構:
flowchart LR
subgraph python_layer["🐍 Python 層 — 你寫策略的地方"]
direction TB
p_strategy["策略代碼 Python"]
p_config["配置 Python"]
p_analysis["分析/研究 Python"]
p_strategy --- p_config --- p_analysis
end
subgraph cython_layer["🔗 Cython/PyO3 橋接層"]
direction TB
bindings["C 擴展模組<br/>類型安全介面"]
end
subgraph rust_layer["🦀 Rust 核心 — 高性能引擎"]
direction TB
r_engine["交易引擎"]
r_model["領域模型"]
r_infra["網絡與序列化"]
r_engine --- r_model --- r_infra
end
python_layer --> cython_layer
cython_layer --> rust_layer
style cython_layer fill:#1a1f2e,stroke:#ab47bc,stroke-width:2px
style python_layer fill:#0f1419,stroke:#4fc3f7,stroke-width:1px
style rust_layer fill:#0f1419,stroke:#ef5350,stroke-width:1px
| 層次 | 語言 | 負責什麼 | 為什麼用這個語言 |
|---|---|---|---|
| 核心引擎 | Rust | 領域模型、消息總線、緩存、序列化、網絡 IO | 極速、記憶體安全、線程安全、零成本抽象 |
| 橋接層 | Cython / PyO3 | 將 Rust 功能暴露為 Python 可調用的介面 | 讓 Python 直接調用 Rust 編譯的二進制代碼 |
| 使用者層 | Python | 策略編寫、配置、數據分析、研究 | 簡單易用、機器學習生態、快速迭代 |
想像你開一輛賽車:Rust 是引擎(追求極致性能和安全),Python 是方向盤和儀表板(你只需要握住方向盤就能駕駛,不需要懂引擎內部怎麼運作)。
六、和其他平台對比
| 特性 | NautilusTrader | zipline | backtrader | QuantConnect |
|---|---|---|---|---|
| 核心語言 | Rust + Python | Python | Python | C# + Python |
| 回測-實盤一致性 | ✅ 完全一致 | ❌ 僅回測 | ❌ 分離 | ⚠️ 部分 |
| 性能 | 🟢 極高 | 🔴 低 | 🔴 低 | 🟡 中等 |
| 事件驅動 | ✅ 是 | ❌ 向量化 | ✅ 是 | ✅ 是 |
| 多交易所 | ✅ 15 | ❌ 無 | ❌ 少 | ✅ 多 |
| 開源 | ✅ LGPL v3 | ✅ 是 | ✅ 是 | ⚠️ 部分 |
| 類型安全 | ✅ Rust 保證 | ❌ 無 | ❌ 無 | ✅ C# 靜態 |
| 納秒精度 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
七、三種使用場景
NautilusTrader 支援三種使用場景,涵蓋了策略開發的完整生命週期:
flowchart LR
subgraph backtest["📊 回測 (Backtest)"]
direction TB
bt_in["歷史數據"] --> bt_eng["模擬引擎"] --> bt_out["績效報告"]
end
subgraph sandbox["🏖️ 沙箱 (Sandbox)"]
direction TB
sb_in["即時數據"] --> sb_eng["模擬執行"] --> sb_out["虛擬盈虧"]
end
subgraph live["🔴 實盤 (Live)"]
direction TB
lv_in["即時數據"] --> lv_eng["真實執行"] --> lv_out["真實盈虧"]
end
backtest -->|"策略驗證通過"| sandbox
sandbox -->|"確認一切正常"| live
style backtest fill:#0f1419,stroke:#4fc3f7,stroke-width:1px
style sandbox fill:#0f1419,stroke:#ffa726,stroke-width:1px
style live fill:#0f1419,stroke:#ef5350,stroke-width:1px
| 場景 | 數據源 | 交易執行 | 適用時機 |
|---|---|---|---|
| 📊 回測 | 歷史數據 | 模擬交易所 | 開發新策略、驗證想法、調整參數 |
| 🏖️ 沙箱 | 即時市場數據 | 模擬交易所 | 用真實市場數據測試,但不動真錢 |
| 🔴 實盤 | 即時市場數據 | 真實交易所 | 正式上線,真金白銀交易 |
策略在這三個場景中的代碼完全一樣。你只需要切換配置,而不是重寫代碼。這就是 NautilusTrader 最強大的地方。
八、NautilusTrader 的名字由來
「Nautilus」來自古希臘語,意思是「水手」(nautilus = sailor, naus = ship)。 鸚鵡螺(Nautilus)的殼由模組化的腔室組成,其生長因子接近對數螺旋。 這個理念被轉化為框架的設計美學 —— 模組化、可擴展、優雅成長。
就像鸚鵡螺的殼一樣,NautilusTrader 的架構也是一個個「腔室」(模組)組成的。每個模組獨立但連接,整體形成一個優雅的螺旋結構。你可以只用幾個模組,也可以使用全部。
九、互動練習
根據你目前的交易情況,回答以下問題:
- 你目前交易哪些市場?(加密貨幣、股票、期貨?)
- 你是否遇過回測賺錢但實盤虧錢的情況?
- 你對交易系統最重要的需求是什麼?(速度?穩定性?容易使用?)
💬 這些問題沒有標準答案,但你的回答會決定你在後面的模組中應該特別關注哪些部分。
根據本模組學到的內容,列出 NautilusTrader 最吸引你的 三個特點,並解釋為什麼。
十、本模組重點回顧
- NautilusTrader 解決的核心問題:消除「回測-實盤落差」
- 雙語架構:Rust 核心(性能)+ Python 封裝(易用)
- 資產無關設計:支援 FX、股票、期貨、期權、加密貨幣、DeFi、博彩
- 15 個整合:涵蓋主流交易所和數據源
- 三種場景:回測 → 沙箱 → 實盤,代碼完全一致
- 模組化設計:像鸚鵡螺的殼一樣,可以靈活組合和擴展