nautechsystems/nautilus_trader

⭐ 13,500 🍴 1,458 Rust📄 GNU Lesser General Public License v3.0 GitHubで見る →

主な特徴

  • **高速**: Rustで書かれたコア、tokioを使用した非同期ネットワーキング
  • **信頼性**: Rustによる型安全性とスレッド安全性、Redisバックエンドの状態永続化
  • **ポータブル**: OS非依存、Linux、macOS、Windowsで動作、Dockerデプロイ対応
  • **柔軟性**: モジュールアダプターで任意のREST APIやWebSocketフィードを統合可能
  • **高度な注文タイプ**: IOC、FOK、GTC、GTD、DAY、AT_THE_OPEN、AT_THE_CLOSE、条件付きトリガー
  • **カスタマイズ可能**: カスタムコンポーネントの追加、キャッシュとメッセージバスを活用したシステム構築
  • **バックテスト**: ナノ秒精度の歴史データで複数の取引所、商品、戦略を同時実行
  • **ライブトレーディング**: バックテストと同一の戦略実装を使用
  • **マルチベニュー**: マーケットメイキング、統計的裁定戦略をサポート
  • **AIトレーニング**: AIトレーディングエージェント(RL/ES)のトレーニングに十分な速度

リポジトリ解析: nautechsystems/nautilus_trader

基本情報

  • リポジトリ名: nautechsystems/nautilus_trader
  • 主要言語: Rust
  • スター数: 13,500
  • フォーク数: 1,458
  • 最終更新: アクティブに開発中(v1.220.0 Beta)
  • ライセンス: GNU Lesser General Public License v3.0
  • トピックス: algorithmic-trading, backtesting, event-driven, high-performance, quantitative-finance, trading-platform, AI-first

概要

一言で言うと

NautilusTraderは、RustコアとPython APIを持つ高性能なアルゴリズムトレーディングプラットフォームで、バックテストとライブトレーディングを同一コードで実現できるプロダクショングレードのシステムです。

詳細説明

NautilusTraderは、オープンソースの高性能アルゴリズムトレーディングプラットフォームで、クオンツトレーダーに向けて設計されています。イベントドリブンエンジンを使用して歴史データ上で自動売買戦略のポートフォリオをバックテストし、同じ戦略をコード変更なしでライブでデプロイできます。

このプラットフォームは"AI-first"として設計されており、Pythonネイティブな環境でアルゴリズムトレーディング戦略の開発とデプロイが可能です。これにより、Pythonの研究/バックテスト環境と本番ライブトレーディング環境の一貫性を保つという課題に対処しています。

また、ユニバーサルでアセットクラスに依存しない設計で、REST APIやWebSocketフィードをモジュールアダプター経由で統合できます。FX、株式、先物、オプション、暗号通貨、DeFi、ベッティングなど、幅広いアセットクラスで高頻度トレーディングをサポートします。

主な特徴

  • 高速: Rustで書かれたコア、tokioを使用した非同期ネットワーキング
  • 信頼性: Rustによる型安全性とスレッド安全性、Redisバックエンドの状態永続化
  • ポータブル: OS非依存、Linux、macOS、Windowsで動作、Dockerデプロイ対応
  • 柔軟性: モジュールアダプターで任意のREST APIやWebSocketフィードを統合可能
  • 高度な注文タイプ: IOC、FOK、GTC、GTD、DAY、AT_THE_OPEN、AT_THE_CLOSE、条件付きトリガー
  • カスタマイズ可能: カスタムコンポーネントの追加、キャッシュとメッセージバスを活用したシステム構築
  • バックテスト: ナノ秒精度の歴史データで複数の取引所、商品、戦略を同時実行
  • ライブトレーディング: バックテストと同一の戦略実装を使用
  • マルチベニュー: マーケットメイキング、統計的裁定戦略をサポート
  • AIトレーニング: AIトレーディングエージェント(RL/ES)のトレーニングに十分な速度

使用方法

インストール

前提条件

  • Python 3.11-3.13
  • Rust 1.89.0(ソースからビルドする場合)
  • 64ビットLinux (Ubuntu 22.04+)、macOS (14.7+)、またはWindows Server 2022+
  • uvパッケージマネージャーを推奨

インストール手順

# 方法1: PyPIからバイナリホイールをインストール
pip install -U nautilus_trader

# 方法2: 特定の統合に対する追加依存関係をインストール
pip install -U nautilus_trader[betfair]  # Betfair adapter
pip install -U nautilus_trader[ib]       # Interactive Brokers
pip install -U nautilus_trader[dydx]     # dYdX

