インジケータライン開始位置の設定 SetIndexDrawBegin 関数

関数

カスタムインジケータ関数

SetIndexDrawBegin 関数

 この関数は、指定したインジケータラインの開始位置を設定します。

 インジケータラインの開始位置とは、チャートで表示されるバーを左側から数えた位置になります。各時間軸のバーの数はヒストリカルデータで取得されている数になります。

 全バー数は、Bars関数 または iBars関数で取得できます。インジケータなどで OnCalculate関数を使用している場合は、rates_total定数でも取得することができます。

データ型と構成・戻り値

void SetIndexDrawBegin(①, ②);

 戻り値は無し。

引数 [2]

 SetIndexDrawBegin関数は 2個の引数で構成されます。


引数名データ型単位初期値説明
Indexintインジケータラインのインデックス。0~7で設定。
shiftintインジケータラインを描画するバーの開始位置の番号。一番左側にあるバーが 1番目です。

使用例

SetIndexDrawBegin関数を使ったインジケータラインの描画

 SetIndexDrawBegin関数を使って、インジケータラインを直近のバーから10期間分の描画をします。

 次のコードはインジケータ用のコードです。インジケータ用コードの作成方法についてはこちらを参考にしてください。

コード

//SetIndexDrawBegin関数を使ったインジケータラインの描画
#property strict

#property indicator_chart_window       // チャートウィンドウに表示
#property indicator_buffers 1          // インジケータバッファの数

#property indicator_color1 clrYellow   // 線の色(インジケータライン)
#property indicator_width1 2           // 線の太さ
#property indicator_style1 STYLE_SOLID // 線の種類
#property indicator_type1 DRAW_LINE    // 線のタイプ

double Buf[];                          // インジケータバッファの配列

int OnInit() {

   SetIndexBuffer(0, Buf);             // 1次元動的配列をインジケータバッファへ関連付け

   Print("全バー数:", iBars(NULL, 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++) {
      Buf[i]=iMA(Symbol(), 0, 1, 0, MODE_SMA, PRICE_LOW, i); // 1期間安値移動平均
   }
   SetIndexDrawBegin(0, rates_total - 10);
   return(rates_total);
}

インジケータ用コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

タイトルとURLをコピーしました