CopyRates

指定された量の指定された銘柄期間のMqlRates構造体の履歴シリーズを行列/ベクトルに取得します。要素は現在から過去までカウントダウンされます。つまり、開始位置が0の場合は現在足を意味します。

最も古い要素が行列/ベクトルの先頭に配置されるように、データがコピーされます。3つの関数オプションがあります。

初期位置と必要な要素数によるアクセス

bool  CopyRates(
  string          symbol,      // 銘柄名
  ENUM_TIMEFRAMES  period,      // 期間
  ulong           rates_mask, // 要求されたシリーズを指定するフラグの組み合わせ
  ulong            start,        // コピーを開始する最初のバーのインデックス
  ulong            count         // コピーする数
  );

初期日付と必要な要素数によるアクセス

bool  CopyRates(
  string          symbol,      // 銘柄名
  ENUM_TIMEFRAMES  period,      // 期間
  ulong           rates_mask, // 要求されたシリーズを指定するフラグの組み合わせ
  datetime        from,         // 開始日
  ulong            count         // コピーする数
  );

必要な時間の開始日と終了日によるアクセス

bool  CopyRates(
  string          symbol,      // 銘柄名
  ENUM_TIMEFRAMES  period,      // 期間
  ulong           rates_mask, // 要求されたシリーズを指定するフラグの組み合わせ
  datetime        from,         // 開始日
  datetime        to           // 終了日
  );

パラメータ

symbol

[in] 銘柄

period

[in] 期間

rates_mask

[in] 要求されたシリーズのタイプを指定するフラグのENUM_COPY_RATES列挙の組み合わせ。 ベクトルにコピーする場合、ENUM_COPY_RATES列挙から1つの値のみを指定できます。そうしないと、エラーが発生します。

start

[in] 最初に複製された要素のインデックス

count

[in] 複製された要素の数

from

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

to

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

戻り値

成功の場合はtrue、エラーの場合はfalse

注意事項

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

EAまたはスクリプトからデータを要求するとき、端末が適切なデータをローカルに持っていない場合、またはデータがローカル履歴から構築できるがまだ準備ができていない場合、サーバからのダウンロードが開始されます。 この関数は、タイムアウトが終わるまでに準備ができているデータの量を返します。ただし、履歴のダウンロードは続行されるため、次の同様の要求ではさらに多くのデータを返します。

開始日及び必要な要素の数によってデータが要求された場合、指定された日付以前のデータのみが戻されます。間隔が設定され秒まで数えられます。つまり、値(ボリューム、スプレッド、始値、高値、安値、終値、時刻)が返されたバーの開始日は常に指定された日付以前です。

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

例えば、現在の曜日が土曜日の場合、start_time=Last_Tuesdaystop_time=Last_Fridayが指定されると、関数は0を返します。週足は常に日曜日に開始され、指定された範囲内には週足が1つもないためです。

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

ENUM_COPY_RATES

ENUM_COPY_RATES列挙には、行列または配列に渡されるデータの型を指定するフラグが含まれています。フラグの組み合わせにより、1回の要求で履歴から複数のシリーズを取得できます。行列の行の順序は、ENUM_COPY_RATES列挙の値の順序に対応します。言い換えれば、行列内でHighデータを含む行は常にLowデータを含む行よりも高くなります。

ID

説明

COPY_RATES_OPEN

1

始値のシリーズ

COPY_RATES_HIGH

2

高値のシリーズ

COPY_RATES_LOW

4

低値のシリーズ

COPY_RATES_CLOSE

8

終値のシリーズ

COPY_RATES_TIME

16

時系列(バーの開く時間)

 

ベクトルと行列(vectordとmatrixf)で floatで時間を取得すると約100秒の損失が発生します。float精度は厳しく制限されており、1<<24より大きい整数はfloatで正確に表現できないためです。

COPY_RATES_VOLUME_TICK

32

ティック数量

COPY_RATES_VOLUME_REAL

64

取引高

COPY_RATES_SPREAD

128

スプレッド

組み合わせ

 

 

COPY_RATES_OHLC

15

始値、高値、安値、終値のシリーズ

COPY_RATES_OHLCT

31

始値、高値、安値、終値、時間のシリーズ

データ配置

 

 

COPY_RATES_VERTICAL

32768

受信した系列値は行列内で垂直に配置されます。最も古いデータが行列の最初の行に配置され、最新のデータが最後の行に配置されます。

 

デフォルトのコピーでは、系列が横軸に沿って行列に追加されます。

 

このフラグは、行列にコピーする場合にのみ適用されます。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
{
//--- クォートを行列に取得する
matrix matrix_rates;
if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10))
  Print("matrix rates: \n", matrix_rates);
else
  Print("matrix_rates.CopyRates failed. Error ", GetLastError());
//--- 確認する
MqlRates mql_rates[];
if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0)
  {
  Print("mql_rates array:");
  ArrayPrint(mql_rates);
  }
else
  Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError());
//--- クォートをベクトルに取得する = 無効な呼び出し
vector vector_rates;
if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15))
  Print("vector_rates COPY_RATES_OHLC: \n", vector_rates);
else
  Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError());
//--- 終値をベクトルに取得する
if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15))
  Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates);
else
  Print("vector_rates.CopyRates failed. Error ", GetLastError());
};
/*
  matrix rates:
  [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
   [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
   [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
   [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
   [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
  mql_rates array:
                   [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
  [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641         4463       0             0
  [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588         4519       0             0
  [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441         3060       0             0
  [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464         3867       0             0
  [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594         5280       0             0
  [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697         7227       0             0
  [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130       0             0
  [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581         7012       0             0
  [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528         6166       0             0
  [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259         6950       0             0
  vector_rates.CopyRates COPY_RATES_OHLC failed. Error 4003
  vector_rates COPY_RATES_CLOSE:
  [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

参照

時系列と指標へのアクセスCopyRates