ArraySetAsSeries

この関数は選択された 動的配列オブジェクトに AS_SERIES フラグを設定し 時系列のように索引付けをします。

bool  ArraySetAsSeries(
  const void&  array[],   // 参照配列
  bool        flag        // true はインデックスの順番が反対であることを示す
  );

パラメータ

array[]

[in][out]  設定される数値配列

flag

[in]  索引付けの方向

戻り値

成功の場合は true、それ以外の場合は false

注意事項

AS_SERIES フラグは 多次元配列または静的配列(サイズがコンパイル段階ですでに角括弧で定義される配列)には設定することが出来ません。時系列と通常の配列の違いは、時系列のインデックスが後ろから前へ(最新のデータから古いデータへ)つけられていることです。

例:バー番号を表示する指標

バー番号を表示する指標

 

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- プロット記数
#property indicator_label1 "Numeration"
#property indicator_type1   DRAW_LINE
#property indicator_color1 CLR_NONE
//--- 指標バッファ
double         NumerationBuffer[];
//+------------------------------------------------------------------+
//| カスタム指標を初期化する関数                                            |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- 指標バッファマッピング
  SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- バッファのインデックスを時系列式に付ける
  ArraySetAsSeries(NumerationBuffer,true);
//--- データウィンドウに表示する精度を設定する
  IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- 指標配列の名称の データウィンドウでの表示の仕方
  PlotIndexSetString(0,PLOT_LABEL,"Bar #");
//---
  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[])
 {
//---  現在のゼロバー開口部の時間を保存する
  static datetime currentBarTimeOpen=0;
//--- time[] 配列へのアクセスを元に返す - 時系列のようにアクセスする
  ArraySetAsSeries(time,true);
//--- ゼロバーの時間が格納されているものと異なる場合
  if(currentBarTimeOpen!=time[0])
    {
    //--- 現在からチャートの深さまで全てのバーを列挙する
    for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
     currentBarTimeOpen=time[0];
    }
//--- 次の呼び出しのために prev_calculated の値を返す
  return(rates_total);
 }

参照

時系列へのアクセスArrayGetAsSeries