分支 | 版本 | 地位 |
---|---|---|
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。保留所有权利。