イベント関数とは
MQLを学ぶために知っておく必要がある知識として、イベント関数があります。
イベント関数とは、ある事象(イベント)が発生する度に呼び出される関数のことを指します。
ここでは、知っておくべきイベント関数について示します。
- OnTick()
EAが動作しているシンボルに対して新しいティックを受け取ったときに呼び出されます - OnInit()
EAを起動したときに呼び出されます。
OnTick()
説明
EAが動作しているシンボルに対して新しいティックを受け取ったときに呼び出されます。
EAは1つのチャートに適用させて動作させますので、特定のシンボルの新しいティック(Tick:価格の更新)を受け取るごとにこの関数が呼び出されます。
つまり、価格が更新されている間は常に連続で呼び出しされる関数です。
市場が閉じている土曜日、日曜日は呼び出しがされないこととなります。
常に連続で呼び出しされる関数であるため、必要な処理が完了したら本関数をリターンする必要があり、長時間処理することは禁止されています。
構文
void OnTick(void);
この関数には、引数も戻り値の設定も不要です。
使用例
以下に、EAとして最小といえるソースコードを示します。
(最小といっても記述の省略もできます)
void OnTick()
{
}
これだけしか記述がありませんが、EAとして動作しますが何も実施すべき処理が記述されていないため、呼び出しが行われるだけです。
これだけでは何の意味もない内容ですが、これだけでも「何もしない」という動作するEAが出来上がる説明だと思ってください。
以下に、少しだけ処理を加えたソースコードを示します。
void OnTick()
{
static int iCountCall = 0;
Comment("OnTick()呼び出し ", ++iCountCall);
}
チャートの左上にコメントとして、OnTick()が呼び出された回数を呼び出し毎に書き換えていく処理です。
ここでは記述された処理がどういう意味であるかというのは無視して、ティックを受け取る毎に呼出しが行われることだけ理解してください。
OnInit()
説明
EAを起動したときに一度だけ呼び出されます。
EAが起動EAの起動には、時間足変更、パラメータ変更、シンボル切替えも含まれることを理解しておく必要があります。
構文
int OnInit(void);
この関数には、引数はありません。
OnInit()の結果が正しく終了したかの戻り値を設定する必要があります。
使用例
以下に、OnInit()の使用例を示します。
int OnInit(void)
{
return INIT_SUCCEEDED;
}
EAが起動したときに一度だけ呼び出されるのですが、起動時にやる必要がある処理がなければ戻り値を返すだけで構いません。
起動時に実施すべき処理がない場合は、OnInit()の記述を省略することもの可能です。
起動時に実施すべき処理が正常に終了した場合は「INIT_SUCCEEDED」をreturnに設定し、失敗した場合は「INIT_FAILED」をreturnに設定します。
「INIT_FAILED」を設定した場合はEAが動作することなく終了します。
補足
イベント関数はここで紹介したものだけではありません。
初心者向けを対象としているため、最低限の紹介のみとなっていますので、他のイベント関数は興味があればご自身で公式サイトをご確認ください。
コメント