nautilus_trader-开源的高性能生产级算法交易平台


nautilus_trader 是一个开源的高性能生产级算法交易平台仓库,为量化交易者提供了强大的工具和功能,支持策略的回测和实盘部署。以下是对该仓库的详细介绍:

基本信息

主要特性

  • 高性能:核心使用 Rust 编写,采用异步网络库 tokio,提升运行速度。
  • 可靠性:借助 Rust 的类型和线程安全特性,可选 Redis 进行状态持久化。
  • 可移植性:跨操作系统,支持 Linux、macOS 和 Windows,可使用 Docker 部署。
  • 灵活性:通过模块化适配器,可集成任何 REST API 或 WebSocket 数据源。
  • 高级功能:支持多种订单类型和条件触发,如 IOCFOK 等,还有执行指令和应急订单。
  • 可定制性:允许添加自定义组件,利用缓存和消息总线构建系统。
  • 回测功能:可同时使用多个交易场所、工具和策略,支持纳秒级历史数据回测。
  • 实盘交易:回测和实盘使用相同的策略实现。
  • 多交易场所支持:便于实现做市和统计套利策略。
  • 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/

核心模块

  1. crates 目录:包含多个 Rust 模块,例如:
    • common:提供通用工具和基础功能,如缓存管理、ID 生成器等。
    • portfolio:负责投资组合管理,包含账户管理和更新功能。
    • persistence:实现数据持久化,提供 Parquet 数据目录用于高效存储和检索金融市场数据。
    • data:数据引擎相关功能,如数据池管理。
    • system:包含客户端工厂和注册表,支持动态注册和查找不同类型的客户端工厂。
  2. examples 目录:包含纯 Python 示例,展示基本策略、指标和执行算法。
  3. tests 目录:包含单元测试和集成测试,确保核心功能和边界情况的正确性。
  4. 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 的组合,实现了高性能和易用性的平衡,同时支持多平台部署和数据持久化。