vectorbtを使い始めて「速い!楽しい!」と喜んでいた矢先、Twitterで「今はNautilusTraderが主流だよ」という投稿を見かけてしまいました。。。え、またフレームワーク変えるの?と思いつつ調べ始めたら、確かにこれは次元が違うポテンシャルを持つツールでした。今回はNautilusTraderの基本と、僕がすでに使っているvectorbtとの比較をまとめます。同じ「新しいツールに目移りしがちな沼」にいる方、一緒に確認しましょう。
NautilusTraderとは
NautilusTraderは、Rustで書かれたコアエンジンをPythonから操作できるバックテスト・ライブトレードフレームワークです。2024年ごろから急速に注目を集めており、2026年現在はPythonの本格的なアルゴトレーディングフレームワークの中では最も「プロ寄り」の選択肢の一つになっています。
特徴をざっくりまとめると:
① Rust製コアで超高速:Pythonのループをほぼ使わずイベント処理
② バックテストとライブトレードが同一コード:バックテストで書いた戦略がそのまま本番で動く
③ イベント駆動型:注文約定・ポジション変化などのイベントに対してハンドラーを書くスタイル
④ スリッページ・手数料の精密なシミュレーション:プロ仕様のバックテストが可能
vectorbt・backtraderとの比較
3つのフレームワークを比較するとこんな感じです:
【backtrader】
・学習コスト:低〜中
・速度:遅い(純Python)
・ライブトレード:○(ブローカー連携あり)
・メンテナンス:2023年以降ほぼ停止中
・向いている用途:学習目的、シンプルな戦略検証
【vectorbt】
・学習コスト:中
・速度:高速(NumPy/Numbaで配列演算)
・ライブトレード:△(有料版vectorbt Proでサポート)
・メンテナンス:活発
・向いている用途:パラメータ最適化、大規模バックテスト
【NautilusTrader】
・学習コスト:高(最初の壁が急)
・速度:最高(Rustコア)
・ライブトレード:○(Binance、Interactive Brokersなど対応)
・メンテナンス:活発
・向いている用途:本番運用を見据えた戦略開発
インストールと最初の動作確認
まずインストールから。Python 3.11以降推奨です。
# インストール
pip install nautilus_trader
# バージョン確認
python -c "import nautilus_trader; print(nautilus_trader.__version__)"
NautilusTraderの核心は「戦略クラス」を定義することです。最もシンプルな移動平均クロス戦略で基本構造を確認しましょう。
from nautilus_trader.trading.strategy import Strategy
from nautilus_trader.config import StrategyConfig
from nautilus_trader.model.data import Bar, BarType
from nautilus_trader.model.enums import OrderSide
from nautilus_trader.model.identifiers import InstrumentId
from nautilus_trader.indicators.average.ema import ExponentialMovingAverage
class MACrossConfig(StrategyConfig, frozen=True):
instrument_id: InstrumentId
bar_type: BarType
fast_ema_period: int = 10
slow_ema_period: int = 20
trade_size: float = 100_000 # 1ロット相当
class MACrossStrategy(Strategy):
"""シンプルなEMAクロス戦略"""
def __init__(self, config: MACrossConfig):
super().__init__(config)
self.fast_ema = ExponentialMovingAverage(config.fast_ema_period)
self.slow_ema = ExponentialMovingAverage(config.slow_ema_period)
def on_start(self):
"""戦略起動時に呼ばれる"""
self.instrument = self.cache.instrument(self.config.instrument_id)
# データサブスクライブ
self.subscribe_bars(self.config.bar_type)
self.log.info("MACrossStrategy 起動")
def on_bar(self, bar: Bar):
"""新しいバー(ローソク足)が来るたびに呼ばれる"""
# インジケーターを更新
self.fast_ema.update_raw(bar.close.as_double())
self.slow_ema.update_raw(bar.close.as_double())
# インジケーターが初期化されていなければスキップ
if not self.fast_ema.initialized or not self.slow_ema.initialized:
return
fast = self.fast_ema.value
slow = self.slow_ema.value
# クロスの検出
if fast > slow and not self._is_long():
self._buy()
elif fast < slow and not self._is_short():
self._sell()
def _is_long(self) -> bool:
return self.portfolio.is_net_long(self.config.instrument_id)
def _is_short(self) -> bool:
return self.portfolio.is_net_short(self.config.instrument_id)
def _buy(self):
order = self.order_factory.market(
instrument_id=self.config.instrument_id,
order_side=OrderSide.BUY,
quantity=self.instrument.make_qty(self.config.trade_size),
)
self.submit_order(order)
self.log.info(f"BUY {self.config.trade_size} @ {self.fast_ema.value:.3f}")
def _sell(self):
order = self.order_factory.market(
instrument_id=self.config.instrument_id,
order_side=OrderSide.SELL,
quantity=self.instrument.make_qty(self.config.trade_size),
)
self.submit_order(order)
self.log.info(f"SELL {self.config.trade_size} @ {self.fast_ema.value:.3f}")
def on_stop(self):
"""戦略停止時の後処理"""
self.cancel_all_orders(self.config.instrument_id)
self.close_all_positions(self.config.instrument_id)
vectorbtと使い分けの指針
正直なところ、NautilusTraderは最初の学習コストが高いです。僕が最初に試したとき、「InstrumentIdってどう定義するの?」「データはどうロードするの?」でかなり詰まりました(笑)。公式ドキュメントとサンプルコードを読み込む時間が相当必要です。
使い分けの目安は:
・アイデアを素早く検証したい → vectorbt(コードが短く、パラメータ最適化も爆速)
・本番運用に近い精度でバックテストしたい → NautilusTrader(スリッページ・約定シミュレーションが精密)
・バックテストのコードをそのまま本番に使いたい → NautilusTrader一択
日本株については、現時点でNautilusTraderが対応しているブローカーAPIは米国・暗号資産中心です。Interactive Brokersを経由すれば日本株にもアクセスできますが、ハードルは高め。ドル円のFX(OANDAなど)のほうが現実的な使い道かもしれません。
まとめ
NautilusTraderはRustの高速コアとPythonの柔軟性を組み合わせた、2026年現在で最も本番寄りのPythonバックテストフレームワークです。学習コストは高いですが、「バックテストと本番が同一コード」という思想は個人投資家にとっても大きなメリットです。
個人的には、まずvectorbtでアイデアを高速に検証して「これは使えそう」と確信できた戦略をNautilusTraderで精密バックテスト→本番検討、という流れがベストだと思っています。まだ入門したてで沼の深さが測り知れませんが、続きは次の記事で!

