MQL4 MQL5 の違いを正確に把握することが、EA開発の効率と品質を左右します。本記事ではイベント駆動モデル・データ型・バックテスト仕様の差を体系的に整理し、プラットフォーム選択の判断基準を提供します。
- MT4からMT5へEAを移植したいが、どこを修正すべきか把握できていない方
- MQL4とMQL5のどちらでEAを開発すればよいか迷っている方
- MQL5のバックテスト機能やマルチスレッド対応を活用して開発効率を上げたい人
- MQL4 MQL5 違いの核心はイベント駆動モデルの設計思想にあり、OnTick/OnStart の使い分けがEA動作を決定づける。
- MQL5はOOP(オブジェクト指向プログラミング)を完全サポートし、クラス・テンプレート・継承を活用した保守性の高いコードが書ける。
- バックテストではMQL5のマルチスレッド処理と複数通貨ペア同時テストがMQL4を大幅に上回る検証精度を実現する。
- 短期EA・ブローカー互換性重視ならMQL4、長期保守・高精度検証・複数アセット対応ならMQL5が最適な選択肢となる。
MQL4とMQL5の基本的な違いとは
MQL4(MetaQuotes Language 4)とMQL5(MetaQuotes Language 5)は、どちらもMetaQuotes社が開発した自動売買システム(EA)・インジケーター・スクリプト作成のためのプログラミング言語です。MQL4はMetaTrader 4(MT4)専用、MQL5はMetaTrader 5(MT5)専用として設計されており、見た目はどちらもC++に近い構文を持ちますが、内部の設計思想は大きく異なります。
MQL4 MQL5 の違いを一言で表すなら、「手続き型言語」か「オブジェクト指向言語」かという設計思想の違いに集約されます。MQL4はシンプルで習得しやすい手続き型のアプローチを採用しており、少ないコード行数でEAを動作させられる利点があります。一方MQL5は、クラス・継承・テンプレート・ポリモーフィズムなどのOOP(オブジェクト指向プログラミング)を完全サポートし、大規模・複雑なEA開発に対応できる設計になっています。
言語のバージョン進化だけでなく、プラットフォーム自体の仕様も大きく変わっています。MT4は2005年のリリースから現在まで、外国為替(FX)取引に特化したシンプルな構造を維持してきました。MT5は2010年のリリース後、FXのほかに株式・先物・CFDなどの多資産クラスを一元管理できるマルチアセット対応プラットフォームへと進化しています。この根本的な設計目的の差が、MQL4とMQL5の仕様差として随所に現れています。
EA開発者の観点から最も重要な違いを先に整理しておくと、以下の4点になります。
| 比較項目 | MQL4(MT4) | MQL5(MT5) |
|---|---|---|
| 言語パラダイム | 手続き型(一部OOP) | 完全OOP対応 |
| イベント処理 | OnTick / OnInit / OnDeinit | 多数のイベントハンドラ(OnTrade等含む) |
| 注文管理 | OrderSend() 一本化 | CTrade クラスによる分離管理 |
| バックテスト | シングルスレッド・単一通貨 | マルチスレッド・マルチ通貨対応 |
| 対応資産クラス | 主にFX・CFD | FX・CFD・株式・先物・オプション |
これらの違いはEA開発の実作業に直接影響します。以降のセクションで各差分を詳しく掘り下げていきます。
対応プラットフォームとEAの互換性
MQL4で作成したEAはMT4でのみ動作し、MQL5で作成したEAはMT5でのみ動作します。この非互換性は、単純なファイルコピーでは解消できない根本的な仕様差から生まれています。MT4とMT5では注文モデルそのものが異なるため、MQL4のコードをMQL5に移植する際は相当量のリファクタリング(コードの書き直し)が必要です。
最も大きな非互換点が「注文モデルの違い」です。MT4はポジション管理が「注文ベース」であり、同一通貨ペアに対して複数の独立した買い・売りポジションを同時に保有できます(ヘッジングモード)。MT5はデフォルトで「ネットポジションモード」を採用しており、同一シンボルの買いと売りは相殺されて1本のネットポジションになります。ただしMT5でも口座設定によってはヘッジングモードが利用できるため、ブローカーの口座仕様を確認することが重要です。
この注文モデルの差はコード上でも顕著に現れます。MQL4では OrderSend() 関数一本でポジションのオープンからクローズまでを担いますが、MQL5では発注(OrderSend())・ポジション管理(PositionSelect() など)・約定履歴(HistoryDealSelect() など)が明確に分離されています。MQL4コードをそのままMQL5環境に貼り付けても動作しない最大の理由がここにあります。
互換性問題を回避する手段として、MetaQuotes社は「MQL4互換ライブラリ」と呼ばれる変換ヘッダーを提供しています。このヘッダーを使えばMQL4のコードをある程度MT5上で動かすことができますが、完全な互換性は保証されていません。特にティックデータの参照方法や時系列インデックス(後述)の違いは、互換ライブラリを使っても修正が必要なケースが多く存在します。EA移植プロジェクトでは、互換ライブラリを足がかりにしながら、コアロジックを一から書き直す想定でスケジュールを組むことを推奨します。
XMTrading
XMTradingはMT4・MT5の両プラットフォームを提供しており、MQL4とMQL5どちらで開発したEAも同一口座で運用テストが可能です。海外FXブローカーの中でもEA利用への制限が少なく、スキャルピングEAから長期系EAまで幅広い戦略に対応しています。
※FX取引にはリスクが伴います。余裕資金での取引を推奨します。
関数・構文の主要差分(イベント駆動・データ型)
MQL4とMQL5の構文レベルの違いを理解することは、EA移植作業の工数見積もりに直結します。大きく「イベントハンドラの違い」「時系列データ参照の違い」「データ型の違い」「組み込み関数の違い」の4つに分けて解説します。
1. イベントハンドラの違い
MQL4のEAは主に3つのイベントハンドラで構成されます。OnInit()(初期化処理)、OnDeinit()(終了処理)、OnTick()(ティック受信時の処理)の3つです。これに対しMQL5では、さらに豊富なイベントハンドラが用意されています。OnTrade()(注文・ポジション変化時)、OnTradeTransaction()(取引トランザクション発生時)、OnTimer()(タイマー経過時)、OnChartEvent()(チャートインタラクション時)、OnTesterInit()/OnTesterDeinit()/OnTesterPass()(最適化テスト用)など、用途に応じたイベント処理を分離して記述できます。
この豊富なイベント体系により、MQL5では「ポジションが変化したときだけ実行する処理」「タイマーで定期実行する処理」「最適化パス完了後の集計処理」を、ティック処理とは独立して実装できます。MQL4でこれらを実現するには、OnTick() 内に状態管理フラグを置いてすべての処理を混在させる必要があり、コードの可読性・保守性が低下しがちです。
2. 時系列データ参照の違い
MQL4とMQL5で最も混乱を招く仕様差の一つが、ローソク足データの時系列インデックスの扱いです。MQL4では Close[0] が「現在の未確定足」を指し、Close[1] が「直前の確定済み足」を指します(インデックス0が最新)。MQL5でも同様の規則ですが、MQL5では配列方向の明示が必要になるケースがあり、ArraySetAsSeries() 関数でインデックス方向を設定しなければ逆順で参照してしまう問題が発生します。
また、価格データへのアクセス方法が根本から変わっています。MQL4では Close[]・High[]・Low[]・Open[]・Volume[] がグローバル配列として直接参照できました。MQL5ではこれらの配列は廃止され、CopyClose()・CopyHigh()・CopyLow()・CopyOpen()・CopyTickVolume() などのコピー関数を使って、必要な期間のデータをローカル配列に取得する形式に変わっています。
3. データ型とインジケーター参照の違い
MQL4では iMA()・iRSI()・iBands() などのインジケーター関数が1行で値を直接返します。例えば double ma = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, 0); のように記述するだけで、その場でEMAの値を取得できます。
MQL5では同様の処理がハンドルベースに変わります。まず iMA() でインジケーターハンドル(整数のID)を取得し、その後 CopyBuffer() 関数でバッファからデータをコピーするという2段階の手順が必要です。最初は冗長に感じますが、ハンドル管理によって同一インジケーターを複数のパラメータセットで同時運用する際のメモリ効率が大幅に向上するため、複雑なEAでは明確な優位性があります。
| 機能 | MQL4 記述例 | MQL5 記述例 |
|---|---|---|
| EMAの取得 | iMA(NULL,0,14,0,MODE_EMA,PRICE_CLOSE,0) | handle=iMA(...); CopyBuffer(handle,0,0,1,buf); |
| 発注 | OrderSend(Symbol(),OP_BUY,...) | trade.Buy(lots, Symbol(), price,...) |
| 直近の終値 | Close[1] | CopyClose(Symbol(),0,1,1,closeArr) |
| ポジション確認 | OrderSelect(i,SELECT_BY_POS) | PositionSelect(Symbol()) |
| クラス使用 | 限定的 | 完全対応(継承・テンプレート含む) |
4. MQL5のOOP活用メリット
MQL5でOOPを活用する最大の恩恵は、コードの再利用性と拡張性の向上です。たとえば複数通貨ペアに対して同じロジックを適用するEAを作る場合、MQL4では通貨ペアごとに別々のEAファイルを用意するか、グローバル変数で管理する必要がありました。MQL5では class CStrategy のような基底クラスを定義し、各通貨ペアのインスタンスをオブジェクトとして管理することで、シンプルかつ拡張しやすい設計が実現します。
MQL5の標準ライブラリ(Trade.mqh・PositionInfo.mqh・AccountInfo.mqh 等)は、こうしたOOP設計のクラス群として提供されており、個別関数を直接呼び出す代わりにクラスのメソッドを通じてプラットフォームと対話する設計になっています。慣れるまでに時間がかかりますが、一度習得すれば開発速度と品質が大幅に向上します。
ストラテジーテスターとバックテストの違い
EA開発において、バックテスト(過去データを使った戦略検証)の質はEAの信頼性に直結します。MT4とMT5のストラテジーテスター(バックテストエンジン)には、検証精度・速度・機能の各面で大きな差があります。
MT4ストラテジーテスターの特徴と限界
MT4のストラテジーテスターはシングルスレッドで動作し、1回のバックテストは1つのCPUコアのみを使用します。テストモードは3種類用意されており、「全ティック」モードが最高精度ですが、処理速度が最も遅くなります。「始値のみ」モードは処理速度が速い反面、1本のローソク足の始値しか見ないため、足内での価格動作(ストップロスやテイクプロフィットの到達タイミング等)を正確にシミュレートできないという欠点があります。
また、MT4のバックテストは1通貨ペア・1時間軸での単一テストに限定されており、複数通貨ペアを同時に取引するEAの検証には対応していません。さらに、MT4のバックテストでは「スプレッドが固定値」として扱われることが多く、実際の取引時に変動するスプレッドとの乖離が検証精度を下げる要因になっています。
MT5ストラテジーテスターの優位性
MT5のストラテジーテスターは、MT4と比べてほぼすべての面で機能が強化されています。最大の特徴はマルチスレッドとマルチコア対応であり、複数のCPUコアを並列利用してバックテストを実行します。パラメータ最適化(複数のパラメータ組み合わせを一括テスト)において、MT4では数時間かかっていた作業がMT5では数十分で完了するケースも珍しくありません。
MT5ではマルチカレンシー(複数通貨ペア同時)バックテストをネイティブでサポートしています。EUR/USDとUSD/JPYを同時に売買するような裁定EA・ペアトレードEAの検証が、1回のテスト実行で完結します。MT4でこれを実現しようとすると、各通貨ペアのデータを人為的に同期させる独自のシミュレーターを別途構築する必要があり、現実的には困難です。
また、MT5のテスターは実際のティックデータ(1秒以下の精度)を使った「リアルティック」モードをサポートしており、スキャルピング系EAの検証精度が飛躍的に向上します。MT4の「全ティック」モードが実際にはモデル化(生成)されたティックデータを使っているのに対し、MT5のリアルティックモードはブローカーから収集した実際の約定データを使うため、スリッページや約定遅延の再現性が高い点も大きなメリットです。
| テスター機能 | MT4 | MT5 |
|---|---|---|
| 処理方式 | シングルスレッド | マルチスレッド(マルチコア並列) |
| 複数通貨ペアテスト | 非対応(1通貨ペアのみ) | 対応(マルチシンボル同時テスト) |
| ティックデータ | モデル化ティック | 実際のティックデータ(リアルティック) |
| 最適化速度 | 低速(1コア) | 高速(複数コア並列) |
| スプレッド再現 | 固定スプレッドが基本 | 変動スプレッド対応 |
| ウォークフォワード最適化 | 非対応 | 対応 |
ウォークフォワード最適化(Walk Forward Optimization)とは、過去データを学習期間と検証期間に分割し、最適化したパラメータをアウトサンプル期間で検証する手法です。過剰最適化(カーブフィッティング)を防ぐうえで有効であり、MT5のテスターではGUI上でこれをほぼ自動で実行できます。MT4では同様の作業を手動で繰り返す必要があるため、厳密な検証には多大な時間がかかります。
どちらを選ぶべきか:用途別の判断基準
MQL4とMQL5、それぞれの選択が適している状況を明確にします。「新しいから必ずMQL5」ではなく、プロジェクトの要件・ブローカー環境・開発者のスキルセットを踏まえた判断が重要です。
MQL4(MT4)が適しているケース
既存のMQL4コード資産がある場合、短期間で運用を開始したい場合、または利用するブローカーがMT5を提供していない場合は、引き続きMQL4を選択するのが現実的です。MT4は現在もFXブローカーの大多数がサポートしており、特に日本国内向けのブローカーや中小ブローカーではMT4専用の口座しか提供されていないケースも多数あります。
また、シンプルなロジックの単一通貨ペアEA(例:1通貨ペアを対象にした移動平均クロスEA)であれば、MQL4の手続き型構文の方が少ないコード行数で記述でき、デバッグも容易です。MQL5の豊富な機能が不要な場合、あえてMQL5を選ぶメリットは限定的です。
さらに、MQL4は長年の実績から参考資料・サンプルコードが豊富に存在します。日本語の解説記事やフォーラムの過去ログも充実しており、初心者が独学でEAを開発する際の学習コストがMQL5より低い傾向があります。
MQL5(MT5)が適しているケース
複数通貨ペアを同時に取引するポートフォリオEA、株式・先物などFX以外のアセットを含む戦略、高頻度・スキャルピング系で精緻なバックテストが必要な戦略では、MQL5の採用を強く推奨します。特にバックテストの信頼性と最適化速度の差は、EA開発の反復サイクルに直接影響するため、長期プロジェクトほどMQL5の優位性が顕著になります。
OOPのスキルがある開発者であれば、MQL5の標準ライブラリ(CTradeクラス・CPositionInfoクラス等)を活用することで、MT4時代では実装が困難だったリスク管理モジュールや通知システムをクリーンなアーキテクチャで構築できます。中長期的に複数のEAを保守・拡張する計画がある場合、MQL5への投資は開発効率の面で回収が見込めます。
XMTradingのようにMT4・MT5の両方を提供しているブローカーを利用している場合、実際に両環境を並行して試すことができます。MT4でプロトタイピングを行い、十分なロジック検証後にMQL5へ移植する段階的なアプローチも、リスクを抑えた選択肢の一つです。
移行タイミングの考え方
MetaQuotes社はMT4のサポートを継続しているものの、新機能の追加はMT5に集中しており、長期的にはMT5への移行が避けられない方向性です。2020年以降、主要なFXブローカーの多くがMT5口座を標準提供するようになってきており、新規でEA開発を始める方がMQL5を選択することはリスクの少ない判断といえます。一方で既存のMQL4資産を持つ開発者にとっては、移植コストと現状の運用安定性を天秤にかけた現実的な判断が求められます。
よくある質問
Q1: MQL4とMQL5の違いを一言で教えてください。
A1: MQL4 MQL5 の違いの核心は設計思想にあります。MQL4は手続き型でシンプル、MQL5はOOP完全対応・マルチスレッドバックテスト・多資産対応と機能が大幅に拡張されています。
Q2: MQL5とはどのような言語ですか?
A2: MQL5はMetaTrader 5(MT5)専用のプログラミング言語で、EA・インジケーター・スクリプト作成に使用します。C++に近い構文でOOPを完全サポートし、株式・FX・先物などマルチアセットに対応します。
Q3: MQL4のEAをMQL5に移植するにはどうすればよいですか?
A3: 主な手順は、OrderSendをCTradeクラスに置き換え、価格データ参照をCopyClose等のコピー関数に修正し、インジケーター参照をハンドルベースに変換することです。互換ライブラリも活用できますが完全対応ではありません。
Q4: バックテストの精度はMQL4とMQL5でどう違いますか?
A4: MT5はマルチスレッド・実ティックデータ・変動スプレッド・マルチカレンシーテストに対応しており、MT4のモデル化ティック・シングルスレッドより検証精度が高く、最適化も大幅に高速です。
Q5: MQL5を選ぶ際の注意点やデメリットはありますか?
A5: MQL4より学習コストが高く、特にOOP・ハンドルベースのインジケーター参照・ポジション管理APIに慣れる必要があります。また一部ブローカーがMT5未対応のため、使用ブローカーの事前確認が必須です。
Q6: 初心者でもMQL5でEAを開発できますか?
A6: 可能ですが、MQL4から始める方が学習コストは低いです。MQL5はOOP知識があると効率が上がります。MetaQuotes公式ドキュメントや標準ライブラリのサンプルコードを活用すれば、基礎的なEAは初心者でも十分に作成できます。
まとめ
MQL4とMQL5の違いは単なるバージョン差ではなく、言語設計・イベント処理・注文管理・バックテスト機能のすべてにわたる根本的な仕様差です。EA開発の目的と環境に合わせて適切なプラットフォームを選択することが、安定した自動売買システム構築の第一歩となります。
- MQL4は手続き型・シンプル構文で既存資産が豊富。単一通貨・短期EA向けに引き続き有効。
- MQL5はOOP完全対応・マルチスレッドテスター・実ティックバックテストで、精度重視・複数資産対応EAに最適。
- XMTradingはMT4・MT5の両方に対応しており、移行期や並行開発時のEA検証環境として適している。





