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へ入れたりしても、そのまま動く前提では考えない方が安全です。ファイル形式、コンパイル環境、保存フォルダ、関数の扱いが異なるため、最初に対象プラットフォームを決めてから見る必要があります。
MT4で使うEA、インジケーター、スクリプトを作る時に使います。既存のMT4資産を扱う場合はこちらを中心に見ます。
MT5で使うEA、インジケーター、スクリプトを作る時に使います。ハンドル、イベント、OOP寄りの設計も見ます。
MT4用のコードをMT5へ移す場合は、関数名だけでなく、指標値の読み方や注文まわりの設計も見直します。
ファイル形式と保存場所が違う
MQL4で作ったソースコードは .mq4、コンパイル済みファイルは .ex4 として扱います。MQL5ではソースコードは .mq5、コンパイル済みファイルは .ex5 として扱います。
MQL4公式の iCustom() 説明では、カスタムインジケーターはコンパイル済みの .ex4 ファイルであり、terminal_directory\MQL4\Indicators ディレクトリに置く必要があると説明されています。MT5側では、MT5用のデータフォルダと MQL5 配下の構造を分けて見ます。
ソースは .mq4、コンパイル済みは .ex4 です。インジケーターは MQL4\Indicators を見ます。
ソースは .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() は、指定したインジケーターバッファから必要な数のデータを取得する関数として説明されています。
カスタムインジケーターの値を読む時は、ファイル名、パラメータ、バッファ番号、シフトを分けて見ます。
インジケーターハンドルを取得し、必要なバッファを 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\IndicatorsかMQL5\Indicatorsか iCustom()やCopyBuffer()など、値の読み方がどちら向けか- アラート、メール、プッシュ通知まで含む設計か
- ソースコードがあるのか、コンパイル済みファイルだけなのか
自作前に見る順番
自作インジケーターを考える時は、いきなりMQL4かMQL5かを好みで決めるより、使う環境と目的から見る方が現実的です。普段使うチャート、利用しているブローカー、既存インジケーター、今後触る予定のコードを先に分けます。
また、将来EAと連携する予定があるなら、インジケーターバッファの設計や値の読み取り方も最初から意識します。表示だけでよいのか、EAから値を読むのか、通知まで入れるのかで、後から必要になる設計が変わります。
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