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

MQL5でEA作ろう講座

前回は インスタンス について解説しました。

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

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

さて、今回は EA(自動売買プログラム)を作るにあたって、MQL5プログラムに共通する全体構造 についてお話ししたいと思います。

スポンサーリンク
スポンサーリンク

MQL5プログラムに共通する全体構造

ここまで、約50回以上をかけてMQL5の言語的基礎要素について解説をしてきました。

皆様おつかれさまです!

ここまでの知識を身につけていれば、EA(自動売買プログラム)を作るにあたっての下地は十分です。

今回はEA(自動売買プログラム)を作っていくにあたって、MQL5の各要素が全体としてどのように構成され、記述されていくのか、という部分を見ていきながら、今後この講座がどうやって進んでいくのか?という部分も示してきたいと思います。

メタエディターを開いて、MQL5プログラムを記述していき、1つの成果物を完成させた時、

そのコード群を上から順に見ていくと概ね以下のような順で書かれています。

※絶対の順序ではありません。

プリプロセッサ命令

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

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

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

上記の中には、すでに記事として取り上げ解説済みのものもありますし、これから解説や補足を予定しているものもあります。

今回は、上記の流れに沿って、記述をしていけばMQL5を使ってEA(自動売買プログラム)を作ることができるんだ、というイメージを徐々に持っていただけるような内容にしたいな、と思います。

プリプロセッサ命令

プログラムの最上部にはプリプロセッサ命令を記述します。

プリプロセッサ命令とは、

メインとなるプログラムが、処理を開始する前に、メインプログラムとは別に実行される命令記述です。

プリプロセッサ命令は、メインプログラムのコンパイルが始まる前に処理される命令であり、コンパイル終了以降は、プログラムの実行には直接影響を与えません。

コンパイルについては↓の記事をご参照ください。

※pre_processor→「pre」は”前もって、事前の”等を意味する接頭辞、「processor」”は処理するもの”をそれぞれ意味しており、プリプロセッサ命令=「前もって処理しておく命令」と言い換えることができます。

プリプロセッサ命令には以下のようなものがあります。

#property命令(#property directive)

#define命令(#define directive)

#include命令(#include directive)

#property命令
#define命令
#include命令

#property命令(#property directive)について

#property命令については

MQL5 EA講座 第4回「#プロパティ命令(#property directive)」

で既に取り上げていますので、詳細はこちらを見て頂ければと思いますが、

著作権者や作者のホームページURL、プログラムのバージョン等の情報を明示するための記述をするときなどに使われます。

#define命令(#define directive)について

#define命令

定数を定義する時に使われる命令記述です。

定数→定まった数→決まっている、変わらない数で、変数→変わる数とは逆の概念になります。

#define命令については↓

MQL5 EA講座 第17回「定数(Constant)について」

で既に解説しており、従って #define命令についてもこの中で取り上げているので詳しくはコチラを見て頂ければと思います。

#include命令(#include directive)について

#include命令は、特定のインクルードファイル(.mqhファイル)をメインプログラムに組み込むための命令です。

インクルードファイルについて自作した関数クラスをまとめたファイルです。詳しくは次回の講座記事で解説しているのですが↓

#include命令でファイルを呼び出すことによって、インクルードファイルに含まれた関数クラスをメインプログラムで使えるようになります。

クラスについては→コチラ

関数については→コチラ

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

プリプロセッサ命令の記述が終わったら、次にくるのは

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

になります。

インプット変数 と グローバル変数 については↓

で解説済みですので、「そもそもそれってなんだっけ?」という方がいましたら、↑をご参照ください。

文法的な観点で言えば、インプット変数 と グローバル変数 どちらが先に来ても問題はありません。ただ、慣習的にはインプット変数を先に記述していくのが一般的かと思われます。

#property命令
#define命令
#include命令

<変数群>
input データ型 変数名;
input データ型 変数名;
input データ型 変数名;

<グローバル変数群>
データ型 変数名;
データ型 変数名;
データ型 変数名;

イベントハンドラー

インプット変数 と グローバル変数の記述の後には、

OnTick関数などのイベントハンドラーが配置されます。

イベントハンドラーとは?

イベントハンドラー→event handler

event=出来事 handler=処理・扱うもの

すなわち、特定の出来事が起こるたびに実行される関数のことを指します。

今までに取り上げてきた中だと、OnTick関数OnStart関数OnInit関数OnDeinit関数などがイベントハンドラーになります。

上記のイベントハンドラーについて「どんな役割だったっけ・・・」という方は↓

をご覧ください。

そしてEA(自動売買プログラム)を作るにあたり、主要な記述の9割がたは、価格の値動きがあるたびに、処理を実行するOnTick関数の{}内に記述していくことになります。

OnTick関数OnStart関数以外のイベントハンドラーについても折に触れて紹介していきたいと思います。

#property命令
#define命令
#include命令

<変数群>
input データ型 変数名;
input データ型 変数名;
input データ型 変数名;

<グローバル変数群>
データ型 変数名;
データ型 変数名;
データ型 変数名;

<イベントハンドラー群>
OnTick()
{

}

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

関数構造体enum列挙型クラスをメインプログラム内で定義する場合、メインプログラムのどの場所でも定義できますが、インプット変数 と グローバル変数 よりは下に配置した方がよいでしょう。

イベントハンドラーより上の領域で定義するか、下の領域で定義するかはプログラマー次第です。

以上の事を加味し、MQL5MT5用のEA(自動売買プログラム)を作ろうとしたときの全体構成は以下のようになります↓

#property命令
#define命令
#include命令

<変数群>
input データ型 変数名;
input データ型 変数名;
input データ型 変数名;

<グローバル変数群>
データ型 変数名;
データ型 変数名;
データ型 変数名;

<イベントハンドラー群>
void OnTick()
{

}

<自作の関数・構造体・enum列挙型・クラス群>
void 関数名()
{

}

class クラス名
{

};

struct 構造体名
{

};

enum 列挙型名
{

};

もっとも、関数構造体enum列挙型クラスなどの定義は#include命令を使って、別ファイルにて定義した方がメインプログラムの記述がスリムになります。

#include命令の講座記事にてそのあたりは解説予定なので、もうしばらくお待ちください<m(__)m>

※それぞれの言葉・概念について意味が分からない、というものがあった場合は↓

をそれぞれご参照ください。

まとめ

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

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

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

プリプロセッサ命令

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

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

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

今回は以上になります。

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

【超入門】MQL5 EA講座 第54回「インスタンス(オブジェクト)について」【EAの作り方】

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

コメント

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