SetIndexEmptyValue 関数
この関数は、インジケータのデータを空の値に設定します。
インジケータのデータは空値になりますが、インジケータラインはプロットされます。SetIndexEmptyValue関数は、インジケータバッファのデータが無効であることを明示的に示すためのものであって、バッファのデータが表示されるかどうかを制御するためのものではないことを理解してください。バッファのデータを表示しないようにするためには、そのデータを設定しない (つまり、バッファに何も値をセットしない) 方法が一般的です。
データ型と構成・戻り値
void SetIndexEmptyValue(①, ②);
戻り値は無し。
引数 [2]
SetIndexEmptyValue関数は 2個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | index | int | - | - | インジケータラインのインデックス。0~7で設定。 |
② | value | double | - | - | 設定する空の値。 |
使用例
SetIndexEmptyValue関数によるデータの空値設定
SetIndexEmptyValue関数を使って、インジケータのデータを空の値に設定します。
次のコードはインジケータ用のコードです。インジケータ用コードの作成方法についてはこちらを参考にしてください。
コード
// SetIndexEmptyValue関数によるデータの空値設定
#property strict
#property indicator_chart_window // メインウィンドウに表示
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrYellow
double Buf1[];
int OnInit() {
IndicatorBuffers(1);
SetIndexBuffer(0, Buf1);
SetIndexEmptyValue(0, 0.0);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
for(int i=0; i<rates_total; i++) {
if(Close[i] > Open[i]) {
Buf1[i] = High[i];
}else {
Buf1[i] = EMPTY_VALUE;
}
}
return(rates_total);
}
インジケータ用コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
インジケータラインはプロットされますが、SetIndexEmptyValue関数で設定した値は、チャート上に表示されない「空の」値として扱われます。これは、データが利用可能でない場合、または特定の条件が満たされない場合に有効です。
たとえば、特定の算出が正しく行えない場合 (データが不足しているなど) や、ある特定の条件が満たされない場合 (例:終値が始値よりも低い場合など) に、SetIndexEmptyValue関数で設定した値をバッファにセットすることができます。この値はチャートには表示されませんが、プログラムの内部で「無効な」または「空の」データ値を表現するのに役立ちます。
ただし、MQL4では、通常はEMPTY_VALUEという特別な定数がこの目的のために使用されます。この定数は、プラットフォームがチャートに表示しない特別な値です。したがって、SetIndexEmptyValue関数はEMPTY_VALUE定数の代わりに別の「空の」値を設定するために使用されることが多いです。