這兩者的差別在於
Live : 用真實數據和真實交易所
Sandbox : 用真實數據和虛擬交易所
底下先來介紹 Sandbox 的使用方式
因為需要使用真實數據,記得先去註冊Binance帳號,然後獲取相API KEY跟API_SECRET_KEY
底下說明的是 nautilus_trader/examples/sandbox/binance_spot_futures_sandbox.py
程式啟動一個 TradingNode,連上 Binance 現貨與期貨的即時資料流,在 Sandbox 執行端建立兩個模擬帳戶(Spot/Futures),但沒有撰寫策略,只有輸出tick資料而已.
config_node = TradingNodeConfig(
...
data_clients={ "BINANCE_FUTURES": BinanceDataClientConfig(...), "BINANCE_SPOT": BinanceDataClientConfig(...) },
exec_clients={ "BINANCE_FUTURES": SandboxExecutionClientConfig(...), "BINANCE_SPOT": SandboxExecutionClientConfig(...) },
)
Data clients 使用 BinanceDataClientConfig(testnet=False):
代表會連 Binance 真實網的資料端抓 Live 行情(包含 instruments、WS ticks)。
Exec clients 使用 SandboxExecutionClientConfig:
下單不會送到 Binance,而是本地模擬撮合。
確認一下連接是否正常,在終端運行
uv run examples/sandbox/binance_spot_futures_sandbox.py
理論上的輸出應該會像底下這樣
首先先輸出模擬賬戶資金
接者,輸出tickdata
都沒問題的話,就可以撰寫你的策略試看看
那其實Sandbox做的事情就是
詳細細節,我們在之後底層架構的時候會再提到
這裡使用
nautilus_trader/examples/live/binance/binance_spot_and_futures_market_maker.py
和Sandbox不同的地方就是
exec_clients={
"BINANCE_SPOT": BinanceExecClientConfig(..., testnet=False),
"BINANCE_FUTURES": BinanceExecClientConfig(..., testnet=True),
}
這裡的testnet是指交易所提供的測試網,前面的Sandbox是在我們本地端的虛擬交易所.
spot_symbol = "ETHUSDT"
strat_config_spot = VolatilityMarketMakerConfig(
instrument_id=InstrumentId.from_str("ETHUSDT.BINANCE_SPOT"),
external_order_claims=[InstrumentId.from_str("ETHUSDT.BINANCE_SPOT")],
bar_type=BarType.from_str("ETHUSDT.BINANCE_SPOT-1-MINUTE-LAST-INTERNAL"),
atr_period=20,
atr_multiple=6.0,
trade_size=Decimal("0.010"),
client_id=ClientId("BINANCE_SPOT"),
)
這裡簡單說明一下,上面的策略
這個策略是一個基於波動率的市場做市商(Volatility Market Maker),主要目的是在市場中同時掛買單和賣單,利用市場的波動性(ATR指標)來決定掛單價格的距離,從而賺取買賣價差(spread)。
我們來實際運行看看
uv run nautilus_trader/examples/live/binance/binance_spot_and_futures_market_maker.py
可以看到終端輸出如下:
去Binance上查看
訂單確實送出了
就大概先講到這,因為我們的主軸是在系統架構上,但如果想看更多關於策略和風險監控,歡迎在底下留言.
明天開始就準備進入Rust的世界.