こんにちは、潤奈です! 今回は、EA自作やカスタムインジケーター開発を行う上で避けては通れない「MQL4とMQL5の違い」について、初心者の方にも分かりやすく解説します。
実は、MT4ユーザーの皆さんにとって「見過ごせない重大なニュース」が入ってきました。 私が普段使っているOANDA証券をはじめ、各FX会社でMT4の提供終了が正式に案内され始めています。 「まだ使い慣れたMT4でいいや」と思っていると、ある日突然EAが動かなくなったり、取引ができなくなったりするリスクがあります。
特にOANDA証券では、以下のような具体的な移行スケジュールが発表されています。
📅 いま確認できる停止情報
- すでに実施済み(2026年3月27日): MT4東京サーバーのサブアカウント新規作成停止
- まもなく(2026年9月25日 取引終了後): MT4新規注文停止
- サービス提供終了(2026年11月27日 取引終了後): MT4サービス提供の完全終了
⚠️ サービス終了による影響範囲
- 終了時刻以降は、MT4へのログインとすべての取引ができなくなります。
- 残っているポジションの扱いは詳細決定後に改めて通知されますが、残高のみある場合はMT5アカウントやfxTrade/TradingView用アカウントへの資金移動が案内されています。
- なお、MT4とMT5のウェブターミナル(ブラウザ版)は2026年5月31日で終了済みですので、ブラウザ運用をされていた方は特に早めの切り替えが必要です。
このような背景から、MT4からMT5への乗り換え、そしてプログラミング言語としてのMQL4からMQL5への移行は「いつかやること」ではなく、「今すぐ取り組むべき必須事項」となりました。
MQL5を学ぶことは、最初は難しく感じるかもしれませんが、移行することでトレード環境も開発環境も劇的にパワーアップします。まずは両者の違いをしっかりと整理していきましょう!
1. MQL4とMQL5の主要スペック比較表
まずは、プログラミングや取引環境において何がどう変わるのか、全体像を一覧表で整理しました。
| 比較項目 | MQL4 (MT4) | MQL5 (MT5) |
|---|---|---|
| ベース言語 | C言語風 (構造化プログラミング) | C++風 (完全なオブジェクト指向プログラミング) |
| 取引システム | Order(注文)ベース管理 | Position(ポジション)/ Order / Deal 管理 |
| 両建て・合算 | 基本は両建て(Hedging) | Netting(合算)と Hedging(両建て)の両対応 |
| チャートデータの取得 | Close[0] などの事前定義配列 |
CopyRates や CopyClose などのコピー関数 |
| 注文送信の仕組み | OrderSend() 関数でシンプルに引数指定 |
MqlTradeRequest 構造体を使用 (または標準ライブラリ) |
| 実行速度 | 普通 | 劇的に高速 (ネイティブコードコンパイル) |
| バックテスト環境 | シングルスレッド、単一通貨ペアメイン | マルチスレッド、複数通貨、クラウドネットワーク対応 |
2. MQL4とMQL5の決定的な違い5選
ここからは、実際にEAやインジケーターを開発する上で「絶対に知っておくべき違い」を5つの重要ポイントに絞って詳しく解説します。
① 取引モデルの概念:Order(注文)とPosition(ポジション)の違い
MQL4では、注文を出すとそれがそのまま「Order(注文)」として管理され、決済するまでその状態(チケット番号)が維持されました。 しかしMQL5では、取引の概念が3つのステップに明確に分かれています。
- Order(注文): 取引サーバーに送った「エントリーや決済の指示」(約定すると消える)
- Deal(約定): 注文が実際に執行された「取引の履歴」
- Position(ポジション): 約定した結果として保有している「未決済の建玉」
また、MT5のデフォルトは「Netting(ネッティング)」モデルです。これは、同じ通貨ペアで買い注文を複数回出すと、それぞれの注文が個別のチケットとして残るのではなく、合算されて1つのポジション(平均建値)になります。
※現在は「Hedging(ヘッジング/両建て)」モデルの口座も使えますが、MQL5のコード上では「ポジション」として一元管理されるため、MQL4の OrderSelect() を使った注文ごとのループ処理とは書き方が根本的に異なります。
② プログラミング手法:オブジェクト指向(OOP)の強化
MQL4は元々、C言語のように上から順番に関数を呼び出していく「構造化プログラミング」が主流でした。 これに対してMQL5は、C++に極めて近い「オブジェクト指向プログラミング(OOP)」が標準となっています。クラスやオブジェクトといった概念を使い、部品化してプログラムを組み立てます。
「難しそう…」と感じるかもしれませんが、実は強力な味方が用意されています。それが「標準ライブラリ(Standard Library)」です。
例えば、面倒な注文処理も、標準ライブラリの CTrade クラスを使うことで、MQL4に近いシンプルなコードで記述できるようになります。
③ チャートデータの取得:事前定義配列からコピー関数へ
MQL4では、現在のローソク足の終値を取得したいとき、Close[0] と書くだけで簡単に取得できました。
MQL5では、このような「最初から用意されている配列(事前定義配列)」は存在しません。
データを取得するには、CopyRates() や CopyClose() といった関数を使い、自分で用意した動的配列(double ClosePrices[] など)に必要な期間のデータを「コピー」してくる必要があります。
|
1 2 3 4 5 6 |
// MQL5での終値取得の例 double ClosePrices[]; ArraySetAsSeries(ClosePrices, true); // 時系列(最新がインデックス0)に設定 CopyClose(Symbol(), Period(), 0, 10, ClosePrices); // 直近10本分の終値をコピー double currentClose = ClosePrices[0]; // 最新の終値(MQL4での Close[0] 相当) |
最初は手間に感じるかもしれませんが、必要なデータだけをメモリにロードするため、動作が非常に軽くなるという大きなメリットがあります。
④ 注文送信の仕組み:構造体の使用と標準ライブラリ
MQL4の OrderSend 関数は、引数に「通貨ペア、注文タイプ、ロット、価格、スリッページ、損切り、利食い…」と順番に並べるだけで注文が送れました。
MQL5では、MqlTradeRequest という構造体に必要なすべての注文情報を詰め込み、それを OrderSend 関数に渡す仕組みになっています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// MQL5のネイティブな注文送信(構造体を使用) MqlTradeRequest request; MqlTradeResult result; ZeroMemory(request); request.action = TRADE_ACTION_DEAL; // 即時成行注文 request.symbol = Symbol(); request.volume = 0.1; // ロット数 request.type = ORDER_TYPE_BUY; // 買い注文 request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // 現在の買値 request.deviation = 10; // スリッページ // 送信 OrderSend(request, result); |
これが初心者にとってMQL5の最大の壁と言われますが、前述の標準ライブラリ CTrade を使えば、以下のようにたった1行で書くことができます!
|
1 2 3 4 5 |
// 標準ライブラリを使用した注文送信(非常にシンプル) #include <Trade\Trade.mqh> CTrade trade; trade.Buy(0.1); // これだけで0.1ロットの買い注文が完了! |
⑤ バックテストと最適化性能の劇的な進化
MQL5(MT5)がMQL4(MT4)よりも圧倒的に優れている点が、このバックテスト環境です。
- マルチスレッド対応: PCのCPUの全コアを使って超高速で最適化(パラメータ選定)ができます。
- 複数通貨(マルチカレンシー)対応: 1つのEAで複数の通貨ペアを同時にトレードするバックテストが、特別な工夫なしで正確に行えます。
- MQL5 Cloud Network: 世界中の開発者の空いているPCパワーを分散処理で借りて、本来数日かかる最適化を数分で終わらせることができます。
3. MQL4からMQL5への移行は難しい?学習のコツ
「MQL4の知識は無駄になってしまうの?」と不安に思う必要はありません。
条件分岐(if)、繰り返し処理(for)、変数の宣言、自作関数の作り方といったプログラミングの基本的な文法はMQL4もMQL5も全く同じです。
移行をスムーズに進めるコツは、以下の3点です。
- 標準ライブラリ(
CTradeなど)を使い倒す 生のMqlTradeRequest構造体で注文処理を書こうとすると挫折しがちです。まずは標準ライブラリを使って「簡単に注文を出す・決済する」ことから始めましょう。 - データのコピー処理のパターン(テンプレート)を覚える
CopyCloseなどのデータ取得処理は、一度書き方のテンプレートを作ってしまえば、あとはどのプログラムでも使い回すだけです。 - まずは簡単なインジケーターやEAの移植から始める MQL4で作成したシンプルな移動平均線のクロスEAなどを、MQL5で書き直してみるのが最も効率の良い練習になります。
4. まとめ&次のステップ
今回は、OANDA証券のMT4終了という時事ニュースを交えながら、MQL4とMQL5の違いについて解説しました。
MT4のサービス終了スケジュール(2026年11月完全終了)を考えると、今からMQL5への移行を進めておくことは、トレーダーとしても開発者としても非常に重要です。 MQL5は最初は難しく見えるかもしれませんが、慣れてしまえば「動作が速い」「バックテストが強力」「コードが整理しやすい」と、開発者にとって非常に魅力的な言語です。
今後は、本ブログでも「MQL5開発講座」として、具体的な環境構築やコードの書き方を連載していく予定です!
分からないことや、「このMQL4のコードはMQL5でどう書くの?」といった疑問があれば、YouTubeのコメント欄やXでお気軽にメッセージをくださいね!

コメント