int init(), int deinit(), int start() の動作タイミングを理解しよう

MT4 EA開発をする上で、まず理解しないといけない関数です。
MetaEditorを開くと、デフォルトで表示されている関数ですね。

※MT4 Build 600 以降については、以下の記事をご覧ください
int OnInit(), void OnDeinit(const int reason), void OnTick() を理解しよう

各関数の動作タイミングは、Alert関数を挿入して簡単に確認することできます。
下記mq4のソースコードをコンパイルして、チャートに適用してみてください。(ダブルクリックで全選択)
//+------------------------------------------------------------------+
//| Alert.mq4 |
//| Copyright 2013, BLT. |
//| http://mt4ordersenderror.blog.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, BLT."
#property link "http://mt4ordersenderror.blog.fc2.com/"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Alert("init");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
Alert("deinit");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
Alert("start");
//----
return(0);
}
//+------------------------------------------------------------------+

アラート音が鳴って、下記のようにポップアップ表示されましたか?

Alert

Alert.mq4は、int init(), int deinit(), int start() の関数が実行される度に
Alert関数を使用して、アラートメッセージを表示するようにしています。

EAをチャートに適用したり、削除したり、時間足を変えてみたり、チャートを閉じてみたり、
プロパティを変更してみたり、MT4を再起動してみたり・・・いろいろ試してみてください。


なんとなくでも動作タイミングは理解出来ましたか?


init関数は、EA適用時や時間足変更時、プロパティ変更時、MT4再起動時のタイミングで動作します。
初期化処理ですね。

deinit関数は、EA削除時や時間足変更直前、プロパティ変更直前、MT4再起動直前のタイミングで動作します。
終了処理ですね。

start関数は、適用したチャートの通貨ペアのレートが配信されるタイミングで動作します。
ここがメイン処理です。ロジックを記述する部分です。


過去にご紹介した「RSIインジケーターを利用したドテンEA」「ボリンジャーバンドを利用したドテンEA」を
確認してみてください。メインとなるstart関数内のみ記述しているのが確認できるかと思います。


EAを販売する場合は、FX会社によって桁数が違ったりするので、init関数内で初期化処理を記載したり
start関数内で、EA動作時にラインを描いたりした時には、deinit関数内で終了処理をしたりします。

今回使用したAlert関数は、デバッグするときに非常に便利なので、みなさんも活用してみてください。

MT4 EA開発・運用ブログ:カテゴリー

MT4 EA開発・運用ブログ:人気記事ランキング(直近1ヶ月)

MT4 EA開発・運用ブログ:最新記事一覧

もっと見る...