Solicitud independiente de arrays de precios, volúmenes, diferenciales, hora

En lugar de consultar todas las características de codificación como un array MqlRates, puede leer sólo los datos de un campo concreto (precio, volumen, diferencial u hora) en un array independiente. Para ello se definen varias funciones que operan según los principios generales expuestos en la sección Visión general de las funciones Copy para obtener arrays de cotizaciones.

En el siguiente diagrama se combinan las descripciones de todos los prototipos.

Diagrama prototipo de las funciones Copy

Diagrama prototipo de las funciones Copy

El script SeriesRates.mq5 utiliza las funciones de copia de precios OHLC para compararlas con el resultado de la llamada a 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
}

Después de ejecutar el script, obtenemos las siguientes entradas en el registro:

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

[hora] [apertura] [máximo] [mínimo] [cierre] [volumen_tic] [diferencial] [volumen_real]

[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

Los arrays OHLC copiados coinciden con el array MqlRates.

Recordemos que el volumen de ticks del campo tick_volume es un simple contador de ticks para un periodo. El volumen de intercambio en el campo real_volume es igual a cero para los instrumentos sin intercambio (así como para EURUSD, en este caso).

Otro ejemplo de uso de la función CopyTime se proporciona en el script SeriesCopy.mq5 en la sección Visión general de las funciones Copy para obtener arrays de cotizaciones.