【MQL5】複数通貨ペアを監視!マルチカレンシーEAの仕組みと簡単な書き方

MQL5 開発講座

こんにちは、潤奈です( ゚Д゚)!

前回の記事では、口座残高と損切り幅に合わせて自動的に取引ロット数を算出し、すべてのトレードで一定のリスクを保つための資金管理ロジックを解説しました。

注文、決済、インジケーターの取得、そして資金管理までをMQL5で書けるようになったら、次はいよいよ「複数通貨ペアを同時に監視してトレードするEA(マルチカレンシーEA)」の構築に挑戦してみましょう!

MQL4からMQL5へ移行する最大のメリットと言っても過言ではないのが、このマルチカレンシー機能の強化です。MQL4では非常に難しかった「他通貨ペアのデータ監視とバックテスト」が、MQL5では驚くほど簡単に、そして高速に実行できるようになっています。

今回も、実際にコピペして動かせるサンプルコード付きで、マルチカレンシーEAの仕組みと堅牢な書き方を分かりやすく解説します!


1. MQL5のマルチカレンシーが優れている理由(MQL4との違い)

まずは、なぜMQL5(MT5)が複数通貨ペアの取引に向いているのか、背景を理解しておきましょう。

MQL4でも、プログラム内で iMA("EURUSD", ...) などのように他通貨のペア名を指定すれば、データ自体は取得できました。
しかし、「バックテスト(過去検証)」の仕様に致命的な問題がありました。

MQL4では、バックテスト時に「EAをセットした1つの通貨ペア」のヒストリカルデータしか正しく読み込めず、他通貨ペアのデータは手動でインポートするなどの力技を使わない限り、まともにバックテストができませんでした。

一方、MQL5(MT5)では、ストラテジーテスターが最初からマルチカレンシーテストに対応しています。
EAのコード内で「EURUSD」や「GBPJPY」といった他通貨のデータを要求すると、MT5が自動的に裏側で該当する通貨ペアの過去データを同期・取得し、正確なバックテストを実行してくれます。1回のテストで複数通貨ペアの売買を同時に検証できるため、ポートフォリオ運用のEAなどを開発するのに最適な環境となっています。


2. 他通貨ペアのデータ取得における重要な注意点

他通貨ペアのデータを監視する際、単に通貨ペアの名前(文字列)を指定するだけですが、実戦でバグを起こさないために以下の2つの安全対策が必要です。

① インジケーターハンドルの作成方法

他通貨のインジケーター値を取得する場合も、これまでに学んだ「3ステップ(ハンドル取得 → 配列準備 → コピー)」と同じです。
違いは、iMA 関数の第1引数に _Symbol(現在のチャートの通貨ペア)ではなく、"EURUSD" などの具体的な通貨ペア名を指定する点だけです。

② 【重要】データの同期待ち(未同期エラーの回避)

他通貨ペアのデータ(ローソク足やインジケーター値)を初めて要求した瞬間は、MT5側にデータがまだ読み込まれておらず、一時的に CopyBuffer() がエラー(戻り値が <= 0)を返すことがあります。

起動した直後にこの「データ未同期」によるエラーが発生しても、EAが止まってしまわないよう、「データがしっかりと同期されるまでは処理をスキップして待つ」というロジックを必ず組み込むのが、実践向けの安全な設計です。

③ 監視する「時間足」の指定について

他通貨のデータやインジケーターハンドルを作成する際、時間足に _Period を指定すると、EAをセットしている「現在のチャートの時間足(例:1時間足チャートなら1時間足)」が自動で割り当てられます。
これにより、どの通貨ペアも同じ時間足として処理されるためシンプルですが、もし「どのチャートにセットしても、他通貨の『1時間足(H1)』のデータを固定で監視したい」という場合は、_Period の代わりに PERIOD_H1 のように定数を明示的に指定しておきましょう。


[!TIP]
コラム:マルチカレンシーEAにおける「OnTick」の稼働タイミング
今回作成するマルチカレンシーEAは、基本となる OnTick() 関数の中でループを回して3通貨ペアを監視します。
ここで注意が必要なのは、「EAをセットしたチャートの通貨ペアにチック(価格変動)が発生したタイミングでしか OnTick は動かない」というMQL5の仕様です。

例えば、このEAを「USDJPY」のチャートにセットした場合、EURJPYやGBPJPYが激しく動いていても、USDJPYの価格が1ピップも動かなければ、その瞬間は OnTick 内の処理が走りません。
バックテスト時はテスターがすべての通貨ペアのチックを擬似的に同期して動かすため問題にはなりませんが、実際のリアル稼働時に完全にリアルタイムで他通貨の変動を監視したい場合は、タイマー機能(OnTimer())を併用して一定秒数ごとに監視処理を走らせる、といった工夫をすることもあります。まずは基本となる OnTick での書き方をしっかりとマスターしていきましょう!


3. コピペで動く!3通貨ペア(USDJPY, EURJPY, GBPJPY)監視サンプルEA

それでは、実際の挙動を確認するためのサンプルコードを紹介します。
このEAは、どのチャートにセットしても、指定した3つの通貨ペア(USDJPY、EURJPY、GBPJPY)の短期MA(期間10)と長期MA(期間30)を同時に監視します。

いずれかの通貨ペアでゴールデンクロス(またはデッドクロス)が発生したら、その通貨ペアに対して個別にエントリーと決済(ドテン)を行う、本格的なマルチカレンシーEAのテンプレートコードです。


4. マルチカレンシーEAのバックテストを実行する

このEAをMT5の「ストラテジーテスター」で動かす手順は非常にシンプルです。

  1. ストラテジーテスターを開き、設定の「プログラム」で MultiCurrencyEA を選択します。
  2. 「通貨ペア」は、監視対象に含まれているいずれかのペア(例: USDJPY)を選択します。
  3. テスト期間や時間足(例: H1)を指定して「スタート」ボタンをクリックします。
  4. テスト完了後、取引履歴やグラフを確認してみてください。USDJPYだけでなく、EURJPYやGBPJPYの取引も同時に自動で行われ、資金が合算されて推移している様子が確認できるはずです!

MT5では他通貨ペアのデータダウンロードなどもすべて全自動で処理されるため、複雑な下準備なしで即座に検証結果が得られます。


5. まとめ&次のステップ

今回は、MQL5の強みを最大限に活かした「複数通貨ペアを監視・取引するマルチカレンシーEA」の仕組みと書き方を解説しました。

  • MQL5(MT5)は標準でマルチカレンシーのバックテストに対応している。
  • 他通貨のデータやインジケーター値を要求する際は、iMA などの関数に通貨ペア名を直接指定する。
  • 起動直後などの未同期状態によるエラーを防ぐため、データの同期チェックとロード待ちロジックは必須。
  • 注文・決済時にも、対象となる通貨ペア名を明示的に指定して trade.Buy() などを呼ぶ。

これで、単一の通貨ペアに縛られない、幅広い戦略を持ったEAの基礎が完成しました!

次回は、EAに「ボタン」や「入力ボックス」などの操作パネルを表示させ、チャート上からワンクリックで決済や設定変更ができるようにする「チャート上のUIボタン・操作パネル表示の基本」について解説します。EAの使いやすさを向上させるためのビジュアル要素の実装に挑戦しましょう!

今回のマルチカレンシーコードで「特定の通貨だけ取引されない」「エラーログが頻出する」などの疑問があれば、YouTubeのコメント欄やXでお気軽にご連絡くださいね!

🎥 YouTubeチャンネル: 潤奈【FXチャンネル】
🐦 X (Twitter): @zyuna32246

コメント

タイトルとURLをコピーしました