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(
|
Referenciación según la fecha inicial y el número de elementos necesarios
bool matrix::CopyRates(
|
Referenciación según la fecha inicial y final del intervalo temporal requerido.
bool matrix::CopyRates(
|
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(
|
Referenciación según la fecha inicial y el número de elementos necesarios
bool vector::CopyRates(
|
Referenciación según la fecha inicial y final del intervalo temporal requerido.
bool vector::CopyRates(
|
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..
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:
//+------------------------------------------------------------------+
|
Ver también