- Dirección de indexación en los arrays y series temporales
- Organización de acceso a los datos
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
CopySeries
Obtiene en el conjunto especificado de arrays las series temporales sincronizadas de la estructura MqlRates para símbolo-periodo indicado en el número especificado. Los elementos se contarán partiendo de la posición inicial desde el presente hasta el pasado, es decir, si la posición inicial es igual a 0, esto indicará la barra actual.
Al copiar una cantidad de datos previamente desconocida, se recomienda usar como array receptor un array dinámico, ya que si hay más datos de los que puede contener el array, se intentará redistribuir el array de tal forma que los datos solicitados se ajusten por completo.
Si necesitamos copiar una cantidad conocida de datos, será mejor hacerlo en un búfer asignado estáticamente para evitar reasignaciones de memoria innecesarias.
No importa qué propiedad tenga el array receptor: as_series=true o as_series=false, los datos se copiarán de tal forma que el elemento de serie temporal más antiguo se copie al inicio de la memoria física asignada para el array.
int CopySeries(
|
Parámetros
symbol_name
[in] Símbolo.
timeframe
[in] Periodo.
start_pos
[in] Número del primer elemento copiado.
count
[in] Número de elementos copiados.
rates_mask
[in] Combinación de banderas de la enumeración ENUM_COPY_RATES .
array1, array2,...
[out] Array del tipo correspondiente para obtener la serie temporal de la estructura MqlRates. Orden de los arrays transmitidos a la función, debe corresponderse con el orden de los campos en la estructura MqlRates.
Valor retornado
Número de elementos copiados del array, o bien -1 en caso de error.
Observación
Si el intervalo de las series temporales se encuentra totalmente fuera de los datos en el servidor, la función retornará -1. 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á -1.
Al solicitar los datos desde el indicador, si las series temporales solicitadas aún no han sido construidas o deben ser cargadas desde el servidor, la función retornará de inmediato -1, pero, en este caso, el propio proceso de carga/construcción será iniciado.
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.
Diferencia entre CopySeries y CopyRates
La función CopySeries permite obtener de una sola vez solo las series temporales necesarias en diferentes arrays especificados; en este caso, además, todas estarán sincronizadas entre sí. Esto significa que todos los valores en los arrays resultantes en un índice N específico pertenecerán a la misma barra en el par Símbolo/Marco temporal especificado. En este caso, el programador no necesitará asegurarse de que todas las series temporales obtenidas estén sincronizadas según la hora de apertura de la barra.
A diferencia de CopyRates, que retorna el conjunto completo de series temporales como una matriz MqlRates, la función CopySeries permite al programador obtener solo las series temporales requeridas como arrays aparte; para ello, deberemos especificar una combinación de banderas para indicar el tipo de series temporales solicitadas. En este caso, el orden de los arrays transmitidos a la función deberá corresponderse con el orden de los campos en la estructura MqlRates:
struct MqlRates
|
De esta forma, si resulta necesario obtener los valores de las series temporales time, close y real_volume para las últimas 100 barras del Símbolo/Marco temporal actual, la llamada deberá ser la siguiente:
datetime time[];
|
En este caso, será importante el orde de los arrays "time, close, volume", este deberá corresponderse con el orden de los campos en la estructura MqlRates. Por otro lado, el orden de los valores en la máscara rates_mask carece de importancia, la máscara podría ser la siguiente:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
Ejemplo:
//--- input parameters
|
Ver también