イベントハンドラ

MQL4リファレンス

イベントハンドラとは、イベントが発生した時に呼び出される処理の事です。

スポンサーリンク

OnInit

この関数は、EA(エキスパートアドバイザ)やインジケーターが読み込まれた直後に起動されるイベントです。
また、チャートの通貨ペアや時間軸の変更、MetaEditorでの再コンパイル後、EAやインジケーターの入力パラメータ変更後にも起動されます。

関数

関数の型は2つあります。

戻り値

int型の値で、ゼロは正常な初期化を意味します。

プログラムを初期化し、プログラムが異常に終了した場合にはエラーコードを返すのでint型がオススメです。
初期化が失敗した時は、REASON_INITFAILED初期化解除の理由コードをOnDeinit()関数に渡して強制的に終了されます。

リターンコードの選択

EAの入力を最適化するために、リターンコードとしてENUM_INIT_RETCODE列挙体からの値を試用する事がオススメです。

EAのバックテストのEA初期化中にTerminalInfoInteger()関数を試用して、エージェントの設定とリソース(コア数、空きメモリ量など)のデータを要求する事が出来ます。
取得したデータに基づいて、テストエージェントの使用を許可するか、EAの最適化を禁止する事が出来ます。

IDENUM_INIT_RETCODE列挙コードの説明
INIT_SUCCEEDED初期化が成功した事を表す。(ゼロ値)
INIT_FAILED初期化が失敗した事を表す。(ゼロ値以外)
INIT_PARAMETERS_INCORRECT入力パラメーターに誤った値を設定している事を示します。
ストラテジーテスターはこのタスクを他のエージェントに再試行のために渡しません。
INIT_AGENT_NOT_SUITABLE初期化時にエラーはないが、何らかの理由でテストに適していない事を示します。
エージェントはこの最適化が終了するまでタスクを受信しません。

OnDeinit

この関数は、Deinitイベントが発生する時に呼び出されて、初期化を解除するのに使用されるイベントです。

Deinitイベントとは
プログラムがアンロードされる前に生成されるイベントです。
(端末の閉鎖時、チャートを閉鎖時、通貨ペア・時間軸の変更直前、プログラムの再コンパイル成功時、入力パラメーター変更時、口座変更時など)

関数

引数

reason変数に以下のアンロードコードを含む事が出来ます。
つまり、以下の事象が発生した時にその原因となる定数がOnDeinit()の引数に渡されてアンロード処理されます。

定数アンロードコードの説明
REASON_PROGRAM0ExpertRemove()関数の呼び出しでEAが作動しなくなった。
REASON_REMOVE1プログラムがチャートから削除された。
REASON_RECOMPILE2プログラムが再コンパイルされた。
REASON_CHARTCHANGE3チャートの通貨ペアまたは時間軸が変更された。
REASON_CHARTCLOSE4チャートが閉じられた。
REASON_PARAMETERS5入力パラメーターが変更された。
REASON_ACCOUNT6取引サーバーへの再接続が発生した。
または別アカウントに変更された。
REASON_TEMPLATE7新しいテンプレートが適用された。
REASON_INITFAILED8OnInit()イベントがゼロ以外の値を返した。
REASON_CLOSE9端末が閉じられた。

戻り値

戻り値はありませんが、UninitializeReeason()関数、または_UninitReason変数でアンロードされた理由のコードを取得する事が出来ます。

OnStart

この関数は、スクリプトを実行した時に起動されるイベントです。
そしてプログラムに実装されているアクションの1回限りの実行を目的としています。

関数

関数の型は2つあります。

戻り値

操作ログタブでint型の値が表示されます。

プログラムの実行結果を分析するためのエラーコード、またはその他の有用なデータも返すのでint型がオススメです。

OnCalculate

この関数は、カスタムインジケーターでのみ呼び出され、Calculateイベントが発生して新しいTickを受信した時に発生します。

関数

引数

  • rates_total
    インジケーターで計算する為の利用可能なバー数が含まれています。
  • prev_calculated
    以前の呼び出しで処理されたバー数が含まれています。
  • time[]
    オープン時間を含んだ配列です。
  • open[] , high[] , low[] , close[]
    現在の時間軸の始値、高値、安値、終値を含んだ配列です。
  • tick_volume[]
    tick出来高を含んだ配列です。
  • volume[]
    取引量値の配列です。
  • spread[]
    バーのスプレッド値を含んだ配列です。

戻り値

次に関数が呼び出されるときにprev_calculatedパラメーターとして渡されるint型の値

OnTick

この関数は、NewTickイベントが発生して新しい相場が処理される時に、EAで呼び出されます。

NewTickイベントとは
新しいTickを受信した時に生成されるイベントです。

関数

戻り値

なし

OnTimer

この関数は、設定した一定の時間間隔で生成されるTimerイベントを呼び出します。

Timerイベントとは
EventSetTimer()関数でタイマーを起動したEAによって定期的に生成されるイベントです。

関数

戻り値

なし

使用時のポイント

通常、OnInit()関数でEventSetTimer()関数を呼び出してタイマーをセットします。
タイマーを1秒間隔よりも頻繁に受信するには、高解像度タイマーを作成する為にEventSetMillisecondTimer()関数を使用します。

そして、OnDeinit()関数でEventKillTimer()関数を使用してTimerイベントを停止させます。

OnTester

この関数は、EAのバックテスト後に適切なアクションを取るために、Testerイベントを発生させます。

Testerイベントとは
ストラテジーテスターでEAのバックテスト終了後に生成されるイベントです。

関数

戻り値

テスト結果を評価する為のカスタム条件最適化の値

使い方

OnTester()関数を使用すると、独自のテスト結果レポートを作成して保存出来るだけでなく、最適化プロセスを制御してトレーディング戦略の最良パラメーターを見つける事が出来ます。

OnChartEvent

この関数は、チャート上の変更をした際にChartEventイベントを呼び出す事が出来ます。

関数

引数

  • id
    ENUM_CHART_EVENT列挙体からのイベントID
  • lparam,dparam,sparam
    それぞれlong型、double型、string型のイベントパラメーター

戻り値

なし

使い方

事前定義されたOnChartEvent()関数を使用して処理出来るイベントには11種類あります。

IDENUM_CHART_EVENT列挙体の説明
CHARTEVENT_KEYDOWNキーストローク
CHARTEVENT_MOUSE_MOVEマウスの移動、マウスクリック
CHARTEVENT_MOUSE_WHEELマウスホイールの押下やスクロール
CHARTEVENT_OBJECT_CREATE作成されたグラフィックオブジェクト
CHARTEVENT_OBJECT_CHANGEプロパティダイアログで変更されたグラフィックオブジェクトのプロパティ
CHARTEVENT_OBJECT_DELETE削除されたグラフィックオブジェクト
CHARTEVENT_CLICKチャートのクリック
CHARTEVENT_OBJECT_CLICKグラフィックオブジェクトのクリック
CHARTEVENT_OBJECT_DRAGグラフィックオブジェクトのドラッグ&ドロップ
CHARTEVENT_OBJECT_ENDEDITEditグラフィックオブジェクトのテキスト編集の終了
CHARTEVENT_CHART_CHANGEプロパティダイアログでのチャートサイズやチャートプロパティの変更
CHARTEVENT_CUSTOMカスタムイベントの範囲からのイベントの初期番号
CHARTEVENT_CUSTOM_LASTカスタムイベントの範囲からのイベントの最終番号

コメント

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