# 方法3: ソースからビルド
git clone https://github.com/nautechsystems/nautilus_trader.git
cd nautilus_trader
uv sync
uv build

基本的な使い方

Hello World相当の例

from nautilus_trader.backtest.engine import BacktestEngine, BacktestEngineConfig
from nautilus_trader.model.identifiers import TraderId, Venue
from nautilus_trader.model.currencies import USD
from nautilus_trader.model.objects import Money
from nautilus_trader.model.enums import AccountType, OmsType

# バックテストエンジンの設定
config = BacktestEngineConfig(trader_id=TraderId("BACKTESTER-001"))
engine = BacktestEngine(config=config)

# 取引所の追加
SIM = Venue("SIM")
engine.add_venue(
    venue=SIM,
    oms_type=OmsType.HEDGING,
    account_type=AccountType.MARGIN,
    base_currency=USD,
    starting_balances=[Money(1_000_000, USD)],
)

実践的な使用例: EMAクロス戦略

from nautilus_trader.examples.strategies.ema_cross import EMACross, EMACrossConfig
from nautilus_trader.model.data import BarType
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler

# 戦略の設定
strategy_config = EMACrossConfig(
    instrument_id=AUDUSD_SIM.id,
    bar_type=BarType.from_str("AUD/USD.SIM-100-TICK-MID-INTERNAL"),
    fast_ema_period=10,
    slow_ema_period=20,
    trade_size=Decimal(1_000_000),
)

# 戦略の追加
strategy = EMACross(config=strategy_config)
engine.add_strategy(strategy=strategy)

# データの読み込みと実行
wrangler = QuoteTickDataWrangler(instrument=AUDUSD_SIM)
ticks = wrangler.process_bar_data(
    bid_data=bid_bars,
    ask_data=ask_bars,
)
engine.add_data(ticks)
engine.run()

高度な使い方

ライブトレーディングの設定

from nautilus_trader.live.node import TradingNode
from nautilus_trader.config import LiveDataClientConfig, LiveExecClientConfig

# ライブノードの設定
node = TradingNode()

# Binanceアダプターの設定例
data_config = LiveDataClientConfig(
    venue="BINANCE",
    api_key="YOUR_API_KEY",
    api_secret="YOUR_API_SECRET",
    instrument_ids=["BTCUSDT-PERP.BINANCE"],
)

exec_config = LiveExecClientConfig(
    venue="BINANCE",
    api_key="YOUR_API_KEY",
    api_secret="YOUR_API_SECRET",
)

node.add_data_client("BINANCE", data_config)
node.add_exec_client("BINANCE", exec_config)

カスタムアクターの実装

from nautilus_trader.common.actor import Actor
from nautilus_trader.core.data import Data

class CustomActor(Actor):
    def on_start(self) -> None:
        # データのサブスクリプション
        self.subscribe_data(DataType(QuoteTick), self.on_quote_tick)
        self.subscribe_data(DataType(Bar), self.on_bar)
    
    def on_quote_tick(self, tick: QuoteTick) -> None:
        # クォートティックの処理
        pass
    
    def on_bar(self, bar: Bar) -> None:
        # バーデータの処理
        pass

ドキュメント・リソース

公式ドキュメント

  • README.md: プロジェクト概要、特徴、インストール方法
  • docs/: 詳細なドキュメント(APIリファレンス、コンセプト、ガイド)
  • 公式サイト: https://nautilustrader.io/docs/
  • CONTRIBUTING.md: コントリビューションガイドライン
  • ROADMAP.md: 今後の開発計画(Rustへの移行、ドキュメント改善等)

サンプル・デモ

  • examples/backtest/: 各種バックテストのサンプル
    • fx_ema_cross_audusd_ticks.py: FX EMAクロス戦略
    • crypto_orderbook_imbalance.py: オーダーブック不均衡戦略
    • databento_ema_cross_long_only_aapl_bars.py: Databentoデータを使用
  • examples/live/: ライブトレーディングのサンプル
  • examples/sandbox/: 各取引所のサンドボックス環境サンプル

チュートリアル・ガイド

  • docs/getting_started/: クイックスタート、インストール、バックテストガイド
  • docs/tutorials/: Jupyterノートブック形式のチュートリアル
  • docs/integrations/: 各取引所/データプロバイダーの統合ガイド

技術的詳細

アーキテクチャ

全体構造

