- 指標スタイルの例
- 指標プロパティと関数との関係
- SetIndexBuffer
- IndicatorSetDouble
- IndicatorSetInteger
- IndicatorSetString
- PlotIndexSetDouble
- PlotIndexSetInteger
- PlotIndexSetString
- PlotIndexGetInteger
カスタム指標
これは、カスタム指標の作成に使用される関数群です。これれの関数はエキスパートアドバイザーとスクリプトでは使用できません。
関数 |
アクション |
---|---|
double 型の指標プロパティの値を設定します。 |
|
int 型の指標プロパティの値を設定します。 |
|
string 型の指標プロパティの値を設定します。 |
|
double 型の指標線プロパティの値を設定します。 |
|
int 型の指標線プロパティの値を設定します。 |
|
string 型の指標線プロパティの値を設定します。 |
|
integer 型の指標線プロパティの値を返します。 |
指標プロパティは、コンパイラディレクティブか関数を使用して設定することが出来ます。よりよく理解するためには指標スタイルの例を勉強することをお勧めします。
カスタム指標に必要な全ての計算は、所定の OnCalculate() 関数に配置されなければなりません。OnCalculate() 関数呼び出しの短い形式を使用する場合、下記の様になります。
int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& price[]) |
すると rates_total 変数は、指標値計算のための入力パラメータとして渡されたprice[] 配列の要素の合計数を含みます。
prev_calculated パラメータは前の呼び出しでの OnCalculate() の実行の結果です。これは、指標値を計算するためのアルゴリズムの保存や整理を可能にします。例えば、現在の値 rates_total = 1000 でprev_calculated = 999、各指標バッファの 1 つの値の計算を行うので充分です。
price 入力配列のサイズに関する情報が利用出来ない場合は、それぞれの指標バッファの1000 個の値の計算を行うことが必要になります。OnCalculate() の最初の呼び出しで、prev_calculated = 0 です。price[] 配列が変わった場合 prev_calculated も 0 です。
begin パラメータは、計算のためのデータを含まない price 配列の初期値の数を示します。例えば、(初めの37の値が計算されていない)ACオシレーターの値を入力パラメータとして使用された場合、begin = 37 です。例として、単純な指標を見てみましょう。
#property indicator_chart_window
|
「ナビゲータ」ウィンドウからACオシレーター指標ーのウィンドウにドラッグして、計算が前の指標の値に基づいて行われることを示します。
結果として、OnCalculate() の最初の呼び出しで prev_calculated の値はゼロに等しく、以降の呼び出しでは (価格チャートでバーの数が増えるまで)rates_total 値に等しくなります。
begin パラメータの値は初期のバーの数と等しくなります。この指標の論理に従って、アクセラレータ指標の値は計算されていません。Accelerator.mq5 のカスタム指標のコードをみると、OnInit() 関数にて以下の行が見られます。
//--- インデックスが描画される最初のバーを設定する
|
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values) 関数を使用して、計算のために受け入れる必要のないカスタム指標のゼロ指標配列に架空の初期値を設定します(empty_first_values)。従って、下記のメカニズムがあります。
- 別のカスタム指標の計算に使用されるべきではない指標の初期値を設定する
- 別のカスタム指標を呼び出した時、計算の論理を通さずに無視される初期値についての情報を得る