Bars

指定された銘柄と期間の履歴内のバーの数を返します。この関数の呼び出し方は 2 つあります。

履歴内のバーを全てリクエスト

int  Bars(
  string          symbol_name,    // 銘柄名
  ENUM_TIMEFRAMES  timeframe       // 期間
  );

選択された時間間隔内の履歴内のバーをリクエスト

int  Bars(
  string          symbol_name,    // 銘柄名
  ENUM_TIMEFRAMES  timeframe,      // 期間
  datetime        start_time,      // 開始日付と時刻
  datetime        stop_time        // 終了日付と時刻
  );

パラメータ

symbol_name

[in]  銘柄名

timeframe

[in]  期間

start_time

[in]  最初の要素に対応するバーの時刻

stop_time

[in]  最後の要素に対応するバーの時刻

戻り値

start_time 及び stop_time パラメータが定義された場合、指定された時間間隔でのバーの数。その他の場合、全部のバーの数。

注意事項

Bars() 関数の呼び出しまでに指定されたパラメータで時系列のデータが端末に形成されていない場合、または時系列のデータが関数呼び出しまでに取引サーバと同期化されていない場合、この関数はゼロ値を返します。

指定した範囲の日付でバーの数をリクエストする際は、その範囲に入る開始時刻のバーのみが含まれます。例えば、現在の曜日が土曜日で、start_time=最後の_火曜日とstop_time=最後の_金曜日と指定してバーの週あたりの数をリクエストすると関数は0を返します。これは週の時間軸の開始時刻が常に日曜日になっていて、1つの週足バーもこの指定した範囲に入らない為です。

履歴の中の全てのバーの数をリクエストする例:

  int bars=Bars(_Symbol,_Period);
  if(bars>0)
    {
    Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars);
    }
  else // バーが存在しない
    {
    //--- シンボル上のデータがサーバ上のデータと同期されていない可能性がある
    bool synchronized=false;
    //--- ループカウンタ
    int attempts=0;
    // 同期を待つ試みを 5 回
    while(attempts<5)
       {
        if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
          {
          //--- 同期完了。終了する。
           synchronized=true;
          break;
          }
        //--- カウンタを増加する
        attempts++;
        //--- 次の反復まで 10 ミリ秒待つ
        Sleep(10);
       }
    //--- 同期化の後ループを終了する
    if(synchronized)
       {
        Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars);
        Print("The first date in the terminal history for the symbol-period at the moment = ",
              (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
        Print("The first date in the history for the symbol on the server = ",
              (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
       }
    //--- データの同期が実現しなかった
    else
       {
        Print("Failed to get number of bars for ",_Symbol);
       }
    }

指定したインターバルでのバーの数をリクエストする例:

  int n;
  datetime date1 = D'2016.09.02 23:55'; // 金曜日
  datetime date2 = D'2016.09.05 00:00'; // 月曜日
  datetime date3 = D'2016.09.08 00:00'; // 木曜日
  //---
  n=Bars(_Symbol,PERIOD_H1,D'2016.09.02 02:05',D'2016.09.02 10:55');
  Print("バーの数: ",n); // 『バーの数:8』を出力、計算されたものには2時間バーが含まれ、11時間バーは含まれません
  n=Bars(_Symbol,PERIOD_D1,date1,date2);
  Print("バーの数: ",n); // 『バーの数:1』を出力、範囲内に一つの日足バー(月曜日のもの)の開始時刻のみ入っている為
  n=Bars(_Symbol,PERIOD_W1,date2,date3);
  Print("バーの数: ",n); // 『バーの数:0』を出力、範囲内に一つの日足バーの開始時刻も入らなかった為

参照

イベント処理の関数