MQL4とMQL5の違い|自作インジを考える前に見ること

MT4やMT5で自作インジケーターを考え始めると、最初に迷いやすいのがMQL4とMQL5の違いです。どちらもMetaTrader系の開発言語ですが、ファイル形式、保存場所、インジケーターバッファ、標準関数、EAから指標値を読む時の考え方などが同じではありません。

この記事では、MQL4公式ドキュメントとMQL5公式ドキュメントをもとに、MQL4とMQL5の違いを自作インジケーター前の視点で見ます。どちらか一方を上位互換として扱うのではなく、使うプラットフォーム、配布先、既存コード、テスト環境、あとから触る人の理解しやすさを分けて考えます。

先に短く言うと
  • MQL4はMT4向け、MQL5はMT5向けの開発言語として分けて見ます。
  • MQL4のカスタムインジケーターは、公式ドキュメント上で MQL4\Indicators 配下のコンパイル済み .ex4 ファイルとして扱われます。
  • MQL5はC++に近い構文やOOPを意識した言語として説明され、インジケーター値の扱いではハンドルや CopyBuffer() が重要になります。
  • 既存のMT4用インジケーターをそのままMT5で使えるとは限らないため、移植前提か、新規作成前提かを先に分けることが大切です。

まずMT4向けかMT5向けかを分ける

MQL4とMQL5の違いを見る前に、まず作りたいインジケーターをどのプラットフォームで使うのかを分けます。MT4で使うならMQL4、MT5で使うならMQL5が基本です。

MT4用のファイルをMT5へ入れたり、MT5用のファイルをMT4へ入れたりしても、そのまま動く前提では考えない方が安全です。ファイル形式、コンパイル環境、保存フォルダ、関数の扱いが異なるため、最初に対象プラットフォームを決めてから見る必要があります。

MQL4 MT4向けに見る

MT4で使うEA、インジケーター、スクリプトを作る時に使います。既存のMT4資産を扱う場合はこちらを中心に見ます。

MQL5 MT5向けに見る

MT5で使うEA、インジケーター、スクリプトを作る時に使います。ハンドル、イベント、OOP寄りの設計も見ます。

移植 そのまま変換とは考えない

MT4用のコードをMT5へ移す場合は、関数名だけでなく、指標値の読み方や注文まわりの設計も見直します。

ファイル形式と保存場所が違う

MQL4で作ったソースコードは .mq4、コンパイル済みファイルは .ex4 として扱います。MQL5ではソースコードは .mq5、コンパイル済みファイルは .ex5 として扱います。

MQL4公式の iCustom() 説明では、カスタムインジケーターはコンパイル済みの .ex4 ファイルであり、terminal_directory\MQL4\Indicators ディレクトリに置く必要があると説明されています。MT5側では、MT5用のデータフォルダと MQL5 配下の構造を分けて見ます。

MT4 / MQL4 mq4・ex4を見る

ソースは .mq4、コンパイル済みは .ex4 です。インジケーターは MQL4\Indicators を見ます。

MT5 / MQL5 mq5・ex5を見る

ソースは .mq5、コンパイル済みは .ex5 です。MT5用のデータフォルダと MQL5 配下を見ます。

混在注意 拡張子だけで判断しない

同じ名前のインジケーターでも、MT4用とMT5用で中身が違うことがあります。配布元の説明も見ます。

カスタムインジケーターの表現力にも違いがある

MQL4公式ドキュメントのカスタムインジケーター説明では、MQL4では8個のバッファと6種類の描画スタイルを使える一方、MQL5では512個のインジケーターバッファと18種類の描画スタイルに増えていると説明されています。

これは、MQL5の方が複雑な表示や多くのバッファを使う設計に向きやすい、という見方につながります。ただし、表示できる種類が多いことと、自分が作りたいインジケーターに必要かどうかは別です。単純なライン表示や矢印表示だけなら、必要以上に複雑な設計にしない判断もあります。

公式情報で見るポイント

MQL4公式ドキュメントでは、MQL4のカスタムインジケーターは分析機能を実装するもので、自動売買はできないと説明されています。インジケーターとEAは役割が違うため、表示ツールを作るのか、売買処理を含むEAを作るのかも先に分けてください。

EAからインジケーター値を読む考え方が変わる

MQL4では、EAからカスタムインジケーターの値を見る時に iCustom() を使う場面があります。MQL4公式ドキュメントでは、カスタムインジケーターが .ex4 としてコンパイルされ、所定のフォルダにあることが前提として説明されています。

MQL5では、インジケーターを直接値として扱うより、まずインジケーターハンドルを取得し、そこから CopyBuffer() で必要なバッファの値を取り出す考え方が重要になります。MQL5公式の CopyBuffer() は、指定したインジケーターバッファから必要な数のデータを取得する関数として説明されています。

MQL4 iCustomを中心に見る

カスタムインジケーターの値を読む時は、ファイル名、パラメータ、バッファ番号、シフトを分けて見ます。

MQL5 ハンドルとCopyBufferを見る

インジケーターハンドルを取得し、必要なバッファを CopyBuffer() で読む流れを見ます。

移植時 値の読み方を作り直す

関数名を置き換えるだけでなく、バッファ、現在足、過去足、エラー処理を見直す必要があります。

