CopyRates

指定された銘柄と期間の MqlRates 構造体の指定された量の履歴データを rates_array 配列に配置します。 要素は現在から過去の順に並べられ、インデックス0が現在足です。

CopyRates

リクエストされたデータ数が受け取り側の配列の長さよりも小さい(または大きい)と、この関数はリクエストされたデータが完全に収まるようにメモリを再割り当てしようとするので、複製するデータ量が不明の場合、受け取り側の配列に動的配列を使用することが推奨されます。

複製する必要があるデータの量がわかっている場合は、過剰なメモリの割り当てを防止するために静的に割り当てられたバッファを受け取り側の配列として使用するべきです。

受け取り側の配列が as_series=true であるか as_series=false であるかは関係ありません。データは、一番古い要素が配列に割り当てられた物理メモリの先頭に配置されるように複製されます。この関数の呼び出し方は 3 つあります。

1 番目の位置と必要な要素数によっての呼び出し

int  CopyRates(
  string          symbol_name,      // 銘柄名
  ENUM_TIMEFRAMES  timeframe,        // 期間
  int              start_pos,        // 開始位置
  int              count,            // 複製するデータ数
  MqlRates         rates_array[]      // 受け取り側の配列
  );

開始日と必要な要素数によっての呼び出し

int  CopyRates(
  string          symbol_name,      // 銘柄名
  ENUM_TIMEFRAMES  timeframe,        // 期間
  datetime        start_time,        // 開始日と時刻
  int              count,            // 複製するデータ数
  MqlRates         rates_array[]      // 受け取り側の配列
  );

必要な時間間隔の開始日と終了日によっての呼び出し

int  CopyRates(
  string          symbol_name,      // 銘柄名
  ENUM_TIMEFRAMES  timeframe,        // 期間
  datetime        start_time,        // 開始日と時刻
  datetime        stop_time,        // 終了日と時刻
  MqlRates         rates_array[]      // 受け取り側の配列
  );

パラメータ

symbol_name

[in]  銘柄名

timeframe

[in]  期間

start_time

[in]  複製される最後の要素のバーの時刻

start_pos

[in]  1 番目の複製される要素の開始位置

count

[in]  複製する日数

stop_time

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

rates_array[]

[out] MqlRates 型の配列

戻り値

複製された要素数(エラーの場合は -1 )

注意事項

リクエストされたデータがサーバ上で利用可能なデータに含まれていない場合、この関数は -1 を返します。TERMINAL_MAXBARS(チャートでのバーの最大数)以外のデータがリクエストされた場合も、この関数は -1を返します。

指標からデータがリクエストされて、リクエストされた時系列がまだ構築されていないかサーバからダウンロードされる必要がある場合、この関数はすぐに -1 を返し、ダウンロード/構築のプロセスが開始されます。

エキスパートアドバイザーやスクリプトからデータがリクエストされて、端末が必要なデータをローカルに持っていない場合サーバからのダウンロードが開始されます。データがローカル履歴から構築することが出来るがまだされていない場合、必要な時系列の構築が開始します。この関数は、タイムアウトの有効期限までに準備されるデータの量を返します。が、履歴ダウンロードは続き、次に似たようなリクエストがされた際に、もっとデータを返します。

開始日及び必要な要素の数によってデータがリクエストされる場合、指定された日付とそれ以前のデータのみが戻されます。これは、値(指標バッファのボリューム、スプレッド、値、始値、高値、安値、終値、開始時刻、決済時刻)が返されたバーの開始時刻は常に指定されたもの以下だということです。

日付の指定された範囲のデータを要求する場合、この区間からのデータのみが返されます。間隔が設定され秒まで数えられます。これは、値(指標バッファのボリューム、スプレッド、値、始値、高値、安値、終値、開始時刻、決済時刻)が返されたバーの開始時刻は常に指定された区間内にあるということです。

今日が土曜日で一週間の時間軸で start_time=Last_Tuesday 及び stop_time=Last_Friday を指定してデータを複製する試みに、この関数は 0 を返します。一週間の時間軸が開くのは常に日曜日ですが、一週間バーは指定された間隔にはまらないからです。

現在の未完成のバーに対応する値を返す必要がある場合 start_pos=0 及び count=1 を指定して1 番目の呼び出しの方法を用います。

例:

void OnStart()
 {
//---
  MqlRates rates[];
  ArraySetAsSeries(rates,true);
  int copied=CopyRates(Symbol(),0,0,100,rates);
  if(copied>0)
    {
    Print("Bars copied: "+copied);
    string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
    string out;
    int size=fmin(copied,10);
    for(int i=0;i<size;i++)
       {
        out=i+":"+TimeToString(rates[i].time);
        out=out+" "+StringFormat(format,
                                 rates[i].open,
                                 rates[i].high,
                                 rates[i].low,
                                 rates[i].close,
                                 rates[i].tick_volume);
        Print(out);
       }
    }
  else Print("Failed to get history data for the symbol ",Symbol());
 }

履歴データリクエストの詳細な例はオブジェクト結合の方法で参照出来ます。そのセクションで使用可能なスクリプトは iFractals 指標の最後の 1,000 足の値を取得して最後の各 10 の上向きと下向きのフラクタルをチャートに表示する方法を示しています。データ欠落時には、同様の技術が通常次のスタイルを使用して描画されている指標全てで使用することが出来ます。

 

参照

構造体とクラスTimeToStringStringFormat