nautilus_trader
是一个开源的高性能生产级算法交易平台仓库,为量化交易者提供了强大的工具和功能,支持策略的回测和实盘部署。以下是对该仓库的详细介绍:
基本信息
- 项目主页:https://nautilustrader.io
- 文档地址:https://nautilustrader.io/docs/
- 支持邮箱:support@nautilustrader.io
- Discord 社区:https://discord.gg/NautilusTrader
主要特性
- 高性能:核心使用 Rust 编写,采用异步网络库
tokio
,提升运行速度。 - 可靠性:借助 Rust 的类型和线程安全特性,可选 Redis 进行状态持久化。
- 可移植性:跨操作系统,支持 Linux、macOS 和 Windows,可使用 Docker 部署。
- 灵活性:通过模块化适配器,可集成任何 REST API 或 WebSocket 数据源。
- 高级功能:支持多种订单类型和条件触发,如
IOC
、FOK
等,还有执行指令和应急订单。 - 可定制性:允许添加自定义组件,利用缓存和消息总线构建系统。
- 回测功能:可同时使用多个交易场所、工具和策略,支持纳秒级历史数据回测。
- 实盘交易:回测和实盘使用相同的策略实现。
- 多交易场所支持:便于实现做市和统计套利策略。
- AI 训练:回测引擎速度快,可用于训练 AI 交易代理。
代码结构
仓库的主要目录和文件结构如下:
.codecov.yml
.deepsource.toml
.dockerignore
.gitattributes
.gitignore
.gitlint
.markdownlint.jsonc
.pre-commit-config.yaml
CLA.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Cargo.lock
Cargo.toml
LICENSE
Makefile
README.md
RELEASES.md
ROADMAP.md
SECURITY.md
build.py
clippy.toml
pyproject.toml
rust-toolchain.toml
rustfmt.toml
.config/
examples/
.docker/
uv-version
uv.lock
version.json
.cargo/
docs/
.pre-commit-hooks/
assets/
crates/
.github/
nautilus_trader/
scripts/
tests/
schema/
核心模块
crates
目录:包含多个 Rust 模块,例如:common
:提供通用工具和基础功能,如缓存管理、ID 生成器等。portfolio
:负责投资组合管理,包含账户管理和更新功能。persistence
:实现数据持久化,提供 Parquet 数据目录用于高效存储和检索金融市场数据。data
:数据引擎相关功能,如数据池管理。system
:包含客户端工厂和注册表,支持动态注册和查找不同类型的客户端工厂。
examples
目录:包含纯 Python 示例,展示基本策略、指标和执行算法。tests
目录:包含单元测试和集成测试,确保核心功能和边界情况的正确性。docs
目录:提供项目文档,包括入门指南、安装说明等。
开发和使用建议
- 环境要求:支持多个平台,Rust 版本为 1.88.0,Python 版本为 3.11 - 3.13。
- 入门示例:可参考
examples
目录中的示例代码,了解基本策略和算法的实现。 - 测试和验证:运行
tests
目录中的测试用例,确保代码的正确性和稳定性。 - 文档阅读:阅读
docs
目录中的文档,深入了解平台的使用方法和功能特性。
代码示例
以下是一些核心模块的代码示例: - 创建 Parquet 数据目录:
use std::path::PathBuf;
use nautilus_persistence::backend::catalog::ParquetDataCatalog;
// 创建一个新的目录
let catalog = ParquetDataCatalog::new(
PathBuf::from("/path/to/data"),
None, // 存储选项
Some(5000), // 批量大小
None, // 压缩算法(默认 SNAPPY)
None, // 最大行组大小(默认 5000)
);
- 创建订单工厂:
use nautilus_core::time::get_atomic_clock_static;
use nautilus_model::{
enums::{OrderSide, TimeInForce},
identifiers::{
ClientOrderId, InstrumentId, OrderListId,
stubs::{strategy_id_ema_cross, trader_id},
},
orders::Order,
};
use crate::factories::OrderFactory;
let trader_id = trader_id();
let strategy_id = strategy_id_ema_cross();
let order_factory = OrderFactory::new(
trader_id,
strategy_id,
None,
None,
get_atomic_clock_static(),
false, // 使用 UUID 生成客户端订单 ID
true, // 在客户端订单 ID 中使用连字符
);
总结
nautilus_trader
是一个功能强大、性能卓越的算法交易平台,提供了丰富的功能和工具,适用于量化交易者和交易公司。通过使用 Rust 和 Python 的组合,实现了高性能和易用性的平衡,同时支持多平台部署和数据持久化。