NautilusTraderは、トレーディングシステムを構成するためのフレームワークであり、以下の設計原則に基づいています:

  • ドメイン駆動設計 (DDD): 明確なドメインモデルと境界
  • イベント駆動アーキテクチャ: すべての通信がイベント/メッセージベース
  • ポート&アダプター: 外部システムとの柔軟な統合
  • クラッシュオンリー設計: 障害からの迅速な回復

コアコンポーネント:

  • NautilusKernel: 中央オーケストレーションコンポーネント
  • DataEngine: マーケットデータの処理と配信
  • ExecutionEngine: 注文実行とポジション管理
  • RiskEngine: リスク管理とコンプライアンス
  • MessageBus: コンポーネント間の通信バス
  • Cache: 状態管理とクエリ

ディレクトリ構成

nautilus_trader/
├── crates/           # Rustコードベース
│   ├── adapters/    # 取引所アダプター
│   ├── core/        # コア機能
│   ├── model/       # ドメインモデル
│   ├── backtest/    # バックテストエンジン
│   ├── execution/   # 実行ロジック
│   └── network/     # ネットワーク通信
├── nautilus_trader/  # Pythonコードベース
│   ├── backtest/    # バックテスト機能
│   ├── live/        # ライブトレーディング
│   ├── trading/     # トレーディングロジック
│   └── indicators/  # テクニカル指標
├── examples/         # サンプルコード
├── docs/             # ドキュメント
└── tests/            # テストスイート

主要コンポーネント

  • Strategy: トレーディング戦略の基底クラス

    • 場所: nautilus_trader/trading/strategy.pyx
    • 依存: Actor, MessageBus, Cache
    • インターフェース: on_start, on_data, on_order, submit_order
  • BacktestEngine: バックテスト実行エンジン

    • 場所: nautilus_trader/backtest/engine.pyx
    • 依存: DataEngine, ExecutionEngine, RiskEngine
    • インターフェース: add_venue, add_strategy, add_data, run
  • Adapters: 取引所統合アダプター

    • 場所: crates/adapters/
    • 対応: Binance, Interactive Brokers, dYdX, Bybit, OKX等
    • インターフェース: DataClient, ExecutionClient
  • Indicators: テクニカル指標ライブラリ

    • 場所: nautilus_trader/indicators/
    • 種類: EMA, SMA, MACD, RSI, Bollinger Bands等
    • インターフェース: update, calculate, reset

技術スタック

コア技術

  • 言語:
    • Rust (1.89.0+): コアエンジン、高性能計算部分
    • Python (3.11-3.13): APIインターフェース、戦略開発
    • Cython: Python/Rustブリッジング、パフォーマンス最適化
  • フレームワーク:
    • tokio: 非同期ランタイム、ネットワーキング
    • PyO3: Rust-Pythonバインディング
    • pyo3-async-runtimes: 非同期統合
  • 主要ライブラリ:
    • arrow/parquet (55.2.0): 高速データ処理、ストレージ
    • datafusion (49.0.0): SQLクエリエンジン
    • redis (0.32.4): 状態永続化、メッセージバス
    • alloy (1.0.24): Ethereum/DeFi統合
    • hypersync-client (0.18.3): ブロックチェーンデータ同期

開発・運用ツール

  • ビルドツール:
    • Cargo (Rust): ワークスペース構成、依存関係管理
    • uv: Python依存関係管理、高速インストール
    • cbindgen: C FFI自動生成
  • テスト:
    • pytest: Python統合テスト
    • criterion: Rustベンチマーク
    • nextest: 並列テスト実行
    • proptest: プロパティベーステスト
  • CI/CD:
    • GitHub Actions: 自動ビルド、テスト、リリース
    • 複数プラットフォーム対応 (Linux x86_64/ARM64, macOS ARM64, Windows x86_64)
    • nightlyとdevelopブランチの自動ビルド
  • デプロイ:
    • PyPI: 安定版リリース
    • Nautech Systems Package Index: 開発版ホスティング
    • Docker: コンテナデプロイサポート

設計パターン・手法

  • ドメイン駆動設計 (DDD):

    • リッチドメインモデル: Order, Position, Instrument等の明確な境界
    • 値オブジェクト: Price, Quantity, Moneyの不変性
    • アグリゲート: Portfolioによるポジション管理
  • イベント駆動アーキテクチャ:

    • すべての状態変更がイベントとして伝播
    • OrderSubmitted, OrderFilled, PositionOpenedなどのドメインイベント
    • 非同期メッセージ処理による疎結合
  • ポート&アダプター (Hexagonal Architecture):

    • DataClient/ExecutionClientインターフェース
    • 取引所固有の実装をアダプターとして分離
    • コア機能と外部統合の明確な分離
  • アクターモデル:

    • 各コンポーネントが独立したアクター
    • メッセージパッシングによる通信
    • 決定論的な同期処理
  • クラッシュオンリー設計:

    • 障害時の迅速な回復
    • 状態の永続化とリプレイ
    • 監視とヘルスチェック

