はじめに
EAを開発するとき、最初に決めなければならないのがプラットフォームの選択です。MT5かcTraderか。この選択は戦略そのものと同じくらい重要です。
筆者は同一のトレーディングロジックをMT5(MQL5)とcTrader(C#)の両方で実装し、複数のプロップファームで並行運用しています。「どちらが優れているか」ではなく、「どの場面でどちらが適しているか」を、実運用のデータをもとに整理します。
言語とエコシステム
| 項目 | MT5 (MQL5) | cTrader (C#) |
|---|---|---|
| 言語 | MQL5(C++ライク独自言語) | C#(.NET 6) |
| IDE | MetaEditor(専用) | Visual Studio / Rider |
| デバッグ | プリントデバッグ中心 | 本格的なデバッガ利用可 |
| ライブラリ | MQL5標準ライブラリ | NuGetパッケージ全体 |
| AI補完 | 対応が限定的 | GitHub Copilot等が高精度 |
開発体験はcTraderが圧倒的に快適です。C#は汎用言語のため、AIコード補完の精度が高く、NuGetで統計ライブラリなども自由に使えます。MQL5は独自言語のため、AIの学習データが少なく補完精度が低い傾向があります。
一方、MQL5はEA開発に特化しているため、トレード関連のコードは簡潔に書ける場面もあります。インジケーターの呼び出しやポジション管理は、MQL5の方がコード量が少なく済むことが多いです。
バックテスト
速度比較
同一ロジック、USDJPY H1のバックテスト結果です。
| テストモデル | MT5 | cTrader |
|---|---|---|
| 生成ティック(7年) | 3.4秒 | 非対応 |
| リアルティック(7年) | 53秒 | — |
| リアルティック(2年) | 37秒 | — |
MT5のバックテスト速度は圧倒的です。特に「生成ティック(Every tick)」モードは数秒で7年分のテストが完了します。
cTraderにもバックテスト機能はありますが、MT5ほどの速度と柔軟性はありません。WFA(ウォークフォワード分析)のような大量の反復テストが必要な場合、MT5の速度は大きなアドバンテージになります。
データ品質
| データ種別 | 説明 | 信頼性 |
|---|---|---|
| 生成ティック | 1分足データからティックを擬似生成 | 低〜中 |
| リアルティック | ブローカーの実ティックデータ | 高 |
| QDM(Quantly Data Manager) | Dukascopyのティックデータをダウンロードし、MT5に反映させた高品質データ | 最高 |
生成ティックとリアルティックで結果が大きく異なるEAは危険です。ティック精度に依存するスキャルピング系は特に注意が必要です。H1以上の時間足を使う戦略であれば、生成ティックでも実用的な精度が得られます。
VPS運用
EA運用で最も差が出るのがサーバー運用です。
MT5の運用
| 項目 | 内容 |
|---|---|
| OS | Windows必須 |
| GUI | 必須(GUIなしでは動作しない) |
| 接続方法 | RDP(リモートデスクトップ) |
| メモリ | ~500MB〜1GB/インスタンス |
| 同時実行 | 1インスタンスにつき1口座 |
MT5はGUIアプリケーションのため、常にリモートデスクトップ接続でGUIセッションを維持する必要があります。SSH経由でのバックグラウンド実行はできません。
複数口座を運用するには、MT5を複数インストールするか、PortableMode用のフォルダを複数作成する必要があります。口座数が増えるとメモリ消費が急増します。
cTraderの運用
| 項目 | 内容 |
|---|---|
| OS | Windows / Linux(Wine経由) |
| GUI | 不要(CLI版あり) |
| 接続方法 | SSH |
| メモリ | ~200MB/プロセス(CLI版) |
| 同時実行 | プロセス単位で無制限 |
cTraderにはCLI版(ctrader-cli.exe)が存在し、GUIなしでcBotを実行できます。これが運用面での最大のアドバンテージです。
GUI版: ~1.6GB / プロセス
CLI版: ~200MB / プロセス(約1/8)
メモリ消費が1/8になるため、安価なVPS(RAM 2GB程度)でも複数プロセスを稼働できます。
Linux (Wine) での運用
cTrader CLIはWindows用バイナリですが、Wine経由でLinux上でも動作します。
| 構成要素 | 説明 |
|---|---|
| Wine | Windows APIエミュレーション |
| Xvfb | 仮想ディスプレイ(.NETが要求するGDI+用) |
| systemd | プロセス管理・自動再起動 |
| .NET GC最適化 | メモリ消費を抑制する設定 |
systemd (自動再起動)
→ Wine (Windows API変換)
→ ctrader-cli.exe (.NET 6)
→ cBot
→ cTrader Server (WebSocket)
systemdのテンプレートサービスを使えば、1つの設定ファイルで任意の数のcBotインスタンスを管理できます。
# 口座Aの起動
systemctl start ctrader-bot@account-a
# 口座Bの起動
systemctl start ctrader-bot@account-b
# 全口座の状態確認
systemctl status ctrader-bot@*
ただしWineの運用には注意点があります。
- Wine本体のバグ: .NET 6のランタイムがWineの内部アサーションに触れるケースがあり、パッチが必要になることがある
- 自動更新でパッチ消失:
apt-mark hold wine-stableでパッケージを固定しないと、アップデートでパッチが上書きされる - OOM Kill: メモリ制限のあるVPSでは、3プロセス以上でOOM Killerが発動する場合がある
監視と自動復旧
24時間稼働のEAにはwatchdog(監視)が必要です。
MT5の場合
MT5にはネイティブの自動復旧機能がありません。外部スクリプト(PowerShell等)で監視する必要があります。
- ログの更新を定期チェック(2時間以上更新なし → 異常)
- プロセスの生存確認
- ログイン失敗時のGUIトークン再取得(手動介入が必要な場合あり)
cTraderの場合
systemdのRestartポリシーを設定するだけで、基本的な自動復旧は完了します。
| 設定 | 値 |
|---|---|
| Restart | on-failure |
| RestartSec | 30秒 |
| OOMScoreAdjust | -500(OOM Kill優先度を下げる) |
プロセスが異常終了すれば30秒後に自動再起動します。systemdのジャーナルにログが残るため、障害分析も容易です。
プロップファーム対応
プラットフォーム選択はプロップファーム側の対応状況にも依存します。
| プロップファーム | MT5 | cTrader |
|---|---|---|
| Fintokei | ✅ | ✅ |
| FTP(Funded Trading Plus) | ✅ | ✅ |
| Fundora | ❌ | ✅ |
| Funded7 | ✅ | ✅ |
| DarwinexZero | ✅ | ❌ |
| FundedHive | ❌ | ✅ |
MT5のみ対応、cTraderのみ対応のファームがそれぞれ存在します。両方で実装を持っていると、選択肢が最大化されます。
同一ロジックでの性能差
同一ロジックをMT5とcTraderの両方で実装した結果、以下のことがわかりました。
一致する点
- WFA(ウォークフォワード分析)の合格・不合格判定は同一
- トレード方向(ロング/ショート)の大多数が一致
- 月次リターンの傾向は同じ
異なる点
| 差異要因 | 説明 |
|---|---|
| スプレッド | ブローカーごとに異なる。特に早朝・指標時の開きに差が出る |
| 約定方式 | MT5: Market Execution中心。cTrader: Market/Limit/Stop |
| ティック配信 | ティックの粒度・タイミングがブローカーにより微妙に異なる |
| スワップ | ブローカー・プロップファームにより異なる(Swap-free口座もある) |
ロジックの違いではなく、ブローカー環境の違いが成績差の主因です。同一プラットフォーム・同一ブローカーであれば、MT5とcTraderの実行結果は実質的に同じになります。
どちらを選ぶべきか
| 用途 | 推奨 | 理由 |
|---|---|---|
| 戦略開発・バックテスト | MT5 | バックテスト速度が圧倒的。WFA等の大量テストに必須 |
| 本番運用・マルチ口座 | cTrader | CLI対応、低メモリ、systemd管理、Linux対応 |
| MT5専用ファーム | MT5 | 選択の余地なし(FTP等) |
| cTrader専用ファーム | cTrader | 選択の余地なし(Fundora等) |
| 予算が限られている | cTrader | 安価なLinux VPSで運用可能 |
理想的には、MT5で開発・検証し、cTraderで本番運用するワークフローが最も効率的です。開発速度と運用安定性の両方を確保できます。
もちろん、同一ロジックを2言語で実装・保守するコストはかかります。戦略が頻繁に変わる段階ではMT5一本に絞り、戦略が固まってからcTraderに移植するのが現実的な進め方です。
おわりに
MT5とcTraderは「どちらが優れているか」ではなく、フェーズと用途で使い分けるのが正解です。
- 開発・検証フェーズ → MT5(バックテスト3.4秒、リアルティック対応)
- 本番運用フェーズ → cTrader(CLI版200MB、systemd管理、Linux対応)
- プラットフォームの選択肢はプロップファームが決める場面も多い
- 同一ロジックの性能差はプラットフォームではなくブローカー環境が主因
- 両方の実装を持つことで、プロップファームの選択肢が最大化される