【超入門】MQL5 EA講座 第56回「#include命令(#include directive)」【EAの作り方】

MQL5でEA作ろう講座

前回は MQL5プログラムに共通する全体構造 について解説しました。

改めて前回の内容をおさらいをしておくと、

MQL5のプログラムは概ね、次のような順序で記述・構成される。↓

プリプロセッサ命令

インプット変数 ・ グローバル変数

OnTick関数などのイベントハンドラー

関数構造体enum列挙型クラスなどの定義

ということをお伝えしました。

今回は include命令 についてお話ししたいと思います。

スポンサーリンク

include命令とは?

include命令は、メインプログラムに組み込むインクルードファイルを指定する為の命令記述です。

前回も触れましたが、インクルードファイル関数クラス構造体をまとめておくことができるファイルです。

インクルードファイルinclude命令で指定することによって、メインプログラムで関数クラスを一から定義しなおすことなく利用することができます。

includeファイルの作り方

インクルードファイルを生成する時は、

「MQLウィザード」

を利用します。

MQL5 EA講座 第2回「メタエディターの使い方」

では、「MQLウィザード」を起動し、エキスパートアドバイザー(テンプレート)を選択して、EA(自動売買プログラム)を作るためのたたき台となるファイルを生成する方法を紹介しました。

インクルードファイルを生成する時も基本的には同じ手順をたどります。

違うのは、エキスパートアドバイザー(テンプレート)ではなく、インクルード(*mqh) を選択するだけです。↓

Include\の後ろにファイル名を記述して完了を押下すれば、デフォルト格納フォルダであるIncludeフォルダにファイルが格納されます。

インクルードファイルができてしまえば、あとは今までの講座記事で学んだ手順に従って、enum列挙型構造体関数クラスを宣言・定義していけばOKです。↓

あとは、メインプログラムでinclude命令で指定することでファイル内のenum列挙型構造体関数クラス等が利用できるようになります。

include命令の記述方法について

include命令の記述方法には2パターンあります。

記述方法その1 <>で囲む

記述方法その1は、ファイル名を

<>

で囲む方法です。↓

#include <test.mqh>

ファイル名は、拡張子の .mqhも含めて正確に入力してください。

大文字小文字の区別やスペースの入り込みによって、ファイル名が異なってしまっている場合があるので注意しましょう。

この記述をすることによって、コンパイル時、メタエディターデフォルトのincludeディレクトリを対象に指定されたファイル名を探します。

デフォルトのincludeディレクトリとは、すなわち

MQL5\Imclude内のサブフォルダを含めた領域です。

<>で囲む方法でファイル名を指定したにも関わらず、デフォルトのincludeディレクトリにインクルードファイルが格納されていない場合、当然コンパイルエラーになります。↓

↑の動画では、後述するパターン2のinclude命令記述でインクルードファイル指定をしていたのですが、途中で<>で囲む方法に変えて再コンパイルしたものです。

デフォルトのincludeディレクトリにインクルードファイルが格納されていなかったので、コンパイルエラーが発生しました。

記述方法その2 ダブルクォーテーション(”)で囲む

記述方法その2は、

ダブルクォーテーション(”)

で囲む方法です。

#include "test.mqh"

この記述をすることによって、コンパイル時、メタエディターは呼び出したメインプログラムが保存されているディレクトリを対象に指定されたファイル名を探します。

例えば、testProgram.mq4というファイルからtest.mqhというインクルードファイルinclude命令によって呼び出そうとしている場合、testProgram.mq4ファイルとtest.mqhファイルは同じディレクトリに格納されている必要があります。↓

ダブルクォーテーションで囲む方法でファイル名を指定したにも関わらず、メインプログラムが保存されているディレクトリにインクルードファイルが格納されていない場合、コンパイルエラーになります。↓

↑の動画では、途中でインクルードファイルのディレクトリを別に移動して再コンパイルしたものです。

呼び出したメインプログラムと異なるディレクトリにインクルードファイルが移動したことによって、コンパイルエラーが発生していますね。

インクルードファイルとライブラリーファイルの違い

インクルードファイルと似たような機能として、ライブラリーファイルというものがMQL5にはあります。

ライブラリーファイルもインクルードファイルと同じく、別ファイルで用意していた関数クラスを、メインプログラムで一から定義しなおすことなく利用することができる仕組みです。

インクルードファイルライブラリーファイルの違いは何かというと、まず単純にメインプログラムでの呼び出し方の記述が違うという事、

そしてもう1つの違いは、ライブラリーファイルは他のユーザーにソースコードを明示しない状態で、利用してもらうことが可能

というです。

ライブラリーファイルの呼び出し方・使い方等の詳細について↓の記事にて解説をしていますので、ご覧いただければと思います。

まとめ

今回は include命令 について解説しました。

今回の記事では以下のことを学びました

  • #include命令には、ファイル名を<>で囲む記述形式と、ダブルクォーテーション(“)で囲む記述形式の2パターンがある。

  • <>で囲む記述形式の場合、コンパイル時、メタエディターは呼び出したメインプログラムが保存されているディレクトリを対象に指定されたファイル名を探す仕組みになっている。

  • ダブルクォーテーション(“)で囲む記述形式の場合、コンパイル時、メタエディターは呼び出したメインプログラムが保存されているディレクトリを対象に指定されたファイル名を探す仕組みになっている。

※なお、インクルードファイルを実際に使った具体的なコード記述例については、この先以下の講座記事で確認する事ができますので、参考にしていただければと思います。

第71回「トレード用のオリジナルクラスを作る」

第82回「ポジション情報管理クラスを作る-その1」

第88回「待機注文情報取得用のクラスを追加する」

第96回「トレーリングストップクラスを作る1」

第102回「資金管理用のインクルードファイルを作る」

第109回「インジケータの値を簡単に取得できるクラスを作る」

今回は以上になります。

最後までお読みいただきありがとうございました<m(__)m>

【超入門】MQL5 EA講座 第55回「MQL5プログラムの全体構造について」【EAの作り方】

      →【超入門】MQL5 EA講座 第57回「ネッティングとヘッジング」【EAの作り方】

コメント

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