はじめに
「プロップファーム御用達のPython製取引プラットフォームがあるらしい」── GitHubで25kスターを獲得し、1日に何度もコミットが走る NautilusTrader。Rustで書かれた高速コア、ナノ秒精度のバックテスト、研究から本番まで同一コードで動かせる「research-to-live parity」が売りです。
ただ、こういう「プロ向け」ツールにありがちなのが 「すごいのはわかるけど、個人で使って勝てるのか?」 という疑問です。今回は実際にインストールし、資金調達率アービトラージという戦略をNautilusTraderとpandasの両方で検証しました。6回の試行錯誤を経て、「この条件なら勝てる」というラインを探り当てています。
NautilusTrader とは
nautechsystems/nautilus_trader — 25.1k stars, 3.3k forks, 20,191 commits(2026年7月29日現在)。
pip install nautilus_trader
一発です。Rustツールチェーン不要のプリビルドwheel。バージョン1.230.0。
アーキテクチャは Rust製の決定論的実行エンジン + Pythonバインディング(PyO3)。Pythonで戦略を書き、Rustがナノ秒精度でイベント駆動実行します。
提供されているサンプル戦略(EMAクロス、ボリンジャーバンド逆張り、オーダーブックインバランスなど)には、全ファイルにこう書いてあります:
# *** THIS IS A TEST STRATEGY WITH NO ALPHA ADVANTAGE WHATSOEVER. ***
# *** IT IS NOT INTENDED TO BE USED TO TRADE LIVE WITH REAL MONEY. ***
正直で良いですね。NautilusTraderは 「勝てる戦略」を売るツールではなく、「戦略を作って動かすインフラ」 です。
検証した戦略: 資金調達率アービトラージ
今回検証するのは「資金調達率アービトラージ(Funding Rate Arbitrage)」。暗号資産の無期限先物には8時間ごとに資金調達率が適用され、ロングがショートに(またはその逆に)支払いを行います。
仕組み:
- 現物BTCを買う(ロング)
- 同量の無期限先物BTCを売る(ショート)
- 価格変動リスクは両者が相殺(デルタニュートラル)
- 調達率がプラスなら、ショートがロングから資金調達料を受け取る
理論上、市場の方向性に依存しないインカム戦略です。
試行錯誤の記録
v1: NautilusTraderのテストデータで動作確認
付属のBinance ETHUSDTテストデータ(約7万ティック、2020年8月14日)で基本的な動作を確認しました。
from nautilus_trader.backtest.engine import BacktestEngine
# ...
engine.add_venue(venue=BINANCE_VENUE, oms_type=OmsType.HEDGING, ...)
engine.add_strategy(FundingRateArbStrategy(config=...))
engine.run()
問題なく3オーダー2ポジションが実行されましたが、 NETTING口座ではロングとショートが相殺されてしまいます。HEDGING口座に変更し、現物と無期限先物を別ポジションとして保持できるようになりました。
v2: 実データの注入
ccxtでBybitからBTCの調達率履歴(90日分、200レコード)を取得しました。平均年率3.1%、最大11.0%、最小-10.0%、76%の期間でプラスです。
v3: 同梱テストデータの限界
NautilusTraderのテストデータは2020年のETHUSDT。調達率データは2026年のBTC。期間が一致していないため、時刻合わせが機能しませんでした。
v4: pandasで高速検証に切り替え
NautilusTraderの真価はティックデータや板情報のシミュレーションですが、調達率アービトラージは日足レベルの戦略です。yfinanceでBTCの1時間足データを取得し、pandasベースで高速に検証することにしました。データ期間を2026年5〜7月に統一しています。
v5: デルタニュートラルPnLの修正と動的エントリー
最初のうち、PnL計算にバグがありました。現物の損益だけ計算して、無期限先物のショートポジションの利益を反映していなかったのです。修正後、spotPnL + perpPnLがすべてのトレードでほぼゼロになることを確認しました。
ENTER @ $76,737 → EXIT @ $76,632 (48h後)
spotPnL: -$14 | perpPnL: +$15 → NET: +$3
→ 価格下落も完全相殺。純益は調達料のみ
さらに動的エントリー条件を追加しました:
- 調達率が年率5%以上の時のみエントリー
- 2%未満またはマイナスでイグジット
- 最低24時間保有(手数料負け防止)
結果:
- 15回のエントリー、94回の調達イベント
- 調達料収入 $40.55、手数料 $120
- 純損益 -$79.45(-0.79%)
- バイ&ホールドは同期間で -16.56%(BTC下落相場)
調達料は手数料をカバーできませんでしたが、市場下落時の防御力は確認できました。
v6: 32通りのパラメータ全探索
エントリー閾値(3%, 5%, 8%, 10%)、最低保有時間(24h, 48h, 72h, 168h)、イグジット閾値(0%, 2%)の32組み合わせを全探索しました。
結果: 収益がプラスになった組み合わせはゼロ。
ベスト構成(entry>10%, hold=168h, exit<0%)でも -0.27%。
調達料収入: $40.72 (101イベント)
手数料: $32.00 (4往復 × 4レッグ × 0.02%メイカー)
ベーシス変動損: $35.72
→ 純損益: -$27.00 (-0.27%)
調達料は手数料を上回っているのに、無期限先物と現物の価格差(ベーシス)が調達率の変動とともに動くことで、わずかながら損失が出ています。
わかったこと: 勝てる条件
66日間の検証から、資金調達率アービトラージが利益を出すための条件が明確になりました。
必要条件: 平均調達率 > 7.5%(年率)
| 調達率環境 | 収支 | 判定 |
|---|---|---|
| 平均 3.1%(2026年5-7月実績) | -0.27〜-1.06% | ❌ 赤字 |
| 平均 7.5% | 概ね±0% | ⚠ 損益分岐点 |
| 平均 10.0%(本日実測値) | +0.1%(2ヶ月) | ✅ 微益 |
| 平均 15.0%(強気相場ピーク) | +1.0%(2ヶ月) | ✅ 明確な利益 |
最適パラメータ
エントリー: 調達率 > 10%(年率)
最低保有: 168時間(7日間)
イグジット: 調達率 < 0%(マイナス時のみ退出)
手数料: メイカー注文(0.02%)
実運用の設計
- 調達率が高い時だけ動くボットとして実装する
- 調達率が閾値を下回ったらポジションを閉じて待機
- 月1〜4回のエントリーで十分
- 低調達率時(3%未満)は何もしないのが最適解
特に重要なのは 「常にポジションを持つ必要はない」 という点です。調達率が低い時に無理にエントリーすると、手数料とベーシス変動でジリ貧になります。
NautilusTraderの評価
| 観点 | 評価 | コメント |
|---|---|---|
| インストール | ★★★★★ | pip install 一発。Rust不要 |
| 学習曲線 | ★★☆☆☆ | イベント駆動の理解に時間がかかる |
| バックテスト精度 | ★★★★★ | ナノ秒精度、ティック/板データ対応 |
| 戦略開発の高速性 | ★★★☆☆ | pandas直叩きの方が速い場合も |
| 実運用への道筋 | ★★★★★ | 研究と本番が同一コード |
NautilusTraderは「戦略のプロトタイピング」より「戦略の製品化」に向いています。 初期検証はpandas/backtesting.pyで高速に回し、有望な戦略が見つかったらNautilusTraderに載せ替える、という二段構えが現実的です。
まとめ
- NautilusTraderは本番運用を見据えた堅牢なプラットフォームですが、「勝てる戦略」は自分で作る必要があります
- 資金調達率アービトラージは、調達率が年率7.5%を超える環境で利益が出ます
- 2026年5-7月の平均3.1%環境では赤字。高調達率時のみ稼働する設計が必須です
- 戦略検証の初期段階ではpandas直接操作の方が圧倒的に速いです
検証に使ったコードは GitHub: takurot/quants-tester で公開しています。
付録: 環境とコード
git clone https://github.com/takurot/quants-tester.git
cd quants-tester
python3.12 -m venv .venv
source .venv/bin/activate
pip install yfinance pandas numpy ccxt nautilus_trader
フルスクリプトはリポジトリ内にあり、Qiita掲載のコードやバックテスト結果も再現できます:
-
funding_rate_arb.py— リアルタイム調達率チェッカー -
fetch_funding_history.py— 調達率履歴の取得 -
funding_arb_v5.py— pandasベースのバックテスト(デルタニュートラル修正版) -
funding_arb_v6.py— パラメータ全探索 -
funding_arb_full.py— NautilusTrader完全バックテスト -
mtf_trend_v4.py— マルチ時間軸トレンドフォロー(おまけ)