EA開発を続けていくと、「ソースコードが長くて読みにくい」、「関数が散らばって管理できない」という悩みに必ずぶつかります。 特にMQL4では、処理の追加を繰り返しているうちにファイルが肥大化し、バグの原因になったり、改修スピードが落ちてしまうことも珍しくありません。
そこで本記事では、MT4/MQL4で使えるmqh(インクルードファイル)を活用したコード整理術を、初心者にも分かりやすく解説します。 関数を外部ファイルへ切り出すことで、EAの見通しが劇的に良くなり、他のEAでも再利用できるようになります。
- EAソースが読みにくくなる原因とコード整理の考え方
- mqhファイル(インクルード)の基本と作り方
- 関数を移動する手順と注意点
- #include の正しい書き方とコンパイルエラー対策
- EA-BANK出品時にも役立つフォルダ構成の知識
EAソースコードが読みにくくなる理由とは?
MQL4でEAを作り始めた当初は問題なくても、ロジックを追加・修正していくうちにソースコードはどんどん長くなります。 特に「何度も使う関数」をメインファイルの中に書き続けると、次のような問題が起きます。
- ファイルが長くなり、メンテナンスが難しい
- 似たような関数を複数のEAで重複作成してしまう
- 修正が想定外の箇所に影響し、バグの温床になる
こうした問題を解決するのが、mqhファイル(インクルード)の活用です。 関数を切り出して外部化することで、コードの見通しが一気に改善します。
mqhファイルとは?(インクルードの基本)
mqhファイルとは、MQL4で使える「外部ソースファイル」です。 関数をまとめて保管し、EA(mq4)側で #include を使うことで呼び出すことができます。
mqhファイルを新規作成する手順

MetaEditorで「新規作成 → インクルード」を選択し、任意の名前で mqh ファイルを作成します。 例:common.mqh

ファイル名等を決めて、「完了」ボタンをクリックします。
※今回はcommon.mqhファイルとしておきます

すると、以下のようにソースファイルが開かれます。

以上でインクルード(mqh)ファイルの作成は完了です。
mqhファイルを設置する(フォルダ構成)

作成した mqh ファイルは、必ず MQL4/Include フォルダに設置します。 ここ以外に置くと EA 側から参照できず、コンパイルエラーの原因になります。
関数をmqhに移動する(ソース整理の本丸)

メインのEA側に書いていた関数を切り取り、「common.mqh」へ貼り付けます。 移動後はメインEAから関数部分が消えるため、ソースがコンパクトになります。

他にも、移動する関数があれば同じ要領で移動してください。
これで、メインEAのソースコードのボリュームが減りましたね!
- OnTick / OnInit / OnDeinit などのイベントハンドラ
- extern で外部入力するパラメータ
- 一時的なローカル変数
これらは EA 本体(mq4)側に残しておく必要があります。
特にイベントハンドラは mqh に移動すると EA が正常に動かなくなるため注意してください。
ソースコードの追加とコンパイル
さて、メインのEAとmqhでソースコードを分けましたが、このままでは当然コンパイルはうまくいきません。

簡単に表すと、現状はこんな感じです。
次にやることは上記のような別れたソースコードを、リンクさせてあげましょう。

簡単ですがイメージ的にはこんな感じにしてあげる必要があります。
やり方は、メインのEA側の上部に1行だけ以下のソースコードを追加するだけです。
※common.mqhファイルを参照しますよという事を宣言します
#include <common.mqh>『#include <ファイル名称>』という形にするので、ファイル名称(common.mqh)の所は自分で作ったファイル名称や用意したファイル名称に置き換えてください。
mqhファイルをフォルダ管理する場合・・・カレントがIncludeフォルダ直下なので、<フォルダ名称\common.mqh>みたいな感じで宣言も可能です。
※初心者の方はフォルダ階層をいじるとうまく動かないと思うので無視してください
ソースコードを追加した後、コンパイルします。(メインのEA側でコンパイル)

以上でソースコードの追加とコンパイルは完了です。
コンパイルエラーが出るときのチェックポイント
- mqh の設置場所が間違っていないか?(必ず MQL4/Include)
- 関数の { } が正常に閉じているか?
- 関数名の重複がないか?
- グローバル変数を移動した場合、スコープは問題ないか?
開発効率が上がる mqh 運用テクニック
さいごに
mqhファイルを使ったコード整理は、EA開発の効率と品質を大きく向上させます。 特に複雑なEAや長期運用するEAでは必須のテクニックといえます。
一度仕組みを作ってしまえば、新しいEAでも #include <common.mqh> だけで関数を使いまわせるため、開発スピードは一気に上がります。







コメント