運行策略分為三部份
今天會先講Backtest的部分
首先進入 doc/getting_start/quickstart.ipynb
這裡可以下載官方提供的資料轉換腳本並執行,在終端執行
curl https://raw.githubusercontent.com/nautechsystems/nautilus_data/main/nautilus_data/hist_data_to_catalog.py | python -
會在當前目錄下建立 ./catalog/ 資料夾(包含 EUR/USD 報價資料)
記得要先開啟虛擬環境
source .venv/bin/activate
這裡建議程式碼改為
catalog = ParquetDataCatalog("./catalog")
catalog.instruments()
使用 Strategy 類別,自定義 MACD 交易邏輯:
這裡也簡單做個圖讓大家可以看一下它其中的函數會怎麼操作
venue = BacktestVenueConfig(
name="SIM",
oms_type="NETTING",
account_type="MARGIN",
base_currency="USD",
starting_balances=["1_000_000 USD"]
)
from nautilus_trader.model import QuoteTick
data = BacktestDataConfig(
catalog_path=str(catalog.path),
data_cls=QuoteTick,
instrument_id=instruments[0].id,
end_time="2020-01-10",
)
engine = BacktestEngineConfig(
strategies=[
ImportableStrategyConfig(
strategy_path="__main__:MACDStrategy",
config_path="__main__:MACDConfig",
config={
"instrument_id": instruments[0].id,
"fast_period": 12,
"slow_period": 26,
},
)
],
logging=LoggingConfig(log_level="ERROR"), # 避免 notebook log 過載
)
BacktestNode 是 NautilusTrader 裡負責統一管理回測流程的核心類別,也是我們之後會深入了解的核心之一.
為什麼要有 BacktestNode?
因為在複雜的量化研究中,我們常常需要執行大量組合的回測,例如:
如果每一次都手動寫一份回測流程,會非常麻煩、難以重複利用。
from nautilus_trader.backtest.node import BacktestRunConfig, BacktestNode
config = BacktestRunConfig(engine=engine, venues=[venue], data=[data])
node = BacktestNode(configs=[config])
results = node.run() # 執行所有回測配置
from nautilus_trader.model import Venue
engine = node.get_engine(config.id)
engine.trader.generate_order_fills_report()
engine.trader.generate_positions_report()
engine.trader.generate_account_report(Venue("SIM"))
明天繼續說明 Live & Sandbox 以及如何即時監控損益