クライアント端末イベント

Init #

Init イベントは、クライアント端末プログラム(エキスパートアドバイザーまたはカスタム指標)が読み込まれてグローバル変数の初期化プロセスが開始した直後に送信され、存在する場合 OnInit() イベントハンドラで処理されます。このイベントはまた、金融商品及び/またはチャート時間軸の変更後、MetaEditor でのプログラムの 再コンパイル後、エキスパートアドバイザーの設定ウィンドウまたはカスタム指標での入力パラメータの変更後にも生成されます。エキスパートアドバイザーは口座変更後も初期化されます。Init イベントはスクリプトでは生成されません。

Deinit #

グローバル変数が初期化解除されプログラム(エキスパートアドバイザーまたはカスタム指標)がアンロードされる前に、クライアント端末はプログラムに Deinit イベントを送信します。Deinit はまた、クライアント端末の閉鎖時、チャートの閉鎖時、セキュリティ及び/または時間軸の変更直前、プログラムの再コンパイル成功時、入力パラメータの変更時、及び口座変更時に生成されます。

初期化解除の理由OnDeinit() 関数に渡されたパラメータによって取得出来ます。OnDeinit() 関数の実行は 2.5 秒に制限されています。この間に完了しない場合、この関数は強制的に終了されます。Deinit イベントはスクリプトでは生成されません。

Start #

Startは、スクリプトまたはサービスを読み込んだ後に起動するための特別なイベントです。これはOnStart関数によって処理されます。StartイベントはEAおよびカスタム指標には渡されません。

NewTick #

NewTick イベントは新しい相場が存在する時に生成され、接続されたエキスパートアドバイザーの OnTick() で処理されます。新しい相場を受信した際に前の相場のための OnTick 関数が処理中の場合、対応するイベントはキューに追加されないので、新しい相場はエキスパートアドバイザーによって無視されます。

プログラムの実行中に受信された新しい相場は全て OnTick() が終了するまで無視されます。その後、この関数は新しい相場が受信された後にのみ実行されます。NewTick イベントは自動取引が許可されているか否か(「自動売買」ボタン)に関係なく生成されます。自動売買の禁止は、エキスパートアドバイザーが動作し続ける一方でエキスパートアドバイザーからの取引リクエストの送信が許可されないことだけを意味します。

ボタンを押しての自動取引の禁止は実行中の OnTick() 関数を停止しません。

Calculate #

Calculate イベントは Init イベントの送信直後と価格データの変更時に指標のみに発生します。このイベントは OnCalculate 関数で処理されます。

Timer #

Timer イベントは EventSetTimer 関数でタイマーを起動したエキスパートアドバイザーのクライアント端末によって定期的に生成されます。通常この関数は OnInit で呼び出されます。Timer イベント処理は OnTimer 関数で行われます。エキスパートアドバイザーの操作終了後、タイマーは通常 OnDeinit 関数で呼ばれる EventKillTimer 関数を使用して破壊されるべきです。

Trade #

Trade イベントは取引操作が取引サーバで完了した時に生成されます。Trade イベントは下記の取引操作時に OnTrade() 関数で処理されます。

  • 未決注文の変更または削除
  • 不充分な資金または期限切れによる未決注文の取り消し
  • 未決注文のアクティベーション
  • 注文、ポジション(またはその一部)の追加または決済
  • ポジションの変更(決済逆指及び/または決済指の値の変更)

TradeTransaction #

取引口座にいくつかの明確なアクションを実行すると、状態が変更されます。アクションの例は下記です。

  • クライアント端末内の任意の MQL5 アプリケーションから OrderSendOrderSendAsync 関数を使用して取引リクエストを送信し、取引が実行される。
  • 端末のグラフィカルインターフェースを使用して取引リクエストを送信し、取引が実行される。
  • サーバ上で未決注文と逆指値注文が執行される。
  • 取引サーバ側で操作を行う。

これらのアクションの結果として以下の取引トランザクションが実行されます。

  • 取引リクエストの処理
  • 未執行注文の変更
  • 注文履歴の変更
  • 約定履歴の変更
  • ポジションの変更

例えば、買いの成行注文を送信すると、注文が処理され、買い注文が口座に記録されます。その後注文が実行されオープン注文の表から削除されて注文履歴に追加されます。 約定が履歴に追加され新しいポジションが作成されます。これらのアクションは全て取引トランザクションです。このようなトランザクションの端末への到着が TradeTransaction イベントです。このイベントは OnTradeTransaction 関数で処理されます。

Tester #

Tester イベントはエキスパートアドバイザーの履歴データテストの終了後に生成されます。このイベントは OnTester() 関数で処理されます。

TesterInit #

TesterInit イベントは、ストラテジーテスターでの最適化の開始の際に初めの最適化パスの前に生成されます。TesterInit イベントは OnTesterInit() 関数で処理されます。

TesterPass #

TesterPass イベントは新しい データフレームが受信された際に生成されます。TesterPass イベントは OnTesterPass() 関数で処理されます。

TesterDeinit #

TesterDeinit イベントはストラテジーテスターでのエキスパートアドバイザーの最適化の終了時に生成されます。TesterDeinit イベントは OnTesterDeinit() 関数で処理されます。

ChartEvent #

ChartEvent はユーザがチャートを操作する時にクライアント端末によってイベント作成されます。

また、EventChartCustom 関数を使用して、任意の MQL5 プログラムによってエキスパートアドバイザーに送信することが出来るChartEvent カスタムイベントがあります。このイベントは OnChartEvent 関数で処理されます。

BookEvent #

BookEvent は板情報の変更後にクライアント端末で生成され OnBookEvent 関数で処理されます。指定されたシンボルの BookEvent の生成を始めるには MarketBookAdd 関数を使用してシンボルをイベントにサブスクライブする必要があります。

BookEvent から指定されたシンボルのサブスクライブを停止するには MarketBookRelease 関数を呼ぶ必要があります。BookEvent イベントは、ブロードキャストイベントです。つまり、イベントに 1 つのエキスパートアドバイザーをサブスクライブすれば、OnBookEvent イベントハンドラを持つ他の全てのエキスパートアドバイザーがそれを受信出来ます。これがパラメータとしてハンドラに渡された銘柄名を分析する必要がある理由です。

参照

イベントハンドラプログラムの実行