第四階段:進階擴展

模組 13:適配器與擴展如何連接新的交易所、數據源以及擴展系統功能

一、適配器架構

適配器 (Adapter) 是系統與外部世界的橋樑。遵循六角架構(模組 03),核心系統不依賴任何具體的交易所或數據源。

flowchart LR
                        subgraph core["🔷 NautilusTrader 核心"]
                        direction TB
                        de["DataEngine"]
                        ee["ExecutionEngine"]
                        end

                        subgraph ports["📌 端口與適配器"]
                        direction LR
                        binance["Binance"]
                        ib["Interactive Brokers"]
                        custom["Custom Adapter"]
                        end

                        core ==> ports

                        style core fill:#0f1419,stroke:#4fc3f7,stroke-width:2px
                        style ports fill:#0f1419,stroke:#ab47bc,stroke-width:1px
圖 1:端口和適配器架構 — 核心不依賴具體適配器

二、官方支援的適配器(15 個)

適配器類型支援功能備注
Binance加密貨幣現貨 + 期貨,數據 + 執行最成熟的適配器之一
Bybit加密貨幣現貨 + 永續合約支援統一帳戶
OKX加密貨幣現貨 + 合約 + 期權支援多種帳戶模式
Kraken加密貨幣現貨 + 合約歐洲合規交易所
BitMEX加密貨幣永續合約 + 期貨永續合約先驅
Deribit加密貨幣期權 + 期貨最大的加密期權交易所
dYdX v4DeFi去中心化永續合約基於 Cosmos 鏈
HyperliquidDeFi去中心化永續合約高效能 L1 鏈上 DEX
Polymarket預測市場事件合約交易基於以太坊
Interactive Brokers傳統金融股票、期貨、期權、外匯覆蓋最廣的傳統券商
Architect AX傳統金融多市場執行機構級多資產執行
Databento數據供應美股/期貨歷史+即時數據專業級數據(僅數據)
Tardis數據供應加密貨幣歷史 Tick 數據覆蓋 30+ 個交易所(僅數據)
Betfair博彩體育博彩交易獨特的 BettingInstrument
Sandbox內建模擬交易所用於沙箱模式測試
💡 適配器的三種類型

上表中的適配器分三類:
加密貨幣:提供數據 + 執行,可以直接交易
DeFi / 預測市場:去中心化交易,需要錢包
數據供應 / 其他:僅提供數據或特殊交易類型

三、適配器的內部結構

每個適配器通常包含以下組件:

flowchart LR
                        subgraph clients["🔌 客戶端實現"]
                        direction TB
                        dc["Binance Data Client<br/>WebSocket"]
                        ec["Binance Exec Client<br/>REST API"]
                        end

                        subgraph internal["🧩 內部機制"]
                        direction TB
                        config["配置映射"]
                        parsers["數據解析器"]
                        end

                        clients ==> internal

                        style clients fill:#0f1419,stroke:#4fc3f7,stroke-width:1px
                        style internal fill:#0f1419,stroke:#ab47bc,stroke-width:1px
圖 2:一個完整適配器的內部組件

四、自定義 Actor 和 組件

除了策略之外,你可以用 Actor 來擴展系統功能:

📊

數據收集器

建立自定義 Actor 從第三方 API(如新聞、社交媒體)收集數據並發布到 MessageBus。

📧

通知服務

建立 Actor 監聽交易事件,在成交或觸發止損時發送 Telegram/Email 通知。

📈

績效監控

建立 Actor 訂閱所有訂單事件,即時計算和展示策略績效。

🔧

自定義指標

當內建指標不夠用時,可以繼承 Indicator 基類建立自定義指標。

from nautilus_trader.common.actor import Actor
from nautilus_trader.config import ActorConfig


class AlertActorConfig(ActorConfig, frozen=True):
    """通知 Actor 的配置"""
    instrument_id: InstrumentId
    price_threshold: float  # 觸發通知的價格閾值