データフロー・処理フロー

マーケットデータフロー

  1. 外部データソース → DataClient (WebSocket/REST)
  2. 正規化処理 → DataEngine (型変換、検証)
  3. キャッシュ更新 → Cache (高速アクセス用ストレージ)
  4. イベント配信 → MessageBus (Pub/Sub)
  5. 戦略への配信 → Strategy.on_data() コールバック

注文実行フロー

  1. 戦略の意思決定 → Strategy.submit_order()
  2. コマンド生成 → SubmitOrder command
  3. リスクチェック → RiskEngine.check_order()
  4. 実行ルーティング → ExecutionEngine.process_order()
  5. 外部送信 → ExecutionClient.submit_order()
  6. イベント受信 → OrderAccepted/OrderFilled events
  7. 状態更新 → Portfolio/Position updates
  8. 戦略通知 → Strategy.on_order() callback

バックテストデータフロー

Historical Data → DataWrangler → BacktestEngine
                                        ↓
                                  SimulatedExchange
                                        ↓
                                  Strategy Execution
                                        ↓
                                  Performance Analysis

API・インターフェース

公開API

Strategy API

  • 目的: トレーディング戦略を実装するための基底クラス
  • 使用例:
from nautilus_trader.trading.strategy import Strategy

class MyStrategy(Strategy):
    def on_start(self) -> None:
        # データサブスクリプション
        self.subscribe_quote_ticks(self.instrument_id)
        self.subscribe_bars(self.bar_type)
    
    def on_quote_tick(self, tick: QuoteTick) -> None:
        # クォート受信時の処理
        if self.should_buy(tick):
            self.submit_order(self.create_market_order(...))
    
    def on_order(self, order: Order) -> None:
        # 注文イベント処理
        self.log.info(f"Order {order.client_order_id} status: {order.status}")

Actor API

  • 目的: 非トレーディングコンポーネント(監視、アラート等)の実装
  • 使用例:
from nautilus_trader.common.actor import Actor

class RiskMonitor(Actor):
    def on_start(self) -> None:
        # ポートフォリオイベントをサブスクライブ
        self.subscribe_portfolio_snapshots()
        
    def on_portfolio_snapshot(self, event: PortfolioSnapshot) -> None:
        # リスクメトリクスを計算
        if self.calculate_var() > self.var_limit:
            self.publish_data(RiskAlert(...))

Indicators API

  • 目的: テクニカル指標の計算と更新
  • 使用例:
from nautilus_trader.indicators.ema import ExponentialMovingAverage

# 指標の初期化
ema_fast = ExponentialMovingAverage(10)
ema_slow = ExponentialMovingAverage(20)

# バーデータで更新
for bar in historical_bars:
    ema_fast.update_raw(bar.close)
    ema_slow.update_raw(bar.close)
    
    if ema_fast.value > ema_slow.value:
        # ゴールデンクロス検出
        pass

設定・カスタマイズ

設定ファイル

# config.py - 戦略設定例
from nautilus_trader.config import StrategyConfig
from decimal import Decimal

class EMACrossConfig(StrategyConfig):
    instrument_id: str
    bar_type: str
    fast_ema_period: int = 10
    slow_ema_period: int = 20
    trade_size: Decimal = Decimal("1000000")
    
# バックテストエンジン設定
from nautilus_trader.config import BacktestEngineConfig

engine_config = BacktestEngineConfig(
    trader_id="BACKTESTER-001",
    logging_level="INFO",
    cache_database=CacheDatabaseConfig(type="redis"),
    streaming=StreamingConfig(
        catalog_path="./catalog",
        fs_protocol="file",
        flush_interval_ms=100,
    ),
)

拡張・プラグイン開発

カスタムデータタイプ
from nautilus_trader.model.data import Data

@dataclass
class CustomSignal(Data):
    symbol: str
    signal_type: str
    strength: float
    timestamp_ns: int
    
    def __post_init__(self):
        # カスタムバリデーション
        if not 0 <= self.strength <= 1:
            raise ValueError("Signal strength must be between 0 and 1")
カスタムアダプター開発
from nautilus_trader.adapters.base import DataClient, ExecutionClient