MQL5はC++に近い設計も意識する

MQL5公式リファレンスでは、MQL5はテクニカルインジケーター、トレーディングロボット、ユーティリティアプリケーションを開発するための高水準言語として説明されています。また、構文はC++に近く、OOPスタイルでアプリケーションを開発できると説明されています。

そのため、MQL5ではクラス、構造体、イベント処理などを使った設計も見やすくなります。一方で、初めて自作インジケーターを作る段階では、いきなり大きな設計にせず、入力パラメータ、バッファ、描画、通知、テストの範囲を小さく切って見る方が作業しやすくなります。

設計を大きくしすぎない

MQL5で複雑な構造を書けることと、最初から複雑に作るべきことは別です。自作インジケーターでは、まず何を表示するのか、どの時間足で使うのか、通知やアラートまで入れるのかを小さく分ける方が見直しやすくなります。

既存コードを使うなら対応プラットフォームを見る

インターネット上や過去の手元ファイルにあるコードを使う場合は、MQL4用なのかMQL5用なのかを先に見ます。拡張子、ファイル内の関数、コンパイル対象、説明文、配布元の対応表記を確認してください。

特に、同じインジケーター名でMT4版とMT5版が別に配布されている場合があります。MT4用の .ex4 をMT5へ入れる、MT5用の .ex5 をMT4へ入れる、といった扱いは避けます。

既存コードを見る時のチェック
  • 拡張子が .mq4.ex4.mq5.ex5 のどれか
  • 説明文にMT4用、MT5用の記載があるか
  • 保存先が MQL4\IndicatorsMQL5\Indicators
  • iCustom()CopyBuffer() など、値の読み方がどちら向けか
  • アラート、メール、プッシュ通知まで含む設計か
  • ソースコードがあるのか、コンパイル済みファイルだけなのか

自作前に見る順番

自作インジケーターを考える時は、いきなりMQL4かMQL5かを好みで決めるより、使う環境と目的から見る方が現実的です。普段使うチャート、利用しているブローカー、既存インジケーター、今後触る予定のコードを先に分けます。

また、将来EAと連携する予定があるなら、インジケーターバッファの設計や値の読み取り方も最初から意識します。表示だけでよいのか、EAから値を読むのか、通知まで入れるのかで、後から必要になる設計が変わります。

1
使うプラットフォームを決める MT4で使うのか、MT5で使うのかを先に決めます。両対応を最初から狙うと作業が大きくなります。
2
表示したいものを分ける ライン、矢印、色分け、ラベル、サブウィンドウなど、何を表示したいのかを分けます。
3
EA連携の有無を見る あとでEAから値を読むなら、バッファ番号や値の出し方を最初から見ておきます。
4
通知やテスト範囲を見る アラート、メール、プッシュ通知、ストラテジーテスターでの見方まで含めるかを決めます。

MQL4とMQL5を見る前のチェックリスト

MQL4とMQL5の違いは、単なる文法の違いだけではありません。自作インジケーターでは、保存先、コンパイル後のファイル、描画、バッファ、EAからの読み方、将来の移植まで関係します。

自作前に押さえること
  • 作りたいインジケーターはMT4用かMT5用か
  • 既存コードはMQL4用かMQL5用か
  • 表示だけでよいのか、EAから値を読む予定があるのか
  • インジケーターバッファをいくつ使う想定か
  • 通知やアラートまで入れるのか
  • 配布先の利用者がMT4中心かMT5中心か
  • あとから別プラットフォームへ移植する可能性があるか

導入前メモ

MQL4とMQL5を比べる時は、どちらが優れているかだけでなく、自分が使うチャート環境と既存コードに合っているかを見ることが大切です。

自作インジケーターは、表示、通知、EA連携、移植のどこまで考えるかで必要な設計が変わります。最初は小さく作り、あとから広げる前提で見た方が扱いやすくなります。

用語集であわせて見たい言葉

関連して読みたい記事

まとめ

MQL4とMQL5は、どちらもMetaTrader系の開発言語ですが、対象プラットフォーム、ファイル形式、保存場所、インジケーターバッファ、EAから指標値を読む考え方が異なります。MT4向けならMQL4、MT5向けならMQL5を基本に見てください。

MQL4では .mq4.ex4、MQL5では .mq5.ex5 を分けて扱います。既存インジケーターを流用する場合も、対応プラットフォームと保存先を見ずに入れると、ナビゲーターに出ない、コンパイルできない、EAから値を読めないといった原因になります。

自作インジケーターを考える時は、まず表示したいもの、使う環境、EA連携の有無、移植の可能性を分けてください。言語の優劣より、目的に合った範囲で小さく作り、後から見直せる形にしておくことが大切です。

参考文献
  • MQL4 Documentation「MQL4 Reference」https://docs.mql4.com/
  • MQL4 Documentation「iCustom」https://docs.mql4.com/indicators/icustom
  • MQL4 Documentation「Custom Indicators」https://docs.mql4.com/customind
  • MQL5 Documentation「MQL5 Reference」https://www.mql5.com/en/docs
  • MQL5 Documentation「Moving from MQL4」https://www.mql5.com/en/docs/migration
  • MQL5 Documentation「CopyBuffer」https://www.mql5.com/en/docs/series/copybuffer