- Símbolos y marcos temporales
- Aspectos técnicos de la organización y el almacenamiento de series temporales
- Obtención de características de arrays de precios
- Número de barras disponibles (Bars/iBars)
- Índice de la barra de búsqueda por tiempo (iBarShift)
- Visión general de las funciones Copy para obtener arrays de comillas
- Obtener cotizaciones como un array de estructuras MqlRates
- Solicitud independiente de arrays de precios, volúmenes, diferenciales, tiempo
- Lectura de precio, volumen, diferencial y hora por índice de barras
- Encontrar los valores máximo y mínimo de una serie temporal
- Trabajar con arrays de ticks reales en estructuras MqlTick
Series temporales
Las series temporales son arrays de datos en los que los índices de los elementos corresponden a muestras temporales ordenadas. Debido a las especificidades de la aplicación del terminal, casi toda la información que necesita un operador de trading se proporciona en forma de series temporales. Se trata, en particular, de arrays de cotizaciones, ticks, lecturas de indicadores técnicos, etc. La gran mayoría de los programas MQL también trabajan con estos datos, por lo que se les ha asignado un grupo de funciones en la API de MQL5 que estudiaremos en esta sección.
La forma de acceder a los arrays en MQL5 permite a los desarrolladores establecer una de las dos direcciones de indexación:
- Normal (hacia delante): la numeración de los elementos va desde el principio de la matriz hasta el final (de los recuentos antiguos a los nuevos)
- Inversa (series temporales): la numeración va del final del array al principio (de los recuentos nuevos a los antiguos)
Ya hemos tratado este tema en la sección Dirección de indexación de arrays como en las series temporales.
El cambio del modo de indexación se realiza mediante la función ArraySetAsSeries y no afecta a la disposición física del array en la memoria. Sólo cambia la forma de acceder a los elementos por número: en la indexación normal obtenemos el i-ésimo elemento como array[i], mientras que, en el modo de series temporales, la fórmula equivalente es array[N - i - 1], donde N es el tamaño del array (se llama «equivalente» porque el desarrollador de la aplicación no necesita hacer ese recálculo en todas partes, ya que lo hace automáticamente el terminal si se establece el modo de indexación de series temporales para el array). Esto se ilustra en la siguiente tabla (para un array de caracteres de 10 elementos).
Elementos del array |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
Índice regular |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Índice como en series temporales |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Recordemos que la indexación de arrays comienza siempre desde cero.
Cuando se trata de arrays de cotizaciones y otros datos actualizados constantemente, los nuevos elementos se añaden físicamente al final del array. Sin embargo, desde el punto de vista del trading, hay que tener en cuenta los datos más recientes y tomarlos como punto de partida al analizar la historia. Por eso es conveniente tener siempre la barra actual (la última) bajo el índice 0, y contar las anteriores desde ella hacia el pasado. Así, obtenemos la indexación de series temporales.
Por defecto, los arrays se indexan de izquierda a derecha. Si imaginamos que dicho array se muestra en un gráfico estándar de MetaTrader 5, entonces puramente visual, el elemento con índice 0 estará en la posición del extremo izquierdo, y el último, en la extrema derecha. En las series temporales con indexación inversa, el elemento 0º corresponde a la posición más a la derecha, y el último elemento corresponde a la posición más a la izquierda. Dado que las series temporales almacenan el historial de los datos de precios de los instrumentos financieros en relación con el tiempo, los datos más recientes de las mismas están siempre a la derecha de los antiguos.
El elemento con el índice cero en el array de series temporales contiene información sobre la última cotización del símbolo. La barra cero suele estar incompleta mientras sigue formándose.
Otra característica de una serie temporal de cotizaciones es su periodo, es decir, el intervalo de tiempo entre lecturas adyacentes. Este periodo también se denomina «marco temporal» y puede reformularse con mayor precisión. El marco temporal es un periodo de tiempo durante el cual se forma una barra de cotizaciones, y su inicio y final están alineados en tiempo absoluto con el mismo paso. Por ejemplo, en el marco temporal de «1 hora» (H1), las barras comienzan estrictamente a los 0 minutos de cada hora del día. El comienzo de cada uno de estos periodos se incluye en la barra actual, y el final pertenece a la barra siguiente.
En el capítulo Símbolos y marcos temporales se proporciona una lista completa de los marcos temporales estándar.
En el marco del concepto de series temporales, por regla general, los búferes de indicadores técnicos también funcionan, pero estudiaremos sus características más adelante.
Si es necesario, en cualquier programa MQL puede solicitar los valores de las series temporales para cualquier símbolo y marco temporal, así como los valores de los indicadores calculados para cualquier símbolo y marco temporal. Estos datos se obtienen utilizando las funciones Copy, entre las que hay varios arrays de lectura de precios de distintos tipos por separado (por ejemplo, Open, High, Low, Close) o arrays de estructuras MqlRates que contienen todas las características de cada barra.
Barras y ticks
Además de barras con cotizaciones, MetaTrader 5 proporciona a los usuarios y programas MQL la capacidad de analizar los ticks, que son cambios elementales en el precio, sobre la base de los cuales se construyen las barras. Cada tick contiene la hora con precisión de milisegundos, varios tipos de precios (Bid, Ask, Last) y banderas que describen la esencia de los cambios, así como el volumen de negociación de la transacción. Estudiaremos la estructura MqlTick correspondiente un poco más adelante, en el capítulo Trabajar con arrays de ticks reales.
Dependiendo del tipo de instrumento de trading, las barras pueden construirse a partir de los precios de Bid o Last. En concreto, Last ofrece precios para instrumentos cotizados, que también difunden los precios de Profundidad de Mercado. Para los instrumentos no bursátiles, como Forex o CFD, se utiliza el precio Bid.
Los periodos en los que no hubo variaciones de precios no generan barras. Así es como se presenta el precio en MetaTrader 5. Por ejemplo, si el marco temporal es igual a 1 día (D1), entonces un par de barras para el fin de semana, por regla general, están ausentes, y el lunes sigue inmediatamente al viernes.
Aparece una barra de cotización si se ha producido al menos un tick en el intervalo de tiempo correspondiente. Al mismo tiempo, la hora de apertura de la barra siempre se alinea estrictamente con el borde del período, aunque el primer tick haya llegado más tarde (como suele ocurrir). Por ejemplo, la primera barra M1 del día puede formarse a las 00:05 si no hubo ticks durante 4 minutos después de medianoche, y el cambio de precio se produjo a las 00:05:15 (es decir, en el 15º segundo del quinto minuto). Así, un tick se incluye en una barra determinada en función de la siguiente relación de marcas de tiempo: Topen <=Ttick < Topen + P, donde Topen es la hora de apertura de la barra, Ttick es la hora de tick, Topen + P es la hora de apertura de la siguiente barra potencial después del periodo P (se llama barra «potencial» porque su presencia depende de otros ticks).