class CustomExchangeDataClient(DataClient):
    async def _connect(self) -> None:
        # WebSocket接続等の実装
        pass
        
    async def _subscribe_quote_ticks(self, instrument_id: InstrumentId) -> None:
        # クォートサブスクリプションの実装
        pass

class CustomExchangeExecutionClient(ExecutionClient):
    async def _submit_order(self, command: SubmitOrder) -> None:
        # 注文送信の実装
        pass

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • ベンチマーク結果:
    • バックテスト処理速度: 100万ティック/秒以上(シングルスレッド)
    • レイテンシ: マイクロ秒レベルのイベント処理
    • メモリ効率: Rust実装によるゼロコストアブストラクション
  • 最適化手法:
    • Rustコアによる低レベル最適化
    • ゼロコピーメッセージパッシング
    • 効率的なメモリレイアウト(データ局所性)
    • JIT最適化されたCython拡張

スケーラビリティ

  • 垂直スケーリング:
    • シングルスレッド設計により、CPUクロック向上が直接性能向上に寄与
    • 大容量メモリによる大規模ヒストリカルデータの処理
  • 水平スケーリング:
    • 複数のトレーダーインスタンスを別プロセスで実行
    • Redis経由でのインスタンス間通信
    • 戦略ごとの独立したデプロイメント
  • データ処理:
    • Parquet形式による効率的なデータストレージ
    • DataFusionによる高速クエリ処理
    • ストリーミング処理による低メモリフットプリント

制限事項

  • 技術的な制限:
    • シングルスレッド実行モデル(CPU集約的な計算には不向き)
    • Windows版は64ビット精度のみ(128ビット精度は未対応)
    • Python GILによる制約(Rust部分は影響なし)
  • 運用上の制限:
    • 各トレーダーインスタンスは独立プロセスで実行推奨
    • リアルタイムシステムではない(ソフトリアルタイム)
    • 一部のアダプターは特定の地域制限あり

評価・所感

技術的評価

強み

  • 高性能: Rustコアによる卓越したパフォーマンス、プロダクションレベルの信頼性
  • 統一API: バックテストとライブトレーディングで同一コードを使用可能
  • 型安全性: Rust/Cythonによる厳密な型チェック、実行時エラーの最小化
  • 豊富な統合: 主要な取引所とデータプロバイダーをサポート
  • 拡張性: 明確なインターフェースによるカスタムコンポーネントの追加が容易
  • アクティブな開発: 週次リリース、活発なコミュニティ

改善の余地

  • 学習曲線: 高度なアーキテクチャのため初学者には難しい
  • ドキュメント: 日本語ドキュメントの不足
  • GUI不足: CLIベースでビジュアルツールが限定的
  • Windows対応: 一部機能制限(128ビット精度未対応)

向いている用途

  • 高頻度取引 (HFT): マイクロ秒レベルのレイテンシ要求に対応
  • マーケットメイキング: 複数取引所での同時実行
  • 統計的裁定取引: 大量データの高速処理
  • 暗号資産トレーディング: 24/7稼働、複数取引所対応
  • 機関投資家向けシステム: プロダクショングレードの信頼性
  • AIトレーディング: 強化学習エージェントのトレーニング環境

向いていない用途

  • GUI重視のトレーディング: ビジュアル分析ツールが必要な場合
  • 簡易な自動売買: オーバースペックになる可能性
  • プログラミング経験なし: コーディングスキルが必須
  • Windowsメインの環境: 一部機能制限がある

総評

NautilusTraderは、プロフェッショナル向けの本格的なアルゴリズムトレーディングプラットフォームとして、技術的に非常に優れた設計と実装を持つ。Rustによる高性能コアとPythonの柔軟性を組み合わせ、バックテストからライブトレーディングまでシームレスに移行できる点が最大の強みである。

特筆すべきは、金融機関レベルの信頼性とパフォーマンスを、オープンソースで提供している点である。ドメイン駆動設計による明確なアーキテクチャは、大規模な開発にも対応でき、拡張性も高い。

ただし、その高度な設計ゆえに学習コストは高く、本格的なアルゴリズムトレーディングを行う開発者向けのツールと言える。簡単な自動売買を始めたい初心者には、より簡易なツールから始めることを推奨する。

AI時代のトレーディングプラットフォームとして、強化学習やその他の機械学習手法との統合を前提とした設計は先進的であり、今後のアルゴリズムトレーディングの発展において重要な役割を果たすプラットフォームとなるだろう。