分支 | 版本 | 地位 |
---|---|---|
master | ||
nightly | ||
develop |
平台 | 鏽 | Python |
---|---|---|
Linux (x86_64) | 1.83.0+ | 3.11+ |
macOS (arm64) | 1.83.0+ | 3.11+ |
Windows (x86_64) | 1.83.0+ | 3.11+ |
NautilusTrader 是一個開源、高效能、生產級演算法交易平台,為定量交易者提供了使用事件驅動引擎根據歷史資料回測自動交易策略投資組合的能力,並即時部署這些相同的策略,沒有程式碼變更。
該平台是「人工智慧優先」的,旨在在高效能和強大的Python本機環境中開發和部署演算法交易策略。這有助於解決保持 Python 研究/回測環境與生產即時交易環境一致的平價挑戰。
NautilusTraders 的設計、架構和實施理念將軟體的正確性和安全性保持在最高水平,旨在支援 Python 原生、關鍵任務、交易系統回測和即時部署工作負載。
該平台也是通用的且與資產類別無關——任何 REST、WebSocket 或 FIX API 都可以透過模組化適配器整合。因此,它可以同時跨多個場所處理任何資產類別的高頻交易操作,包括外匯、股票、期貨、選擇權、差價合約、加密貨幣和博彩。
IOC
、 FOK
、 GTD
、 AT_THE_OPEN
、 AT_THE_CLOSE
、高級訂單類型和條件觸發器。執行指令post-only
、 reduce-only
和icebergs。應急訂單清單包括OCO
、 OTO
。nautilus - 源自古希臘文「水手」和 naus「船」。
鸚鵡螺殼由模組化室組成,其生長因子近似對數螺旋。我們的想法是,這可以轉化為設計和建築的美學。
傳統上,交易策略研究和回溯測試可能使用向量化方法在 Python(或其他合適的語言)中進行,然後需要使用 C++、C#、Java 或其他靜態類型語言以更事件驅動的方式重新實現該策略。 )。這裡的原因是,向量化回測程式碼無法表達即時交易的粒度時間和事件相關的複雜性,而編譯語言由於其固有的更高效能和類型安全性而被證明更適合。
NautilusTrader 的主要優勢之一是現在規避了這個重新實現步驟 - 因為該平台的關鍵核心組件已完全以 Rust 或 Cython 編寫。這意味著我們正在使用正確的工具來完成這項工作,系統程式語言可以編譯高效能的二進位文件,並使用 CPython C 擴充模組來提供適合專業量化交易者和交易公司的 Python 本機環境。
Python 最初是在幾十年前創建的,作為一種簡單的腳本語言,具有乾淨、直接的語法。從那時起,它已經發展成為一種成熟的通用物件導向程式語言。根據TIOBE指數,Python是目前世界上最受歡迎的程式語言。不僅如此,Python 已成為資料科學、機器學習和人工智慧事實上的通用語言。
然而,開箱即用的語言並非沒有缺點,特別是在實現大型效能關鍵系統的情況下。 Cython 解決了許多此類問題,提供了靜態類型語言的所有優勢,並將其嵌入 Python 豐富的軟體庫生態系統和開發人員/使用者社群中。
Rust 是一種多範式程式語言,旨在提高效能和安全性,尤其是安全性並發性。 Rust 速度極快,記憶體效率高(與 C 和 C++ 相當),而且沒有垃圾收集器。它可以為關鍵任務系統提供支持,在嵌入式設備上運行,並輕鬆與其他語言整合。
Rust 豐富的類型系統和所有權模型確定性地保證了記憶體安全和線程安全——在編譯時消除了許多類別的錯誤。
該專案越來越多地將 Rust 用於核心效能關鍵組件。 Python 語言綁定透過 Cython 和 PyO3 處理,並在打包 Wheel 二進位檔案之前在編譯時連結靜態函式庫,因此使用者無需安裝 Rust 即可執行 NautilusTrader。
此項目作出穩健承諾:
「這個計畫的目的是消除健全性錯誤。開發人員將盡力避免它們,並歡迎幫助分析和修復它們。
筆記
MSRV: NautilusTrader 嚴重依賴 Rust 語言和編譯器的改進。因此,最低支援的 Rust 版本 (MSRV) 通常等於 Rust 的最新穩定版本。
NautilusTrader 採用模組化設計,可與適配器配合使用,透過將原始 API 轉換為統一接口,實現與交易場所和資料提供者的連接。
目前支援以下整合:
姓名 | ID | 類型 | 地位 | 文件 |
---|---|---|---|---|
必發 | BETFAIR | 體育博彩交易所 | 指導 | |
幣安 | BINANCE | 加密貨幣交易所(CEX) | 指導 | |
幣安美國 | BINANCE | 加密貨幣交易所(CEX) | 指導 | |
幣安期貨 | BINANCE | 加密貨幣交易所(CEX) | 指導 | |
拜比特 | BYBIT | 加密貨幣交易所(CEX) | 指導 | |
數據便當 | DATABENTO | 數據提供者 | 指導 | |
dYdX | DYDX | 加密貨幣交易所(DEX) | 指導 | |
盈透證券 | INTERACTIVE_BROKERS | 經紀業務(多場所) | 指導 | |
奧克斯 | OKX | 加密貨幣交易所(CEX) | 指導 | |
綜合市場 | POLYMARKET | 預測市場(DEX) | 指導 | |
塔迪斯 | TARDIS | 數據提供者 | 指導 |
building
:正在建設中,可能不處於可用狀態。beta
:已完成最低工作狀態並處於「beta」測試階段。stable
:穩定的功能集和 API,整合已經由開發人員和使用者測試到合理的水平(一些錯誤可能仍然存在)。有關更多詳細信息,請參閱整合文件。
我們的目標是在所有分支機構中保持穩定、可傳遞的建構。
master
:反映最新發布版本的原始碼。nightly
:包括實驗性和正在進行的功能,每天14:00 UTC以及需要時從develop
分支合併。develop
:最活躍的分支,經常更新新的提交,包括實驗性和正在進行的功能。 筆記
我們的路線圖旨在為 2.x 版本實現穩定的 API (可能在 Rust 連接埠之後)。一旦達到這個里程碑,我們計劃實施正式的發布流程,包括任何 API 變更的棄用期。這種方法使我們目前能夠保持快速的開發速度。
NautilusTrader 仍在積極開發中。某些功能可能不完整,雖然 API 變得更加穩定,但版本之間可能會發生重大變更。我們盡力在發行說明中記錄這些變更。
我們的目標是遵循每週的發佈時間表,儘管實驗性或較大的功能可能會導致延遲。
我們建議使用最新支援的 Python 版本並在虛擬環境中設定 nautilus_trader 以隔離依賴關係
若要使用 Python pip 套件管理器從 PyPI 安裝最新的二進位 Wheel(或 sdist 套件):
pip install -U nautilus_trader
Nautech Systems 軟體包索引 ( packages.nautechsystems.io
) 符合 PEP-503 並託管nautilus_trader
的穩定版和開發版二進位輪。這使用戶能夠安裝最新的穩定版本或預發布版本進行測試。
穩定的輪子對應於 PyPI 上nautilus_trader
的官方版本,並使用標準版本控制。
要安裝最新的穩定版本:
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
開發輪子從 Linux 和 macOS 的develop
分支和nightly
分支發布,允許用戶在穩定版本發布之前測試功能和修復。
此流程還有助於保留運算資源,並確保輕鬆存取 CI 管道中測試的確切二進位文件,同時遵守 PEP-440 版本控制標準:
develop
輪子使用版本格式dev{date}+{build_number}
(例如1.208.0.dev20241212+7001
)。nightly
輪子使用版本格式a{date}
(alpha) (例如1.208.0a20241212
)。 警告
我們不建議在生產環境中使用開發輪,例如控制真實資本的即時交易。
預設情況下,pip 安裝最新的穩定版本。新增--pre
標誌可確保考慮預發布版本,包括開發輪。
要安裝最新的可用預發行版(包括開發輪):
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
要安裝特定的開發輪(例如,2024 年 12 月 12 日的1.208.0a20241212
):
pip install nautilus_trader==1.208.0a20241212 --index-url=https://packages.nautechsystems.io/simple
您可以在軟體包索引上查看nautilus_trader
的所有可用版本。
以程式設計方式取得並列出可用版本:
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sort
develop
分支輪子 ( .dev
):隨著每次合併的提交而持續建置和發布。nightly
分支輪子 ( a
):每天在UTC 14:00自動合併develop
分支時建置和發布(如果有更改)。 develop
分支wheels( .dev
):僅保留最新的wheel建置。nightly
分支輪 ( a
):僅保留 3 個最新的輪建。從原始碼安裝需要Python.h
頭文件,該文件包含在python-dev
等開發版本中。您還需要最新的穩定rustc
和cargo
來編譯 Rust 函式庫。
對於 MacBook Pro M1/M2,請確保使用 pyenv 安裝的 Python 配置為--enable-shared
:
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install <python_version>
有關更多詳細信息,請參閱 PyO3 使用者指南。
如果您先按照pyproject.toml
中指定的方式安裝建置依賴項,則可以使用 pip 從來源安裝。我們強烈建議使用詩歌進行安裝,如下所示。
安裝 rustup(Rust 工具鏈安裝程式):
curl https://sh.rustup.rs -sSf | sh
rustup-init.exe
rustc --version
在目前 shell 中啟用cargo
:
source $HOME /.cargo/env
安裝 clang(LLVM 的 C 語言前端):
sudo apt-get install clang
clang
: [ System.Environment ]::SetEnvironmentVariable( ' path ' , " C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsLlvmx64bin; " + $ env: Path , " User " )
clang --version
安裝詩歌(或按照其網站上的安裝指南進行操作):
curl -sSL https://install.python-poetry.org | python3 -
使用git
克隆原始碼,然後從專案根目錄安裝:
git clone https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
poetry install --only main --all-extras
有關其他選項和更多詳細信息,請參閱安裝指南。
將 Redis 與 NautilusTrader 結合使用是可選的,並且僅在配置為快取資料庫或訊息匯流排的後端時才需要。有關更多詳細信息,請參閱安裝指南的 Redis 部分。
提供Makefile
來自動執行大多數安裝和建置開發任務。它提供了以下目標:
make install
:以release
建置模式安裝main
、 dev
和test
依賴項,然後使用詩歌(預設)安裝套件。make install-debug
:與make install
相同,但具有debug
建置模式。make install-just-deps
:僅安裝main
、 dev
和test
依賴項(不安裝套件)。make build
:在release
建置模式(預設)下執行建置腳本。make build-debug
:在debug
建置模式下執行建置腳本。make build-wheel
:在release
模式下以輪格式運行 Poetry 建置。make build-wheel-debug
:在debug
模式下以輪格式執行 Poetry 建置。make clean
:注意從儲存庫中刪除所有非來源工件。make docs
:使用 Sphinx 建立文件 HTML。make pre-commit
:對所有文件執行預提交檢查。make ruff
:使用pyproject.toml
配置(帶有自動修復功能)對所有檔案執行 ruff。make pytest
:使用pytest
運行所有測試(效能測試除外)。make pytest-coverage
:與make pytest
相同,另外執行測試覆蓋率並產生報表。 提示
在 Rust 或 Cython 程式碼變更後執行make build-debug
進行編譯是目前開發時最有效的工作流程。
指標和策略可以用 Python 和 Cython 開發。對於效能和延遲敏感的應用程序,我們建議使用 Cython。以下是一些範例:
BacktestEngine
的回測範例。 Docker 容器是使用基礎映像python:3.12-slim
和以下變體標籤建構的:
nautilus_trader:latest
安裝了最新的發行版本。nautilus_trader:nightly
安裝了nightly
分支的頭。jupyterlab:latest
與jupyterlab
一起安裝了最新的發行版本以及帶有隨附資料的範例回測筆記本。jupyterlab:nightly
將nightly
分支的頭與jupyterlab
以及附帶資料的範例回測筆記本一起安裝。可以如下拉取容器鏡像:
docker pull ghcr.io/nautechsystems/<image_variant_tag> --platform linux/amd64
您可以透過執行以下命令來啟動回測範例容器:
docker pull ghcr.io/nautechsystems/jupyterlab:nightly --platform linux/amd64
docker run -p 8888:8888 ghcr.io/nautechsystems/jupyterlab:nightly
然後打開瀏覽器訪問以下地址:
http://127.0.0.1:8888/lab
警告
NautilusTrader 目前超出了 Jupyter 筆記型電腦日誌記錄(標準輸出)的速率限制。因此,範例中的log_level
設定為ERROR
。降低此等級以查看更多日誌記錄將導致筆記本在單元執行期間掛起。我們正在研究修復方案,可能涉及提高 Jupyter 的配置速率限製或限制 Nautilus 的日誌刷新。
我們的目標是為 Python、Cython 和 Rust 的混合程式碼庫提供最愉快的開發人員體驗。請參閱開發人員指南以獲取有用的信息。
Cargo-nextest 是 NautilusTrader 的標準 Rust 測試運行器。您可以透過執行以下命令來安裝它:
cargo install cargo-nextest
提示
Rust 測試僅在通過cargo-nextest
運行時才會通過。
感謝您考慮為 Nautilus Trader 做出貢獻!我們歡迎任何有助於改進該專案的幫助。如果您有增強功能或錯誤修復的想法,第一步是在 GitHub 上提出問題並與團隊討論。這有助於確保您的貢獻與專案目標保持一致,並避免重複工作。
一旦您準備好開始貢獻,請務必遵循 CONTRIBUTING.md 文件中概述的指南。這包括簽署貢獻者許可協議 (CLA),以確保您的貢獻可以包含在專案中。
請注意,所有拉取請求都應向develop
分支發出。這是新功能和改進在發布之前整合的地方。
再次感謝您對 Nautilus Trader 的關注!我們期待審查您的貢獻並與您合作改進該專案。
加入我們 Discord 上的用戶和貢獻者社區,聊天並了解 NautilusTrader 的最新公告和功能。無論您是希望做出貢獻的開發人員還是只是想了解有關該平台的更多信息,我們的伺服器都歡迎您。
NautilusTrader 的原始碼可在 GitHub 上根據 GNU Lesser General Public License v3.0 取得。歡迎對該專案做出貢獻,但需要完成標準貢獻者授權協議 (CLA)。
NautilusTrader 由 Nautech Systems 開發和維護,Nautech Systems 是一家專門開發高效能交易系統的技術公司。儘管該計畫使用 Rust 程式語言並受益於其生態系統,但 Nautech Systems 並不隸屬於 Rust 基金會,該計畫也不是 Rust 基金會的官方作品。欲了解更多信息,請訪問 https://nautilustrader.io。
版權所有 (C) 2015-2025 Nautech Systems Pty Ltd。