イベント処理

MQL5言語ではいくつかの定義済みイベントが処理されます。これらのイベントを処理するための関数は MQL5 プログラムで定義されている必要があります。関数名、戻り値の型、パラメータの組成物(もしあれば)と型は、イベントハンドラ関数の記述に厳格に適合しなければなりません。

クライアント端末イベントハンドラーは、戻り値およびパラメーターの型を使用して、イベントを処理する関数を識別します。関数に、以下の記述に対応しないいくつかのパラメータまたは戻り値の型がある場合、そのような関数をイベントの処理に使用することはできません。

関数

説明

OnStart

この関数は、Startイベントがスクリプト内で設定されたアクションを実行するために発生したときに呼び出されます

OnInit

この関数は、Initイベントが発生して起動したMQL5プログラムが初期化されるときに、指標やEAで呼び出されます。

OnDeinit

この関数は、Deinitイベントが発生して起動したMQL5プログラムが初期化解除されるときに、指標やEAで呼び出されます。

OnTick

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

OnCalculate

この関数は、Calculateイベントが発生して価格の変化が処理されるときに、指標で呼び出されます。

OnTimer

この関数は、一定の時間間隔でターミナルによって生成されるTimerイベント中に、指標やEAで呼び出されます。

OnTrade

この関数は、取引サーバ上の取引操作の終了時に生成されるTrade イベント中に、EAで呼び出されます。

OnTradeTransaction

この関数は、TradeTransactionイベントが発生して取引リクエスト実行結果が処理されるときに、EAで呼び出されます。

OnBookEvent

この関数は、BookEventイベントが発生して板情報の変化が処理されるときに、EAで呼び出されます。

OnChartEvent

この関数は、ChartEventイベントが発生してユーザまたはMQL5プログラムによるチャートの変化が処理されるときに、指標やEAで呼び出されます。

OnTester

この関数は、Testerイベントが発生してEAをテストした後に履歴データに対して必要なアクションが実行されるときに、EAで呼び出されます。

OnTesterInit

この関数は、 TesterInitイベントが発生してストラテジーテスターでの最適化に先立って必要なアクションが実行されるときに、EAで呼び出されます。

OnTesterDeinit

この関数は、ストラテジーテスターでの最適化の後にTesterDeinit イベントが発生したときに、EAで呼び出されます。

OnTesterPass

この関数は、ストラテジーテスターでのEAの最適化の際に TesterPassイベントが発生して新しい時間枠の到着を処理するときに、EAで呼び出されます。

クライアント端末は、着信イベントを対応するオープンチャートに送信します。イベントはチャート(チャートイベント)または MQL5 プログラム(カスタムイベント)によっても生成出来ます。チャート上のグラフィカルオブジェクトの作成または削除のイベントの生成はCHART_EVENT_OBJECT_CREATE及びCHART_EVENT_OBJECT_DELETEチャートプロパティによって有効または無効に出来ます。各MQL5アプリケーションとチャートは、新たに到着したイベントが配置される独自のイベントキューを持っています。

プログラムは、それが動作しているチャートからのイベントのみを受け取ります。全てのイベントは、受信された順に次々に処理されます。キューにすでに NewTickイベントがある、またはこのイベントが処理段階にある場合、新しいNewTickイベントはMQL5アプリケーションキューには追加されません。似たように ChartEvent がすでにMQL5プログラムキューに存在する場合、またはこのイベントが現在処理中の場合、同じ型のイベントはキューには追加されません。Timerイベント処理も同じように扱われ、Timer イベントがキューに存在するか処理中の場合、新しいTmerイベントはキューに追加されません。

イベントキューは限られてはいますが充分な大きさを持っています。よく書かれたプログラムでのキューのオーバーフローは起こりにくいです。オーバーフローの場合、新しいイベントはキューに追加されずに廃棄されます。

無限ループを使用してのイベント処理は推奨されません。単一のStartイベントを処理するスクリプトは例外です。

ライブラリはイベントを処理しません。