特別な関数
クライアント端末MetaTrader 4での操作を目的としたプログラム特有の機能は、常に最新の情報をリアルタイムに処理することです。 MQL4言語では、この特殊性はinit()、start()、deinit()という3つの特別な関数の形で反映されます。
特殊関数 は、 init() 、 start() 、および deinit () という名前の 定義済みの関数で、それぞれ 独自の特殊プロパティを持っています。
特殊関数のプロパティ
特殊機能の共通プロパティ
すべての特殊関数の主な特性は、プログラム内から特別な関数呼び出しを使用せずに、特定の条件下でプログラム内で実行することです。 特別な関数がクライアント端末によって実行のために呼び出されます。 プログラムに特殊な関数の記述が含まれている場合は、呼び出し条件(およびそれ自身のプロパティ)に従って呼び出され(実行され)ます。
特別な関数がクライアント端末によって実行のために呼び出されます。 |
特殊関数のプロパティ
特別なinit()関数
特殊なinit()関数のdistinctプロパティは、プログラムの初期化時の実行です。 プログラムに特別なinit()関数の記述が含まれている場合、プログラムが起動する瞬間に呼び出され(実行され)ます。 プログラムに特別なinit()関数がなければ、プログラムの開始時に何のアクションも実行されません。
EAセットアップウィンドウから入力パラメータを変更した後、MetaEditorでプログラムの再コンパイル後に、セキュリティおよび/またはチャートの期間を変更した後で、クライアント端末が履歴データを起動およびアップロードした後、 EA で init()が呼び出され(実行され) 、およびアカウントを変更した後。
スクリプトで は、 init()はチャートにアタッチされた直後に呼び出され(実行され)ます。
カスタムインジケータで は 、クライアント端末が起動した直後、セキュリティおよび/またはチャート期間の変更、MetaEditorでのプログラムの再コンパイル後、およびカスタムインジケータ設定ウィンドウから入力パラメータを変更した後にinit()が呼び出され(実行され)ます。
特殊なstart()関数
特別なstart()関数の異なるプロパティは、実行可能なプログラムの種類によって異なります。
EA では 、新しいチックが来た直後にstart()が呼び出され(実行され)ます。 start()の実行中に新しいティックが来た場合、このティックは無視されます。つまり、そのようなティックが来るとstart()は実行のために呼び出されません。 start()の実行中に受け取ったすべての引用符は無視されます。 実行のためのstart()の開始は、前の操作セッションが完了し、コントロールがクライアント端末に戻され、start()が新しいティックを待っている場合にのみ、クライアント端末によってのみ実行されます。
start()を呼び出して実行する可能性は、「有効/無効にするEAA」ボタンの状態の影響を受けます。 このボタンがEAを無効にしている状態であれば、クライアント端末は新しい引用符が来るかどうかに関係なく実行開始()を呼び出さない。 ただし、ボタンの状態を有効から無効に変更しても、start()の現在の操作セッションは終了しません。
EAプロパティウィンドウが開いている場合、クライアント端末はstart()を呼び出さない。 EAプロパティウィンドウは、start()が新しいティックを待っているときにのみ開くことができます。 このウィンドウは、EAのstart()関数の実行セッション中に開くことができません。
スクリプトで は、 init()によるプログラム初期化の直後にstart()が1回だけ呼び出され(実行されます)。
カスタムインジケータで は 、新しいティックが発生した直後、グラフにアタッチされた直後、セキュリティウィンドウのサイズを変更するとき、あるセキュリティから別のセキュリティに切り替えるときにstart()が呼び出されます(実行されます)。以前のセッション中にインジケータがチャートに添付されていた)、新しいクォートが来るかどうかに関わらず、現在のチャートのシンボルおよびピリオドを変更した後。
プログラムがチャートから削除されたとき、セキュリティおよび/またはチャートの期間が変更されたとき、アカウントが変更されたとき、チャートが閉じられたとき、およびクライアント端末の動作終了の結果。 shutdownコマンド中にstart()が実行された場合、端末が関数の実行を完了するために利用できる時間は2.5秒です。 シャットダウンコマンドstart()が指示された時間制限を超えて操作を続けると、クライアント端末によって強制終了されます。
特別なdeinit()関数の明確な機能は、プログラムの終了(初期化解除)時の実行です。 プログラムにdeinit()の記述が含まれている場合、プログラムのシャットダウン時に呼び出され(実行され)ます。 プログラムにdeinit()が含まれていない場合、プログラムのシャットダウン時には何も実行されません。
クライアント端末は、端末のシャットダウン時、セキュリティウィンドウの終了時、セキュリティの変更直前、チャート期間の変更直前、MetaEditorのプログラム再コンパイル時、入力パラメータの変更時、およびアカウントがあるときにdeinit()を呼び出します。かわった。
EA や スクリプト では、前のプログラムと同じタイプの新しいプログラムをチャートに追加するときに、deinit()の必要な呼び出しを伴うプログラムのシャットダウンが発生することがあります。
カスタムインジケータで は 、新しいインジケータがグラフにアタッチされているときに deinit ()は実行されません。 いくつかのインジケータがセキュリティウィンドウ上で動作することができます。そのため、新しいインジケータをチャートに添付してもdeinit()コールで他のインジケータがシャットダウンされません。
deinit()の実行時間は2.5秒に制限されています。 特別なdeinit()関数のコードが長く実行されると、クライアント端末は特別なdeinit()関数の実行とプログラムの動作を強制的に終了します。
特殊機能の要件
特別な関数init()とdeinit()は、プログラム内に存在しない可能性があります。 プログラム内の特別な関数記述の順序は関係ありません。 特殊な関数は、関数呼び出しの一般的な順序に従って任意のプログラム部分から呼び出すことができます。
特別な関数はパラメータを持つことができます。 ただし、これらの関数がクライアント端末によって呼び出されると、外部からパラメータが送信されることはなく、デフォルト値のみが使用されます。
特別な関数init()とdeinit()は、操作を最大限速く完了させなければならず、start()関数を呼び出す前にサイクルパスに入って操作全体を開始しようとしません。
特殊関数の使用順序
開発者はあなたに非常に便利なツールを提供しました。プログラムが起動すると、init()が実行されます。 その後、主な作業はstart()によって実行されます。 ユーザーが作業を終えると、プログラムのシャットダウンの前にdeinit()が開始されます。
プログラムのメインコードはstart()に含まれていなければなりません。 すべての演算子、組み込み関数呼び出しとカスタム関数呼び出し、および必要な計算はすべてこの関数内で実行する必要があります。 同時に、カスタム関数の役割を正しく理解しなければなりません。 カスタム関数の説明は特殊関数の説明の外側にありますが、カスタム関数が実行のために呼び出された場合、特殊関数はその操作を終了しません。 これは、コントロールがカスタム関数にしばらくの間渡されたことを意味しますが、カスタム関数自体はそれを呼び出した特別な関数内で動作します。 したがって、プログラム実行の過程で、特殊関数は常に(独自のプロパティに従って)動作し、カスタム関数は特殊関数によって呼び出されると実行されます。
特別な機能を使用しない場合は、プログラムで使用しないことを選択できます。 このような場合、クライアント端末はそれを呼び出さない。 絶対的に正常なプログラムとは、3つの特殊関数をすべて含むプログラムです。 init()またはdeinit()を持たないプログラム、またはこれらの関数のいずれかも正常とみなされます。
特別な関数がプログラムで使用されていない場合、このプログラムは実行されません。 クライアント端末は、その特性に応じて特殊機能のみを呼び出す。 カスタム関数はクライアント端末から呼び出されません。 そのため、プログラムに特別な関数がまったく含まれていない(そしてカスタム関数しか含まれていない)場合は、実行のために呼び出されることはありません。
情報環境パラメータの初期化時に値(チャート、市場価格などに関する情報)が用意できていない可能性があるため、init()からstart()を呼び出したり、init()から取引操作を行うことはお勧めしません。
プログラムの実行と実装の例には、特殊な関数のいくつかのプロパティを見るのに役立ついくつかの実用的な例が含まれています。