下载MetaTrader 5

CopyRates

获得指定交易品种周期的特定MqlRates结构到rates_array数组中。元素复制数据的命令是从现在到过去,例如,从当前位置0开始表示当前字节。

 

CopyRates

当复制未知数量数据时,推荐使用动态数组为目标数组,因为如果要求数据账户少于(或多于)目标数值的长度,函数试图重新分配内存以完全适应要求数据。

如果知道所需复制的数据数量,为了阻止内存过多分配,最好使用 静态分配缓冲区

无论目标数组- as_series=true or as_series=false的属性是什么,数据就会复制,以至于最旧的数组元素会在记忆内存开始中放置。有3个变量函数可供调用。

调用第一位置和要求元素的数量

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]  复制的第一元素起始位置。

count

[in]  复制的数据点。

stop_time

[in] 字节时间,与最后一个复制元素相一致。

rates_array[]

[out] MqlRates 类型数组

返回值

返回复制数据数量或者错误时是-1。

注释

如果要求数据的全部间隔不在服务器的可用数据内,函数返回-1。如果外部数据TERMINAL_MAXBARS(图表中的最大字节量)是要求的,函数也会返回-1。

当向指标要求数据,如果要求的时序列没有建立或者需要从服务器上下载,函数很快会返回-1,但是下载/建立的过程将会开始。

当EA交易或脚本要求数据时,来自服务器的下载 会开始,如果终端本地没有这些数据,要求建立的时序列就会开始,如果数据可以从本地历史建立但尚未准备好。函数在超时期满时,会返回一定数量的准备好的数据,但是历史下载会继续,在下一个类似要求函数中会返回更多数据。

当通过起始日期和所需的元素数量请求数据时,只有日期小于(早于)或等于指定日期的数据。这意味着,任何柱的开盘时间的返回值(交易量,点差,指标缓冲区,开盘价,最高价,最低价,收盘价或开盘时间)始终少于或等于指定的值。

当在日期指定范围内要求数据,只有间隔中的数据才能返回,间隔建立并指到秒。这表示,任意字节的开始时间,返回的值(成交量,传播,指标缓冲区的值,开仓价,最高阶,最低价,收盘价或者开仓时间)是间隔要求范围内的。

因此,如果当前日期是星期六,想要复制指定的一周的时间表start_time=Last_Tuesdaystop_time=Last_Friday ,函数的返回值是0,因为每周开盘时间是星期日,但是一周字节不能分成特殊的间隔。

如果需要返回与当前未完成字节相类似的值,可以调用指定的 start_pos=0 和 count=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());
  }

请见对象绑定方法部分请求数据历史记录的详细示例。该部分可用的脚本显示了如何获得最近1000柱上指标iFractals 的值和如何显示过去10的上下分形图。类似的技术可以用于所有丢失数据的指标并通常使用以下类型绘制:

 

另见

结构和类时间到字符串字符串格式


更新: 2015.12.03