ArrayCopySeries

2019/07/17 19:00
3

int ArrayCopySeries(double &array[], int series_index, string symbol=NULL, int timeframe=0)

直列配列をコピーし、コピーした要素の数を返す。

データ配列の実メモリ割り当てはせず、何もコピーされない。
このような配列へのアクセスはリダイレクトされる。
カスタムインジケータにおけるインデックス配列として代入された配列は除く。
この場合、データは実コピーされる。

もし今とは異なる通貨名や時間枠のデータが他のチャートからコピーされれば、必要データが不足する可能性がある。
この時ERR_HISTORY_WILL_UPDATEDエラー(4066 - 要求されたデータが未更新)が最後のエラー値になった場合、ある一定の時間を置いた後で、再コピーをする必要がある。

Notes:もしseries_indexがMODE_TIMEならば、関数へ渡される配列はdetetime型でなければならない。

Parameters:
array[] - double型2次元配列のコピー先への参照
series_index - 直列アレイ識別子。これらは直列データ識別子のどれかの値をとる。
symbol - シンボル名 (通貨ペア名)
timeframe - 時間枠。これらは時間枠の値のどれかをとる
Sample:
datetime daytimes[];
int shift=10,dayshift,error;
//---- the Time[] array was sroted in the descending order
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
error=GetLastError();
if(error==4066)
{
//---- make two more attempts to read
for(int i=0;i<2; i++)
{
Sleep(5000);
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
//---- check the current daily bar time
datetime last_day=daytimes[0];
if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day)
&& Day()==TimeDay(last_day)) break;
}
}
if(Time[shift]>=daytimes[0]) dayshift=0;
else
{
dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
if(Period()< PERIOD_D1) dayshift++;
}
Print(TimeToStr(Time[shift])," corresponds to “,dayshift,” day bar opened at ",
TimeToStr(daytimes[dayshift]));

コメント