ArrayCopySeries
ArrayCopySeries
将系列数组复制到另一个数组,并返回复制元素的个数。
int ArrayCopySeries(
void& array[], // destination array
int series_index, // series array identifier
string symbol=NULL, // symbol
int timeframe=0 // timeframe
);参数
- array[]
[out] 目标双精度类型数组。
- series_index
[in] 系列数组标识符。可以是系列数组标识符枚举值中的任何一个。
- symbol
[in] 符号名称。
- timeframe
[in] 时间框架。可以是时间框架枚举值中的任何一个。0表示当前图表时间框架。
返回值
该函数返回复制元素的个数,如果失败则返回-1。
如果数据是从具有不同符号和/或时间框架的其他图表复制的,则可能会缺少必要的数据。在这种情况下,错误ERR_HISTORY_WILL_UPDATED(4066 - 请求的历史数据正在更新中)将放入last_error变量中,并且需要在一定时间内重试复制。
注意
数据数组没有实际的内存分配,也没有复制任何内容。当访问此类数组时,访问会被重定向。不包括那些在自定义指标中作为索引数组分配的数组。在这种情况下,数据确实被复制了。
如果series_index为MODE_TIME,传递给函数的数组必须是datetime类型。
示例:
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]));最后更新于