单独请求价格、交易量、点差、时间的数组

可以将特定字段(价格、成交量、点差或时间)的数据读取到单独的数组中,而不必将所有编码特征作为MqlRates数组进行查询。为此,定义了几个函数,其操作原理基于 获取报价数组的 Copy 函数概述章节中讨论的通用原则。

下图汇总了所有函数原型的描述。

Copy 函数原型图

Copy 函数原型图

SeriesRates.mq5脚本使用复制 OHLC 价格的函数,将它们与调用 CopyRates 的结果进行比较。

void OnStart()
{
   const int N = 10;
   MqlRates rates[];
   
   // request and display all information about N bars from the MqlRates array
   PRTF(CopyRates("EURUSD"PERIOD_D1D'2021.10.01', Nrates));
   ArrayPrint(rates);
   
   // now request OHLC prices separately
   double open[], high[], low[], close[];
   PRTF(CopyOpen("EURUSD"PERIOD_D1D'2021.10.01', Nopen));
   PRTF(CopyHigh("EURUSD"PERIOD_D1D'2021.10.01', Nhigh));
   PRTF(CopyLow("EURUSD"PERIOD_D1D'2021.10.01', Nlow));
   PRTF(CopyClose("EURUSD"PERIOD_D1D'2021.10.01', Nclose));
   
   // compare prices obtained by different methods
   for(int i = 0i < N; ++i)
   {
      if(rates[i].open != open[i]
      || rates[i].high != high[i]
      || rates[i].low != low[i]
      || rates[i].close != close[i])
      {
         // we shouldn't be here
         Print("Data mismatch at "i);
         return;
      }
   }
   
   Print("Copied OHLC arrays match MqlRates array"); // success: there is a match
}

运行脚本后,我们将在日志中获得以下条目。

CopyRates(EURUSD,PERIOD_D1,D'2021.10.01',N,rates)=10 / ok

[time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]

[0] 2021.09.20 00:00:00 1.17272 1.17363 1.17004 1.17257 58444 0 0

[1] 2021.09.21 00:00:00 1.17248 1.17486 1.17149 1.17252 58514 0 0

[2] 2021.09.22 00:00:00 1.17240 1.17555 1.16843 1.16866 72571 0 0

[3] 2021.09.23 00:00:00 1.16860 1.17501 1.16835 1.17381 68536 0 0

[4] 2021.09.24 00:00:00 1.17379 1.17476 1.17007 1.17206 51401 0 0

[5] 2021.09.27 00:00:00 1.17255 1.17255 1.16848 1.16952 57807 0 0

[6] 2021.09.28 00:00:00 1.16940 1.17032 1.16682 1.16826 64793 0 0

[7] 2021.09.29 00:00:00 1.16825 1.16901 1.15894 1.15969 68964 0 0

[8] 2021.09.30 00:00:00 1.15963 1.16097 1.15626 1.15769 68517 0 0

[9] 2021.10.01 00:00:00 1.15740 1.16075 1.15630 1.15927 66777 0 0

CopyOpen(EURUSD,PERIOD_D1,D'2021.10.01',N,open)=10 / ok

CopyHigh(EURUSD,PERIOD_D1,D'2021.10.01',N,high)=10 / ok

CopyLow(EURUSD,PERIOD_D1,D'2021.10.01',N,low)=10 / ok

CopyClose(EURUSD,PERIOD_D1,D'2021.10.01',N,close)=10 / ok

复制的 OHLC 数组与 MqlRates 数组相匹配

请记住,tick_volume字段中的分时报价成交量是某个周期的分时报价的简单计数器。对于非交易所金融工具(以及本例中的 EURUSD),real_volume字段中的交易所成交量为零。

获取报价数组的 Copy 函数概述章节的 SeriesCopy.mq5脚本中,提供了使用 CopyTime 函数的另一个示例。