第五階段:動手 Lab

Lab 02:接入 Binance 沙箱動手實作:連接真實交易所的測試環境,體驗「實盤」的感覺

目標

  1. 申請 Binance Testnet (Futures) API Key
  2. 配置 TradingNode 連接沙箱環境
  3. 運行簡單的策略進行模擬交易
  4. 觀察控制台日誌和訂單狀態
⚠️ 前置條件

你需要一個能訪問 Binance 測試網的網路環境(部分地區可能需 VPN)。
你需要安裝 Redis(Docker 或本地安裝)。

步驟 1:申請 API Key

  1. 訪問 Binance Futures Testnet。
  2. 註冊/登入帳號。
  3. 在頁面下方找到 API Key 和 Secret Key。
  4. 保存好這兩組金鑰!

步驟 2:配置 .env 文件

為了安全,我們不要把 Key 寫在代碼裡。創建一個 .env 文件:

BINANCE_API_KEY=你的API_KEY
BINANCE_API_SECRET=你的SECRET_KEY

安裝 python-dotenv:

pip install python-dotenv

步驟 3:編寫啟動腳本 (run_sandbox.py)

import os
from dotenv import load_dotenv
from decimal import Decimal

from nautilus_trader.live.node import TradingNode
from nautilus_trader.live.config import (
    TradingNodeConfig,
    LiveDataEngineConfig,
    LiveExecEngineConfig,
)
from nautilus_trader.adapters.binance.config import (
    BinanceLiveDataClientConfig,
    BinanceLiveExecClientConfig,
)
from nautilus_trader.model.enums import AccountType, OmsType
from nautilus_trader.model.identifiers import TraderId

# 1. 載入環境變量
load_dotenv()
API_KEY = os.getenv("BINANCE_API_KEY")
API_SECRET = os.getenv("BINANCE_API_SECRET")

# 2. 構建配置
node_config = TradingNodeConfig(
    trader_id=TraderId("SANDBOX-001"),
    
    # 資料客戶端 (接收行情)
    data_clients={
        "BINANCE": BinanceLiveDataClientConfig(
            api_key=API_KEY,
            api_secret=API_SECRET,
            usdt_futures=True,  # 使用 U 本位合約
            testnet=True,       # !重要! 連接測試網
        ),
    },
    
    # 執行客戶端 (下單)
    exec_clients={
        "BINANCE": BinanceLiveExecClientConfig(
            api_key=API_KEY,
            api_secret=API_SECRET,
            usdt_futures=True,
            testnet=True,
        ),
    },
    
    # 引擎配置
    data_engine=LiveDataEngineConfig(time_bars_feed_only=True), # 僅訂閱 1m K線以節省流量
    exec_engine=LiveExecEngineConfig(reconciliation=True),      # 啟用對帳
)

# 3. 創建節點
node = TradingNode(config=node_config)

# 4. 定義一個簡單的打印策略 (用於測試連接)
from nautilus_trader.trading.strategy import Strategy
from nautilus_trader.config import StrategyConfig

class PrintBarStrategy(Strategy):
    def on_bar(self, bar):
        self.log.info(f"收到 Bar: {bar}")

# 5. 添加策略
config = StrategyConfig(instrument_id="BTCUSDT-PERP.BINANCE")
node.trader.add_strategy(PrintBarStrategy(config))

# 6. 運行!
if __name__ == "__main__":
    node.run()

步驟 4:運行結果

運行腳本後,你應該會在控制台看到類似輸出:

[INFO] Node: Starting...
[INFO] TradingNode: Connecting to data clients...
[INFO] BinanceLiveDataClient: Connected to wss://stream.binancefuture.com...
[INFO] TradingNode: Connecting to execution clients...
[INFO] BinanceLiveExecClient: Connected...
[INFO] TradingNode: Starting strategies...
[INFO] PrintBarStrategy: 收到 Bar: Bar(BTCUSDT-PERP.BINANCE, ...)
...
🎉 成功連接!

這意味著你的 NautilusTrader 已經成功連上了 Binance 的服務器,並且開始接收實時數據了。這就是實盤交易的基礎!

作業

📝 挑戰任務

1. 將 Lab 01 中的 EMA Cross 策略移過來,配置到 run_sandbox.py 中。

2. 嘗試修改 trade_size 為 0.001 BTC,並觀察是否能成交(注意 Binance 的最小下單數量)。

3. 在 Binance 測試網的網頁端查看你的帳戶,確認訂單是否真的出現了。