【MT4/MQL4】EAソースコードを整理する方法|mqh化・インクルード管理で見やすく効率化

EAソースコードをmqh化・インクルード管理で整理する方法を説明したアイキャッチ画像。デグーキャラクターとフォルダ構造のイラスト付き。
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

EA開発を続けていくと、「ソースコードが長くて読みにくい」「関数が散らばって管理できない」という悩みに必ずぶつかります。 特にMQL4では、処理の追加を繰り返しているうちにファイルが肥大化し、バグの原因になったり、改修スピードが落ちてしまうことも珍しくありません。

そこで本記事では、MT4/MQL4で使えるmqh(インクルードファイル)を活用したコード整理術を、初心者にも分かりやすく解説します。 関数を外部ファイルへ切り出すことで、EAの見通しが劇的に良くなり、他のEAでも再利用できるようになります。

  • EAソースが読みにくくなる原因とコード整理の考え方
  • mqhファイル(インクルード)の基本と作り方
  • 関数を移動する手順と注意点
  • #include の正しい書き方とコンパイルエラー対策
  • EA-BANK出品時にも役立つフォルダ構成の知識
この記事は「EA開発が複雑化してきたので一度整理したい」という方に向けた、実務レベルのコード整理ガイドです。 画像付きで丁寧に解説しているので、今日からすぐに実践できます。

EAソースコードが読みにくくなる理由とは?

MQL4でEAを作り始めた当初は問題なくても、ロジックを追加・修正していくうちにソースコードはどんどん長くなります。 特に「何度も使う関数」をメインファイルの中に書き続けると、次のような問題が起きます。

  • ファイルが長くなり、メンテナンスが難しい
  • 似たような関数を複数のEAで重複作成してしまう
  • 修正が想定外の箇所に影響し、バグの温床になる

こうした問題を解決するのが、mqhファイル(インクルード)の活用です。 関数を切り出して外部化することで、コードの見通しが一気に改善します。

mqhファイルとは?(インクルードの基本)

mqhファイルとは、MQL4で使える「外部ソースファイル」です。 関数をまとめて保管し、EA(mq4)側で #include を使うことで呼び出すことができます。

メリット: ・関数を一箇所で管理できる ・複数EAで再利用できる ・メインファイルの見通しがよくなる

mqhファイルを新規作成する手順

MetaEditorでインクルードファイル(mqh)を新規作成する画面

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

MetaEditorで common.mqh の名前を入力するインクルードファイル作成画面

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

common.mqh ファイルが生成され開かれた状態のMetaEditor画面

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

新規作成された common.mqh が表示されているMetaEditorのコード画面

以上でインクルード(mqh)ファイルの作成は完了です。


スポンサーリンク

mqhファイルを設置する(フォルダ構成)

MQL4フォルダ内のIncludeディレクトリの構造と配置例

作成した mqh ファイルは、必ず MQL4/Include フォルダに設置します。 ここ以外に置くと EA 側から参照できず、コンパイルエラーの原因になります。

関数をmqhに移動する(ソース整理の本丸)

メインEAから関数を切り出してmqhへ移動する前のコード例

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

common.mqh ファイルへ関数を貼り付けた後のMetaEditor画面
「common.mqh」ファイルにそのまま貼り付けます

他にも、移動する関数があれば同じ要領で移動してください。

これで、メインEAのソースコードのボリュームが減りましたね!

【注意】mqh に移動しない方が良いもの
  • OnTick / OnInit / OnDeinit などのイベントハンドラ
  • extern で外部入力するパラメータ
  • 一時的なローカル変数

これらは EA 本体(mq4)側に残しておく必要があります。
特にイベントハンドラは mqh に移動すると EA が正常に動かなくなるため注意してください。


スポンサーリンク

ソースコードの追加とコンパイル

さて、メインのEAとmqhでソースコードを分けましたが、このままでは当然コンパイルはうまくいきません。

メインEAとmqhが分離されており参照関係が未接続の状態を示す図

簡単に表すと、現状はこんな感じです。

次にやることは上記のような別れたソースコードを、リンクさせてあげましょう。

メインEAからmqhをインクルードして関数を利用できる状態を示す図

簡単ですがイメージ的にはこんな感じにしてあげる必要があります。

やり方は、メインのEA側の上部に1行だけ以下のソースコードを追加するだけです。
※common.mqhファイルを参照しますよという事を宣言します

#include <common.mqh>

『#include <ファイル名称>』という形にするので、ファイル名称(common.mqh)の所は自分で作ったファイル名称や用意したファイル名称に置き換えてください。

【中級者以上向け】
mqhファイルをフォルダ管理する場合・・・カレントがIncludeフォルダ直下なので、<フォルダ名称\common.mqh>みたいな感じで宣言も可能です。
※初心者の方はフォルダ階層をいじるとうまく動かないと思うので無視してください


ソースコードを追加した後、コンパイルします。(メインのEA側でコンパイル)

common.mqh が正しくインクルードされコンパイル時に読み込まれているMetaEditor画面
※こんな感じに、common.mqhが表示されればちゃんと参照できている証拠です

以上でソースコードの追加とコンパイルは完了です。

ソースコード移動前と移動後の整合性について確認したい場合は、mqhにソースコード移動前と移動後で同期間でバックテストを1回ずつ行い、同じ結果が出ればOKという形でチェックできますね。

コンパイルエラーが出るときのチェックポイント

  • mqh の設置場所が間違っていないか?(必ず MQL4/Include)
  • 関数の { } が正常に閉じているか?
  • 関数名の重複がないか?
  • グローバル変数を移動した場合、スコープは問題ないか?

開発効率が上がる mqh 運用テクニック

・関数は「用途別」にファイル分割すると管理しやすい ・EAを複数作る場合、共通関数群は1つにまとめる ・バックテストで“移動前と同じ結果になるか”確認すると安全

さいごに

mqhファイルを使ったコード整理は、EA開発の効率と品質を大きく向上させます。 特に複雑なEAや長期運用するEAでは必須のテクニックといえます。

一度仕組みを作ってしまえば、新しいEAでも #include <common.mqh> だけで関数を使いまわせるため、開発スピードは一気に上がります。

🔗 関連記事

コメント

タイトルとURLをコピーしました