class AlertActor(Actor):
    """當價格超過閾值時發送通知"""

    def __init__(self, config: AlertActorConfig):
        super().__init__(config)
        self.instrument_id = config.instrument_id
        self.threshold = config.price_threshold

    def on_start(self):
        self.subscribe_quote_ticks(self.instrument_id)

    def on_quote_tick(self, tick):
        if tick.ask_price.as_double() > self.threshold:
            self.log.warning(f"⚠️ 價格突破 {self.threshold}!")
            # 這裡可以加入 Telegram/Email 通知邏輯

五、擴展點一覽

擴展點基類用途
交易策略Strategy實現交易邏輯
通用組件Actor不涉及下單的通用邏輯(監控、通知、數據收集)
數據客戶端DataClient連接新的數據源
執行客戶端ExecutionClient連接新的交易所
技術指標Indicator自定義技術指標計算
撮合模型FillModel自定義回測撮合邏輯

六、互動練習

🧠 練習 1:設計一個通知 Actor

設計一個 Actor,當你的策略的持倉盈虧超過帳戶的 5% 時,發出警告日誌。你需要訂閱什麼數據?讀取什麼緩存?

設計思路:

  1. on_start:
    • self.subscribe_quote_ticks(instrument_id) # 訂閱報價更新
  2. on_quote_tick:
    • unrealized = self.portfolio.unrealized_pnl(instrument_id)
    • account = self.cache.account(account_id)
    • balance = account.balance_total(Currency.from_str("USDT"))
    • pnl_ratio = abs(unrealized / balance)
    • if pnl_ratio > 0.05:
          self.log.warning(f"⚠️ 持倉盈虧超過 5%: {pnl_ratio:.1%}")

💡 關鍵點:

  • Actor 不能下單,所以它只負責監控和通知
  • 如果需要自動平倉,應該在 Strategy 中實現
  • 可以加入冷卻期,避免重複報警
🧠 練習 2:選擇適配器

以下場景,你會選擇哪個適配器?

  1. 你想交易美股和期貨
  2. 你想交易 BTC 永續合約,且費率要低
  3. 你想用歷史的加密 Tick 數據做回測
  4. 你想交易 BTC 期權
  1. Interactive Brokers ← 覆蓋最廣的傳統市場
  2. Bybit 或 Binance ← 兩者都支援永續合約,費率具競爭力
  3. Tardis ← 專注加密歷史數據,覆蓋 30+ 交易所
  4. Deribit ← 最大的加密期權交易所

💡 也可以組合使用:

Tardis (數據) + Deribit (執行) = 用歷史數據回測 + 實盤交易

🧠 練習 3:自定義指標設計

你想建立一個「VWAP 偏離度」指標:計算當前價格距 VWAP 的百分比偏差。想想你需要繼承哪個基類,實現哪些方法?

設計:

  1. 繼承 Indicator 基類
  2. 實現 handle_bar(bar) 方法
  3. 內部維護:
    • cumulative_volume += bar.volume
    • cumulative_value += bar.close * bar.volume
    • vwap = cumulative_value / cumulative_volume
    • self.value = (bar.close - vwap) / vwap * 100
  4. 重置方法:reset() 清零累計值

💡 自定義指標很強大:
你可以建立任何指標,然後在策略中像用內建指標一樣使用它

七、本模組重點回顧

📋 關鍵點
  1. 六角架構使得添加新適配器不需要修改核心代碼
  2. 15 個官方適配器覆蓋加密貨幣、傳統金融、DeFi、博彩、預測市場、數據供應
  3. Actor:不涉及下單的通用邏輯組件
  4. 6 個擴展點:Strategy、Actor、DataClient、ExecutionClient、Indicator、FillModel
  5. 每個適配器包含配置、數據客戶端、執行客戶端、解析器
🎉 恭喜!你已完成所有 13 個模組

你現在對 NautilusTrader 的架構、組件、策略開發和部署有了全面的理解。
下一步建議:

  1. 從 ema_cross.py 範例開始動手實踐
  2. 用回測系統測試你的第一個策略
  3. 加入 NautilusTrader 社區,閱讀官方文檔的進階內容