- 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
Acceso a las series temporales y a los datos de indicadores
Estas son las funciones para trabajar con las series temporales e indicadores. Una serie temporal se diferencia de una matriz usual en que la indexación de los elementos de una serie temporal se realiza del final de la matriz al principio (de los datos más recientes a los más antiguos). Se recomienda usar sólo los arrays dinámicos para copiar los valores de series temporales e indicadores, porque las funciones de copiado están diseñadas para asignar de una manera independiente el tamaño necesario de los arrays que reciben los valores.
Hay una importante excepción de esta regla: si necesitamos copiar las series temporales y valores de indicadores con mucha frecuencia, por ejemplo, con cada nueva llamada a OnTick() en los Asesores Expertos o con cada nueva invocación de OnCalculate() en los indicadores, entonces sería mejor usar los arrays distribuidos estáticamente porque las operaciones de asignación de memoria para las matrices dinámicas requieren su tiempo adicional y eso tendrá su efecto durante los procesos de prueba y optimización.
Cuando usamos las funciones de acceso a las series temporales y a los valores de indicadores, hay que tener en cuenta la dirección de la indexación. Esto está descrito con detalles en la sección llamada Dirección de indexación en los arrays y series temporales.
El acceso a los datos de los indicadores y series temporales se realiza independientemente del hecho de disposición de estos datos solicitados (llamado el acceso asíncrono). Es sumamente importante para la calculación de los indicadores personalizados, por eso si los datos solicitados no están disponibles, las funciones como Copy...() inmediatamente devuelven el error. Sin embargo, si accedemos desde los Asesores Expertos o scripts, se hacen varios intentos de obtener los datos con una pequeña pausa que se necesita para proporcionar el tiempo necesario para cargar las series temporales que faltan o para calcular los valores de indicadores.
En el apartado Organización de acceso a los datos se explican minuciosamente los detalles de la obtención, almacenamiento y solicitud de los datos de precios en el terminal de cliente MetaTrader 5.
Históricamente se ha constituido que el acceso a los datos en un array de precios se realiza desde el final de los datos. Físicamente los datos nuevos siempre se añaden al final del array, pero el índice de este array siempre es igual a cero. El índice 0 en una matriz-serie temporal significa los datos de la barra en curso, es decir, de la barra que corresponde al intervalo de tiempo no finalizado en dicho período de tiempo (timeframe).
Un período de tiempo (timeframe) es un plazo de tiempo durante el cual se forma una barra de precio. En total están predefinidos 21 períodos de tiempo estándares.
Función |
Acción |
---|---|
Devuelve la información sobre el estado de datos históricos |
|
Devuelve la cantidad de barras en el historial por símbolo y período correspondientes |
|
Devuelve la cantidad de datos calculados en el búfer de indicadores o -1 en caso del error (los datos aún no están calculados) |
|
Devuelve el manejador (handle) del indicador técnico especificado que ha sido creado a base del array de parámetros del tipo MqlParam |
|
Devuelve para el manejador especificado el número de los parámetros de entrada del indicador, así como los propios valores y el tipo de parámetros |
|
Elimina el manejador (handle) del indicador y libera la parte calculadora del indicador si nadie la está usando |
|
Recibe en el array los datos de un búfer especificado desde un indicador especificado |
|
Recibe en un array los datos históricos de la estructura Rates para un símbolo y período especificados |
|
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. |
|
Recibe en un array los datos históricos sobre el tiempo de apertura de barras para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre el precio de apertura de barras para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre el precio máximo de barras para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre el precio mínimo de barras para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre el precio de cierre de barras para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre volúmenes de tick para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre volúmenes comerciales para un símbolo y período especificados |
|
Recibe en un array los datos históricos sobre los spreads para un símbolo y período especificados |
|
Recibe en un array los ticks acumulados por el terminal durante la sesión actual |
|
Retorna el número de barras en la historia según el símbolo y el periodo correspondientes |
|
Busca la barra según la hora y fecha. La función retorna el índice de la barra en el que entra la hora y fecha especificada |
|
Retorna el valor del precio de cierre de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del precio mínimo de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el índice del mayor valor encontrado (desplazamiento relativo a la barra actual) del gráfico correspondiente |
|
Retorna el valor del precio mínimo de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el índice del menor valor encontrado (desplazamiento relativo a la barra actual) del gráfico correspondiente |
|
Retorna el valor del precio de apertura de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del tiempo de apertura de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del volumen de ticks de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del volumen real de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del volumen de ticks de la barra (indicada por el parámetro shift) del gráfico correspondiente |
|
Retorna el valor del spread de la barra (indicada por el parámetro shift) del gráfico correspondiente |
A pesar de que mediante la función ArraySetAsSeries() para los arrays se pueda establecer un modo de acceso a los elementos igual que para las series temporales, hay que recordar que físicamente los elementos de un array siempre se almacenan en el mismo orden, sólo se cambia la dirección de la indexación. Para demostrarlo vamos a realizar el siguiente ejemplo:
datetime TimeAsSeries[];
|
Por lo tanto se mostrará algo parecido a lo siguiente:
TimeCurrent = 2009.06.11 14:16:23
|
Como vemos, para el array TimeAsSeries con el aumento del índice el valor de tiempo con este índice se disminuye, es decir, nos movemos del presente al pasado. Para un array estándar ArrayNotSeries ocurre todo lo contrario; con el aumento del índice nos movemos del pasado al presente.
Véase también
ArrayIsDynamic, ArrayGetAsSeries, ArraySetAsSeries, ArrayIsSeries