CopyRates

Obtiene las series históricas de la estructura MqlRates en una matriz o vector del símbolo-periodo especificado en la cantidad especificada. Los elementos se contarán partiendo de la posición inicial desde el presente hacia el pasado, es decir, si la posición inicial es igual a 0, esto indicará la barra actual.

En este caso, además, los datos se copiarán de forma que el elemento más antiguo se sitúe al principio de la matriz/vector. Existen 3 variantes del método.

Referenciación según la posición inicial y el número de elementos necesarios

bool  matrix::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   ulong            start,        // número de la barra inicial desde la que comenzaremos a copiar 
   ulong            count         // cuántas copiaremos
   );

Referenciación según la fecha inicial y el número de elementos necesarios

bool  matrix::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   datetime         from,         // desde qué fecha 
   ulong            count         // cuántas copiaremos
   );

Referenciación según la fecha inicial y final del intervalo temporal requerido.

bool  matrix::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   datetime         from,         // desde qué fecha 
   datetime         to            // hasta qué fecha
   );

Para los vectores, los métodos son iguales.

Referenciación según la posición inicial y el número de elementos necesarios

bool  vector::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   ulong            start,        // número de la barra inicial desde la que comenzaremos a copiar 
   ulong            count         // cuántas copiaremos
   );

Referenciación según la fecha inicial y el número de elementos necesarios

bool  vector::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   datetime         from,         // desde qué fecha 
   ulong            count         // cuántas copiaremos
   );

Referenciación según la fecha inicial y final del intervalo temporal requerido.

bool  vector::CopyRates(
   string           symbol,       // nombre del símbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinación de banderas para indicar las series solicitadas
   datetime         from,         // desde qué fecha 
   datetime         to            // hasta qué fecha
   );

Parámetros

symbol

[in]  Símbolo.

period

[in]  Periodo.

rates_mask

[in]  Combinación de banderas de la enumeración ENUM_COPY_RATES que indican el tipo de series solicitadas. Al copiar a un vector, podemos indicar solo un valor de la enumeración ENUM_COPY_RATES, de lo contrario, ocurrirá un error.

start

[in]  Número del primer elemento copiado.

count

[in]  Número de elementos copiados.

from

[in]  Hora de la barra correspondiente al primer elemento.

to

[in]  Hora de la barra correspondiente al último elemento.

Valor retornado

Retorna true en caso de éxito, o false en caso de error.

Observación

Si el intervalo de los datos solicitados se encuentra totalmente fuera de los datos en el servidor, la función retornará false. Si los datos solicitados se encuentran fuera de TERMINAL_MAXBARS (número máximo de barras en el gráfico), la función también retornará false.

Al solicitar los datos desde un experto o script, se inicializará la carga desde el servidor, si el terminal no dispone de estos datos a nivel local; o bien comenzará la construcción de la serie temporal necesaria, si los datos se pueden construir a partir de la historia local, pero aún no están preparados. La función retornará la cantidad de datos que estén preparados al momento de finalización del timeout, pero la carga de la historia continuará, y con la siguiente solicitud análoga, la función retornará ya más datos.

Al solicitar los datos según la fecha de inicio y el número de elementos necesarios, solo se retornarán los datos con una fecha inferior (anterior) o igual a la fecha especificada. El intervalo se establece y se considera con una precisión que abarca hasta el segundo más próximo. Es decir, la fecha de apertura de cualquier barra para la que se retorna un valor (volumen, spread, precio Open, High, Low, Close u hora de apertura), será siempre igual o inferior a la especificada.

Al solicitar los datos en el intervalo de fechas especificado, solo se retornarán los datos comprendidos en el intervalo solicitado, y el intervalo se especificará y considerará hasta el segundo más próximo. Esto significará que la hora de apertura de cualquier barra para la que se retorna un valor (volumen, spread, valor en el búfer de indicador, precio Open, High, Low, Close u hora de apertura), estará siempre dentro del intervalo solicitado.

Así, si el día de la semana actual es el sábado, al intentar copiar los datos en el marco temporal semanal con start_time=Last_Tuesday y stop_time=Last_Friday la función retornará 0, porque la hora de apertura del marco temporal semanal caerá siempre en domingo, pero ninguna barra semanal estará dentro del intervalo especificado.

Si deseamos obtener el valor correspondiente a la barra actual no finalizada, podremos utilizar la primera forma de llamada, especificando start_pos=0 y count=1..

ENUM_COPY_RATES

La enumeración ENUM_COPY_RATES contiene las banderas para especificar el tipo de datos que se transmitirán a la matriz o array. La combinación de banderas permite recuperar varias series de la historia en una sola solicitud.  El orden de las filas en la matriz se corresponderá con el orden de los valores en la enumeración ENUM_COPY_RATES, es decir, la fila con los datos High siempre estará por encima de la fila con los datos Low en la matriz.

Identificador

Valor

Descripción

COPY_RATES_OPEN

1

Serie de precios Open

COPY_RATES_HIGH

2

Serie de precios  High

COPY_RATES_LOW

4

Serie de precios  Low

COPY_RATES_CLOSE

8

Serie de precios  Close

COPY_RATES_TIME

16

Serie Time (hora de apertura de la barra)

 

La obtención de la hora en float de un vector o matriz (vectord y matrixf) provocará una pérdida de ~100 segundos, dado que la precisión de float está fuertemente limitada, y los números enteros superiores a 1<<24 no pueden representarse con exactitud en float.

COPY_RATES_VOLUME_TICK

32

Volúmenes de ticks

COPY_RATES_VOLUME_REAL

64

Volúmenes comerciales

COPY_RATES_SPREAD

128

Spread

Combinación

 

 

COPY_RATES_OHLC

15

Series Open, High, Low y Close

COPY_RATES_OHLCT

31

Series Open, High, Low, Close y Time

Ubicación de los datos

 

 

COPY_RATES_VERTICAL

32768

Las series se copian en la matriz a lo largo del eje vertical.Esto significa que los valores de la serie obtenidos en la matriz se ordenan verticalmente, es decir, los datos más antiguos están en la primera fila y los más recientes en la última fila de la matriz.

 

Por defecto, al copiar en la matriz, las series se añaden a lo largo del eje horizontal.

 

La bandera solo es relevante cuando se copia en una matriz.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- obtenemos las cotizaciones en la matriz
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("matrix_rates.CopyRates failed. Error "GetLastError());
//--- comprobación
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("mql_rates array:");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error "GetLastError());
//--- obtenemos las cotizaciones en el vector = llamada errónea
  vector vector_rates;
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLC115))
    Print("vector_rates COPY_RATES_OHLC: \n"vector_rates);
  else
    Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error "GetLastError());
//--- obtenemos los precios de cierre en un vector
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("vector_rates.CopyRates failed. Error "GetLastError());
 };
/*
   matrix rates:
   [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
    [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
    [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
    [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
   mql_rates array:
                    [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
   [02022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0
   [12022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0
   [22022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0
   [32022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0
   [42022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0
   [52022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0
   [62022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0
   [72022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0
   [82022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0
   [92022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0
   vector_rates.CopyRates COPY_RATES_OHLC failedError 4003
   vector_rates COPY_RATES_CLOSE:
   [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

Ver también

Acceso a las series temporales e indicadores, CopyRates