跳至内容

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]));
最后更新于