イベントハンドラとは、イベントが発生した時に呼び出される処理の事です。
OnInit
この関数は、EA(エキスパートアドバイザ)やインジケーターが読み込まれた直後に起動されるイベントです。
また、チャートの通貨ペアや時間軸の変更、MetaEditorでの再コンパイル後、EAやインジケーターの入力パラメータ変更後にも起動されます。
関数
関数の型は2つあります。
1 2 3 4 5 6 7 8 9 10 |
//結果を返すバージョン int OnInit(){ return(INIT_SUCCEEDED); //初期化完了 }; //結果を返さないバージョン void OnInit(){ }; |
戻り値
int型の値で、ゼロは正常な初期化を意味します。
プログラムを初期化し、プログラムが異常に終了した場合にはエラーコードを返すのでint型がオススメです。
初期化が失敗した時は、REASON_INITFAILED初期化解除の理由コードをOnDeinit()関数に渡して強制的に終了されます。
リターンコードの選択
EAの入力を最適化するために、リターンコードとしてENUM_INIT_RETCODE列挙体からの値を試用する事がオススメです。
EAのバックテストのEA初期化中にTerminalInfoInteger()関数を試用して、エージェントの設定とリソース(コア数、空きメモリ量など)のデータを要求する事が出来ます。
取得したデータに基づいて、テストエージェントの使用を許可するか、EAの最適化を禁止する事が出来ます。
ID | ENUM_INIT_RETCODE列挙コードの説明 |
INIT_SUCCEEDED | 初期化が成功した事を表す。(ゼロ値) |
INIT_FAILED | 初期化が失敗した事を表す。(ゼロ値以外) |
INIT_PARAMETERS_INCORRECT | 入力パラメーターに誤った値を設定している事を示します。 ストラテジーテスターはこのタスクを他のエージェントに再試行のために渡しません。 |
INIT_AGENT_NOT_SUITABLE | 初期化時にエラーはないが、何らかの理由でテストに適していない事を示します。 エージェントはこの最適化が終了するまでタスクを受信しません。 |
OnDeinit
この関数は、Deinitイベントが発生する時に呼び出されて、初期化を解除するのに使用されるイベントです。
関数
1 2 3 |
void OnDeinit(const int reason){ }; |
引数
reason変数に以下のアンロードコードを含む事が出来ます。
つまり、以下の事象が発生した時にその原因となる定数がOnDeinit()の引数に渡されてアンロード処理されます。
定数 | 値 | アンロードコードの説明 |
REASON_PROGRAM | 0 | ExpertRemove()関数の呼び出しでEAが作動しなくなった。 |
REASON_REMOVE | 1 | プログラムがチャートから削除された。 |
REASON_RECOMPILE | 2 | プログラムが再コンパイルされた。 |
REASON_CHARTCHANGE | 3 | チャートの通貨ペアまたは時間軸が変更された。 |
REASON_CHARTCLOSE | 4 | チャートが閉じられた。 |
REASON_PARAMETERS | 5 | 入力パラメーターが変更された。 |
REASON_ACCOUNT | 6 | 取引サーバーへの再接続が発生した。 または別アカウントに変更された。 |
REASON_TEMPLATE | 7 | 新しいテンプレートが適用された。 |
REASON_INITFAILED | 8 | OnInit()イベントがゼロ以外の値を返した。 |
REASON_CLOSE | 9 | 端末が閉じられた。 |
戻り値
戻り値はありませんが、UninitializeReeason()関数、または_UninitReason変数でアンロードされた理由のコードを取得する事が出来ます。
OnStart
この関数は、スクリプトを実行した時に起動されるイベントです。
そしてプログラムに実装されているアクションの1回限りの実行を目的としています。
関数
関数の型は2つあります。
1 2 3 4 5 6 7 8 9 |
//結果を返すバージョン int OnStart(){ }; //結果を返さないバージョン void OnStart(){ }; |
戻り値
操作ログタブでint型の値が表示されます。
プログラムの実行結果を分析するためのエラーコード、またはその他の有用なデータも返すのでint型がオススメです。
OnCalculate
この関数は、カスタムインジケーターでのみ呼び出され、Calculateイベントが発生して新しいTickを受信した時に発生します。
関数
1 2 3 4 5 6 7 8 9 10 11 12 |
int OnCalculate( const int rates_total, // 入力時間枠のサイズ const int prev_calculated, // 以前の呼び出しで処理されたバーの数 const datetime& time[], // 時間配列 const double& open[], // 始値配列 const double& high[], // 高値配列 const double& low[], // 安値配列 const double& close[], // 終値配列 const long& tick_volume[], // ティックボリューム配列 const long& volume[], // 真のボリュームの配列 const int& spread[] // スプレッドの配列 ); |
引数
- rates_total
インジケーターで計算する為の利用可能なバー数が含まれています。 - prev_calculated
以前の呼び出しで処理されたバー数が含まれています。 - time[]
オープン時間を含んだ配列です。 - open[] , high[] , low[] , close[]
現在の時間軸の始値、高値、安値、終値を含んだ配列です。 - tick_volume[]
tick出来高を含んだ配列です。 - volume[]
取引量値の配列です。 - spread[]
バーのスプレッド値を含んだ配列です。
戻り値
次に関数が呼び出されるときにprev_calculatedパラメーターとして渡されるint型の値
OnTick
この関数は、NewTickイベントが発生して新しい相場が処理される時に、EAで呼び出されます。
関数
1 2 3 |
void OnTick(){ }; |
戻り値
なし
OnTimer
この関数は、設定した一定の時間間隔で生成されるTimerイベントを呼び出します。
関数
1 2 3 |
void OnTimer(){ }; |
戻り値
なし
使用時のポイント
通常、OnInit()関数でEventSetTimer()関数を呼び出してタイマーをセットします。
タイマーを1秒間隔よりも頻繁に受信するには、高解像度タイマーを作成する為にEventSetMillisecondTimer()関数を使用します。
そして、OnDeinit()関数でEventKillTimer()関数を使用してTimerイベントを停止させます。
OnTester
この関数は、EAのバックテスト後に適切なアクションを取るために、Testerイベントを発生させます。
関数
1 2 3 4 |
double OnTester(){ return(***); }; |
戻り値
テスト結果を評価する為のカスタム条件最適化の値
使い方
OnTester()関数を使用すると、独自のテスト結果レポートを作成して保存出来るだけでなく、最適化プロセスを制御してトレーディング戦略の最良パラメーターを見つける事が出来ます。
OnChartEvent
この関数は、チャート上の変更をした際にChartEventイベントを呼び出す事が出来ます。
関数
1 2 3 4 5 6 |
void OnChartEvent(){ const int id, // イベントID const long& lparam, // long型イベントパラメータ const double& dparam, // double型イベントパラメータ const string& sparam // string型イベントパラメータ ); |
引数
- id
ENUM_CHART_EVENT列挙体からのイベントID - lparam,dparam,sparam
それぞれlong型、double型、string型のイベントパラメーター
戻り値
なし
使い方
事前定義されたOnChartEvent()関数を使用して処理出来るイベントには11種類あります。
ID | ENUM_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_ENDEDIT | Editグラフィックオブジェクトのテキスト編集の終了 |
CHARTEVENT_CHART_CHANGE | プロパティダイアログでのチャートサイズやチャートプロパティの変更 |
CHARTEVENT_CUSTOM | カスタムイベントの範囲からのイベントの初期番号 |
CHARTEVENT_CUSTOM_LAST | カスタムイベントの範囲からのイベントの最終番号 |
コメント