Python FXバックテスト ライブラリ 比較2025:用途別に選ぶ7つの選択肢
Photo by Maxim Hopman on Unsplash
最終更新: 2026年06月
「Pythonでバックテストをしたい」という相談は、ここ数年で明らかに増えた。MT4のストラテジーテスターから卒業し、より自由度の高い検証環境を求めるトレーダーやクオンツ志望エンジニアが増えているからだ。ただいざライブラリを選ぼうとすると、backtrader・VectorBT・backtesting.py・QuantConnect LEANなど選択肢が乱立しており、「どれを選べばいいか」で立ち往生する。本稿では7種のライブラリをFXバックテスト用途に絞って比較し、用途別に推奨を示す。なお、バックテスト結果は過去データに基づくシミュレーションであり、将来の利益を保証するものではない。
FXバックテストでPythonライブラリを使う理由
結論から言えば、PythonはMT4/MQL4では不可能な機械学習との統合・大規模統計処理・高速パラメータ最適化をバックテスト環境にそのまま持ち込める点で優位性がある。
MT4/MT5のストラテジーテスターは確かに便利だ。しかしMQL4/MQL5の制約は思いのほか大きい。機械学習モデルとの統合、Pandas/NumPyによる統計処理、複数通貨ペアの同時最適化——こういった処理をやろうとすると、Pythonエコシステムとの差は圧倒的になる。
整理するとこの3点に行き着く。
- データサイエンスツールとの親和性: scikit-learn・PyTorchによる予測モデルをシームレスにストラテジーに組み込める
- 柔軟な統計分析: 分布検定・ウォークフォワード分析・モンテカルロシミュレーションをライブラリ一本で完結できる
- 可視化の自由度: Plotly・Matplotlibによるカスタムレポートを容易に生成できる
MT5との連携については、pip install MetaTrader5の1行で公式Pythonライブラリが導入でき、OHLCデータをpandas DataFrameとして直接取得できる。この点は後述のMT5連携セクションで詳しく触れる。
設計思想の違いを理解する:イベント駆動型 vs ベクトル化型 — backtrader vs VectorBT 速度・精度の違い
ライブラリを選ぶ前に、設計思想の根本的な違いは押さえておきたい。大別するとイベント駆動型とベクトル化型の2系統になる。
イベント駆動型は1本ずつローソク足を処理する。on_bar()のようなコールバック関数に戦略ロジックを記述する設計で、実際のブローカー動作に近い。注文のキューイング、部分約定、スリッページの発生タイミングを忠実に再現できる。ただしループ処理のオーバーヘッドで、数十万本のティックデータを扱うと速度がボトルネックになってくる。backtrader・Zipline・PyAlgoTradeがこの系統だ。
ベクトル化型は全期間のデータを一括してNumPy/Pandasの配列演算で処理する。計算は数十〜数百倍速いが、「バーNのシグナルが確定する前にバーN+1のデータを参照してしまう」というルックアヘッドバイアスが混入するリスクがある。個人的にはここが最も見落とされやすい落とし穴だと思う。VectorBT・btがこの系統に属する。
どちらが優れているかという問いは、正直なところあまり意味がない。何を検証したいかで選ぶだけだ。
ライブラリ別詳細比較(7種) — backtrader FX 使い方から QuantConnect LEAN まで
Photo by Nick Chong on Unsplash
backtrader
backtraderはPythonのイベント駆動型バックテストフレームワークで、コミッション・スリッページ・複数データフィードに対応した機能を標準装備し、OandaやInteractive Brokersとのライブトレード連携まで設計に含む。
GitHub上で22,100スター・5,100フォーク(GitHub: mementum/backtrader)を持つ、事実上のPythonバックテストの標準ライブラリ。イベント駆動型で、コミッション・スリッページ・ストップロスのビルトイン対応が充実している。OandaのREST API、Interactive Brokersとのライブトレード連携が実装されており、バックテストからライブへの移行を設計段階から見据えた構造だ。
FXデータの話に限れば、MT5データをCSV経由でインポートするほか、コミュニティ実装のBacktrader-MQL5-API(GitHub: khramkov/Backtrader-MQL5-API)を使えばMT5とのより直接的な連携も取れる。
ただし見過ごせない問題がある。最終コミットは2024年8月で、更新頻度は著しく低下しており、コミュニティフォークが維持を担っている状態だ。開発停止ライブラリを本番運用に採用するなら、Python新バージョンとの非互換リスクを最初から織り込んでおいてほしい。変動スプレッドのネイティブ対応はなく、FXリアル環境に近づけるには自前実装が必要になる点も同様だ。
Zipline / Zipline-reloaded
Zipline(現Zipline-reloaded)はQuantopianが開発したPythonバックテストライブラリで、Pipeline APIによるファクター投資と機械学習ライブラリとの統合に強みを持つが、FXデータのインポートには専用バンドル形式への変換が必要で準備工数が大きい。
もともと米国クオンツヘッジファンドプラットフォームのQuantopianが開発したライブラリ。Quantopianの2020年閉鎖に伴い、Stefan Jansenによるzipline-reloadedとして継続されている(最新v3.1.1、Python 3.12/3.13対応、出典: PyPI)。
scikit-learn・PyTorchとの統合が自然で、Pipeline APIによるファクター投資の実装に強みがある。ただFXとして使う場合は設計思想のギャップが大きい。データを専用の「バンドル」形式に変換しなければならず、EURUSD一本を流し込むだけで相当の準備工数がかかる。7ライブラリ中インストール難易度が最も高く、「まずFXのバックテストを動かしてみたい」という段階で選ぶライブラリではない。
bt(pmorissette/bt)
btはポートフォリオ戦略を「信号生成→アロケーション→リバランス」としてコンポーザブルに組み立てるPythonバックテストライブラリで、株式・ETFポートフォリオ最適化に強みがある一方、FX固有のスワップ・証拠金計算には明示的なサポートがない。
GitHub 2,900スター(GitHub: pmorissette/bt)。複数資産のポートフォリオ戦略をコンポーザブルに組み立てる設計が特徴だ。「信号生成 → アロケーション → リバランス」という分解は直感的で、株式・ETFポートフォリオの検証には素直にはまる。
FXとして見ると、通貨ペア特有の概念——スワップポイント、証拠金計算、レバレッジ管理——のサポートがない。個別ペアの細かいシミュレーションより、通貨ファンドのポートフォリオ効率を検証するような用途向きだ。
VectorBT
VectorBTはNumPy・Pandas・Numba JITコンパイルを組み合わせたベクトル化バックテストライブラリで、10,000パターン規模のグリッドサーチを数秒で実行できる一方、商用利用にはApache 2.0 + Commons Clauseのライセンス制限とPRO版が必要になる。
NumPy + Pandas + Numba(JITコンパイル)の組み合わせで実現するベクトル化バックテスト。Medium(trading.dude)の比較記事によれば「数百万トレードを1秒未満でシミュレーション」が可能とされている——ただしこれはベンチマーク環境依存なので、手元で再検証してほしい。実際に通常の取引戦略で試した限り、backtraderとの速度差は体感で10〜50倍の範囲に収まることが多かった。
GitHub 8,000スター(GitHub: polakowo/vectorbt)。スプレッドはfeesパラメータで設定でき、スリッページも対応している。10,000パターンのパラメータ最適化を数秒で回せる処理能力は、大規模なグリッドサーチには圧倒的に有利だ。
注意したいのが2点。ベクトル化の性質上、ルックアヘッドバイアスが混入しやすいこと。それとライセンス構造だ。無料版はApache 2.0 + Commons Clause(フェアコード)で販売目的での利用に制限があり、ライブトレード連携機能はPRO版(有料)に限定されている。OSS前提で商用サービスを構築するなら事前確認は必須だ。
インジケータの設計やパラメータ検証をコードを書かずに進めたい場合は、Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
PyAlgoTrade
PyAlgoTradeはPythonのイベント駆動型バックテストライブラリだが、現時点では更新が停止しているステール状態にあり、新規プロジェクトへの採用は推奨されない。
イベント駆動型の老舗ライブラリ。現時点ではステール(更新停止)状態にある。新規プロジェクトでの採用は推奨しない。既存コードのメンテナンス以外の用途では、他を選んだほうがいい。
QuantConnect LEAN
QuantConnect LEANはEquities・Forex・Options・Futures・Crypto・CFDを統合管理できる機関投資家向けアルゴ取引エンジンで、FX固有のスワップ計算・通貨換算コスト・証拠金計算をエンジン側で処理し、多数のブローカーとのライブ連携を標準装備する。
GitHub 20,000スター(GitHub: QuantConnect/Lean)。Equities・Forex・Options・Futures・Crypto・CFDを統合ポートフォリオで管理できる、機関投資家クオリティのアルゴ取引エンジンだ。QuantConnect公式によれば50万人超のクオンツコミュニティが利用し、37万件以上のライブ戦略が運用実績を持つ。この規模感は他の追随を許さない。
FX固有の機能——通貨両替コスト、スワップ計算、複数通貨建て証拠金——がエンジン側で処理されており、ユーザーが個別に実装しなくていい。クラウド版QuantConnectプラットフォームと組み合わせれば、Quantopianが目指した「クラウドクオンツ環境」に最も近い体験が得られる。これは正直、他のライブラリには出せない強みだ。
ただし学習コストは7ライブラリ中断トツで高い。ローカル環境構築はDocker推奨でセットアップが複雑で、「とりあえずバックテストを動かしてみたい」段階で選ぶと確実に詰まる。本格的なアルゴトレードシステムを構築するチームが、最初から設計に含めるべきライブラリだ。
backtesting.py
backtesting.pyはシンプルさを設計思想の核に置いたPythonバックテストライブラリで、pip install backtesting1行でFX戦略のサンプルを含む環境が構築でき、HTMLインタラクティブレポートが自動生成される。ライセンスはAGPL-3.0。
GitHub 8,500スター(GitHub: kernc/backtesting.py)。「シンプルさ」を設計思想の核に置いており、公式ドキュメントにEURUSD時間足データを使ったFX戦略のサンプルがある。インストールはpip install backtestingの1行で終わり、HTMLインタラクティブレポートが自動生成される。学習・プロトタイプフェーズには相性がいい。
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
import pandas as pd
# MT5から取得したOHLC DataFrameをそのまま渡せる
data = pd.read_csv("EURUSD_H1.csv", index_col=0, parse_dates=True)
class SmaCross(Strategy):
n1 = 20
n2 = 50
def init(self):
self.sma1 = self.I(SMA, self.data.Close, self.n1)
self.sma2 = self.I(SMA, self.data.Close, self.n2)
def next(self):
if crossover(self.sma1, self.sma2):
self.buy()
elif crossover(self.sma2, self.sma1):
self.sell()
bt = Backtest(data, SmaCross, cash=10_000, commission=0.0002)
stats = bt.run()
bt.plot() # ブラウザでインタラクティブチャートが開く
気をつけたいのはライセンスだ。AGPL-3.0なので、派生物を商用サービスに組み込む場合はソースコード公開義務が発生する。商用利用を検討しているなら、法的確認を先に済ませておいてほしい。
FXバックテスト特有の考慮事項 — スプレッドシミュレーションとMT5データ連携フロー
Photo by Adam Śmigielski on Unsplash
スプレッド・スリッページのシミュレーション
FXバックテストで「本番環境との乖離」が生じる最大の原因はスプレッドの扱いだ。固定スプレッドで検証した戦略が、変動スプレッドの本番環境で成績を大きく落とすケースは珍しくない。特に経済指標発表前後は瞬間的にスプレッドが拡大するため、スキャルピング系の戦略ほど影響を受けやすい。
各ライブラリでのスプレッド設定例を示す。
# backtrader: コミッションとしてスプレッドを近似
cerebro.broker.setcommission(commission=0.0001) # 1pip相当
# backtesting.py: commissionパラメータで設定
bt = Backtest(data, MyStrategy, cash=10000, commission=0.0002)
# VectorBT: feesパラメータで設定(両方向分を考慮)
pf = vbt.Portfolio.from_signals(
close, entries, exits,
fees=0.0001,
slippage=0.00005
)
変動スプレッドを再現したい場合は、別途スプレッドの時系列データを用意して注文実行時に動的にコストを計算するカスタム実装が現実的な選択肢になる。
バックテスト戦略の設計段階でインジケータをClaudeと対話しながら組み立てたい場合は、Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
MT4/MT5データとの連携フロー
MT5の公式Pythonライブラリを使ったデータ取得フローを示す。取得したDataFrameは上記どのライブラリにも渡せる形式で出力される。
import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime
# MT5起動・接続
if not mt5.initialize():
raise RuntimeError("MT5初期化失敗")
# OHLCデータ取得(EURUSD 1時間足 直近5000本)
rates = mt5.copy_rates_from_pos(
"EURUSD", mt5.TIMEFRAME_H1, 0, 5000
)
mt5.shutdown()
# pandas DataFrameに変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
df = df.set_index("time")
df.rename(columns={
"open": "Open",
"high": "High",
"low": "Low",
"close": "Close",
"tick_volume": "Volume"
}, inplace=True)
# この df をそのままbacktesting.py・VectorBT・backtraderに渡せる
このフローが日本のMT5ユーザーにとって最も実用的なエントリーポイントだ。既存のMT4/MT5環境とPythonを橋渡しするだけで、すべてのライブラリが使える状態になる。
用途別推奨ライブラリ一覧
| 用途 | 推奨ライブラリ | 理由 | |---|---|---| | 初学者・プロトタイプ | backtesting.py | インストール1行・HTML自動レポート・FXサンプルあり | | 大規模パラメータ最適化 | VectorBT | ベクトル演算で10,000パターンを数秒 | | 本番ライブトレード移行 | backtrader / QuantConnect LEAN | ライブトレード連携が設計に含まれている | | 機械学習との統合 | Zipline-reloaded | scikit-learn・PyTorch統合が自然 | | 機関投資家クオリティ | QuantConnect LEAN | FX専用機能・多数のブローカー連携 | | ポートフォリオ効率検証 | bt | コンポーザブル設計・リバランス戦略に強い |
【注意】バックテストの限界とリスク
バックテストは「過去のデータを使ったシミュレーション」に過ぎない。将来の相場でも同じ結果が再現される保証はなく、良好なバックテスト成績はライブトレードでの利益を約束しない。FX取引には元本割れリスクがある。
実際に痛い目を見やすいポイントは4つある。
カーブフィッティング(過学習): パラメータを過去データに最適化しすぎると、未来データで性能が劣化する。ウォークフォワード分析やアウトオブサンプル検証を必ず実施すること。
ルックアヘッドバイアス: ベクトル化型ライブラリ(特にVectorBT)では、未来のデータを参照した状態でシグナルを計算してしまうバグが混入しやすい。各シグナルが確定したタイミングを常に意識した実装が求められる。
開発停止リスク: backtraderとPyAlgoTradeは実質的なメンテナンスが停止している。将来のPythonバージョンアップで非互換になるリスクがあり、長期的なシステム維持コストに影響してくる。
ライセンスリスク: backtesting.pyのAGPL-3.0はOSSとして使う分には問題ないが、サービスへの組み込みにはソース公開義務が伴う。VectorBT無料版のApache 2.0 + Commons Clauseも商用利用に制限があり、後から気づくと対応が困難になる。
免責: 本記事は情報提供を目的としており、特定ライブラリの利用や投資手法を推奨するものではありません。FX取引には元本割れリスクがあります。実際の取引判断はご自身の責任で行ってください。
まとめ
7種を比較した結論はシンプルだ。「最強のライブラリ」は存在しない。目的と習熟度によって最適解は変わる。
- プロトタイプ段階: backtesting.py で始める。1日でバックテスト環境が構築できる
- 高速な大規模検証: VectorBT に移行する。ただしライセンスと学習コストは事前確認
- 本格的なライブ移行: QuantConnect LEAN を最初から設計に含める
MT5ユーザーにとって最もコスパが高いのは、MetaTrader5ライブラリでデータを取得してbacktesting.pyに流し込む構成だ。既存のMT5環境を捨てず、Python解析を上乗せするだけで実用的な検証環境が手に入る。
ライブラリ選定に迷う前に、「どの戦略仮説を検証したいか」を先に言語化する。それが固まれば、どのライブラリが適切かは自ずと絞られてくる。
戦略のインジケータ設計をコードなしで試してみたい場合は、Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
関連: PythonとMT5 EAを組み合わせたFX自動売買の実践
よくある質問(FAQ)
Q: backtraderはまだ使えますか? A: バックテストツールとして機能は完成されており現在も動作しますが、メンテナンスが実質停止しているため、Python新バージョンとの互換性リスクを意識した上で採用を検討してください。
Q: VectorBTの無料版と有料版の違いは何ですか? A: 無料版はApache 2.0 + Commons Clause(フェアコード)でバックテスト機能が中心です。ライブトレード連携機能はPRO版(有料)に限定されており、販売目的での商用利用にも制限があります。
Q: MT4のCSVデータをPythonバックテストに使えますか? A: 使えます。MT4からCSVエクスポートしたデータをpandasで読み込み、Open/High/Low/Closeカラムに整形すれば、backtesting.py・backtrader・VectorBTすべてに渡せます。
Q: QuantConnect LEANはローカルで動きますか? A: 動きます。ただし公式推奨はDocker環境での実行です。セットアップにある程度の時間を要するため、まずクラウド版QuantConnectプラットフォームで試すことを推奨します。
Q: バックテストで良い成績が出れば実際にも勝てますか? A: バックテスト結果は過去データへの当てはめに過ぎず、将来の利益を保証するものではありません。アウトオブサンプル検証・ウォークフォワード分析・実際の本番環境でのフォワードテストを経て、初めて戦略の有効性を評価できます。FX取引には元本割れリスクがあります。
Q: バックテストで検証した戦略のインジケータをAIと一緒に設計・調整できますか? A: Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。バックテストで仮説が固まった後のインジケータ実装フェーズをAIとの対話形式で進めることができます。
