- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnCalculate
この関数は、Calculateイベントが発生して価格の変化が処理されるときに、指標で呼び出されます。この関数の型は 2 つあります。1つの指標内では1つだけ使用できます。
データ配列に基づく計算
int OnCalculate(
|
現在の時間枠に基づいた計算
int OnCalculate(
|
パラメータ
rates_total
[in] 計算のために指標に使用できるprice[]配列または入力系列のサイズ第2の関数タイプでは、パラメータ値は、それが開始されたチャート上の棒の数に対応します。
prev_calculated
[in] 直前の呼び出しでOnCalculate()関数によって返された値が含まれます。この関数が前回起動されて以来変更されていないバーをスキップするように設計されています。
begin
[in] price[]配列で有意義なデータが始まるインデックス。正しい値を持たない失われたデータや初期のデータをスキップすることができます。
price[]
[in] 計算のための値の配列。価格時系列または指標バッファのうちの一つがprice[]配列として渡されます。計算に渡されるデータの種類は_AppliedTo事前定義変数を使用して定義できます。
time{}
[in] バーの開いた時間の配列
open[]
[in] バーの始値の配列
high[]
[in] バーの高値の配列
low[]
[in] バーの安値の配列
close[]
[in] バーの終値の配列
tick_volume[]
[in] ティックボリューム値の配列
volume[]
[in] 取引量値の配列
spread[]
[in] バーのスプレッド値の配列
戻り値
次に関数が呼び出されるときにprev_calculatedパラメータとして渡されるint 型の値
注意事項
OnCalculate()関数がゼロに等しい場合、クライアント端末のデータウィンドウには指標値が表示されません。
OnCalculate()関数の最後の呼び出し以降に価格データが変更された場合(より長期間の履歴が読み込まれているか、履歴のギャップが埋められている場合)、 prev_calculated入力パラメータは、端末自身によってゼロに設定されます。
time[]、open[]、high[]、low[]、close[]、tick_volume[]、volume[]、spread[]配列で索引付けの方向を定義するには、ArrayGetAsSeries()関数を呼び出します。デフォルトに依存しないためには、作業する配列でArraySetAsSeries()関数を呼び出します。
最初の関数タイプを使用する場合、指標を起動するときに必要な時系列または指標がパラメータタブのprice[]配列としてユーザによって選択されます。そのためには "Apply to"(適用)フィールドのドロップダウンリストに必要な項目を指定する必要があります。
カスタム指標値を他のMQL5プログラムから取得するにはiCustom()関数が使用されます。これは、後の操作のために指標ハンドルを返します。また、必要なprice [] 配列または他の指標ハンドルを指定することも出来ます。このパラメータは、カスタム指標の入力変数のリストに最後に送信されるべきです。
OnCalculate()の戻り値とprev_calculated の2番目の入力パラメータとの関係はここで指摘される必要があります。関数が呼び出されたとき、prev_calculatedパラメータは以前のOnCalculate() 呼び出しで返された値を持ちます。これにより、この関数が前回実行されてから変更されていないバーの繰り返した計算を避けてカスタム指標を計算するためのリソース節約アルゴリズムを実装することができます。
指標の例
//+------------------------------------------------------------------+
|
参照
ArrayGetAsSeries、ArraySetAsSeries、iCustom、Event handling functions、Program running、Client terminal events、Access to timeseries and indicators