Programación en MQL5 (IV)

Trading Meetings  » Tutoriales »  Programación en MQL5 (IV)
Programación en MQL5 - 4. Temas Intermedios
0 Comments 20:26

 
 

En este capítulo, aprenderemos a trabajar con arrays y matrices multidimensionales en MQL5. Estas estructuras de datos son esenciales para almacenar y manipular grandes volúmenes de información, como datos históricos de precios o resultados de cálculos técnicos. También exploraremos ejemplos prácticos de su uso en análisis técnico.


Un array es una colección de elementos del mismo tipo que se almacenan en memoria de forma contigua. En MQL5, los arrays pueden ser unidimensionales o multidimensionales y se utilizan comúnmente para almacenar datos históricos, como precios de cierre, indicadores o resultados de cálculos.

Ejemplo Práctico: Almacenamiento de Precios Históricos


Explicación del Código

  1. Declaración de Arrays:
    • double closePrices[]; declara un array dinámico para almacenar precios de cierre.
    • Los arrays dinámicos no tienen un tamaño fijo inicial y pueden redimensionarse según sea necesario.
  2. Redimensionamiento del Array:
    • La función ArrayResize() ajusta el tamaño del array para almacenar los últimos 100 precios de cierre.
  3. Llenado del Array:
    • Usamos un bucle for para llenar el array con los precios de cierre de las últimas 100 barras.
  4. Acceso a los Elementos:
    • Los elementos del array se acceden mediante índices (por ejemplo, closePrices[i]).

Una matriz multidimensional es un array que tiene más de una dimensión. Por ejemplo, una matriz bidimensional puede representar una tabla con filas y columnas. En MQL5, estas matrices son útiles para realizar cálculos matriciales o almacenar datos estructurados.

Ejemplo Práctico: Cálculo de Medias Móviles en una Matriz Bidimensional


Explicación del Código

  1. Declaración de Matrices:
    • double movingAverages[3][10]; declara una matriz bidimensional con 3 filas (para 3 períodos) y 10 columnas (para 10 valores por período).
  2. Cálculo de Medias Móviles:
    • Usamos un bucle anidado para calcular las medias móviles simples (iMA) para cada período y almacenar los resultados en la matriz.
  3. Visualización de Resultados:
    • Los resultados se imprimen en la ventana de resultados, mostrando las medias móviles para cada período.

Los arrays y matrices son herramientas poderosas para implementar cálculos técnicos complejos. A continuación, mostramos un ejemplo práctico de cómo usar arrays para detectar cruces de medias móviles.

Ejemplo Práctico: Detección de Cruces de Medias Móviles


Explicación del Código

  1. Almacenamiento de Datos:
    • Los arrays fastMA y slowMA almacenan los valores de las medias móviles rápidas y lentas para las últimas 100 barras.
  2. Detección de Cruces:
    • Un bucle compara los valores de las medias móviles en barras consecutivas para detectar cruces alcistas o bajistas.
  3. Resultados:
    • Los cruces se imprimen en la ventana de resultados, lo que permite identificar puntos de entrada o salida.

Interactividad: Ejercicios Prácticos

Ver solución:

A continuación, te proporciono el código modificado para incluir los precios de apertura, máximo y mínimo , además de los precios de cierre. He añadido comentarios detallados para explicar cada cambio realizado.


Explicación del Código

  1. Declaración de Arrays:
    • Se declaran cuatro arrays dinámicos (openPrices, highPrices, lowPrices, closePrices) para almacenar los precios de apertura, máximo, mínimo y cierre, respectivamente.
    • Los arrays son dinámicos, lo que significa que su tamaño puede ajustarse según sea necesario.
  2. Redimensionamiento de Arrays:
    • La función ArrayResize() se utiliza para ajustar el tamaño de cada array a 100 elementos, correspondientes a las últimas 100 barras.
  3. Llenado de Arrays:
    • Un bucle for itera sobre las últimas 100 barras y almacena los valores de apertura (Open), máximo (High), mínimo (Low) y cierre (Close) en sus respectivos arrays.
  4. Visualización de Datos:
    • Los datos almacenados en los arrays se imprimen en la ventana de resultados usando la función Print().
    • Cada barra muestra sus precios de apertura, máximo, mínimo y cierre en un formato claro y legible.

Resultado Esperado

Cuando ejecutes este código, verás una salida similar a la siguiente en la ventana de resultados:


Interpretación del Cambio

Este ejercicio amplía el código original para incluir no solo los precios de cierre, sino también los precios de apertura, máximo y mínimo. Esto es útil porque:

  • Proporciona una visión completa de los datos históricos de cada barra.
  • Facilita el análisis técnico avanzado, como el cálculo de patrones de velas o indicadores basados en rangos de precios.
  • Permite implementar estrategias que dependan de múltiples componentes del precio, como el rango (diferencia entre el máximo y el mínimo).

Casos Prácticos

Este código puede ser utilizado para:

  • Analizar patrones de velas japonesas (por ejemplo, doji, martillo).
  • Calcular indicadores técnicos como el ATR (Average True Range) o el rango diario.
  • Implementar estrategias basadas en rupturas de máximos/mínimos o patrones de reversión.

¡Espero que este ejemplo te ayude a entender cómo trabajar con múltiples arrays en MQL5!


Ver solución:

Explicación del Código

  1. Declaración de la Matriz Tridimensional:
    • double data[3][4][10]; declara una matriz tridimensional:
      • La primera dimensión (3) representa los símbolos.
      • La segunda dimensión (4) representa las temporalidades.
      • La tercera dimensión (10) representa los últimos 10 valores de cierre para cada combinación de símbolo y temporalidad.
  2. Definición de Símbolos y Temporalidades:
    • Los símbolos se almacenan en un array (symbols[]) con tres elementos: "EURUSD", "GBPUSD" y "USDJPY".
    • Las temporalidades se almacenan en un array (timeframes[]) con cuatro elementos: PERIOD_M15, PERIOD_H1, PERIOD_H4 y PERIOD_D1.
  3. Llenado de la Matriz:
    • Un bucle anidado itera sobre los símbolos, temporalidades y barras para llenar la matriz con los precios de cierre (iClose).
    • La función iClose() obtiene el precio de cierre para una barra específica en una temporalidad y símbolo dados.
  4. Visualización de Datos:
    • Los datos almacenados en la matriz se imprimen en la ventana de resultados usando la función Print().
    • La salida incluye el símbolo, la temporalidad y los precios de cierre para las últimas 10 barras.

Resultado Esperado

Cuando ejecutes este código, verás una salida similar a la siguiente en la ventana de resultados:


Interpretación del Cambio

Este ejercicio implementa una matriz tridimensional para almacenar datos de múltiples símbolos y temporalidades. Esto es útil porque:

  • Permite organizar y acceder eficientemente a grandes volúmenes de datos estructurados.
  • Facilita el análisis técnico multitemporal y multisímbolo, lo que es esencial para estrategias avanzadas como arbitraje o correlaciones entre pares de divisas.
  • Proporciona una base sólida para desarrollar EAs que operen simultáneamente en múltiples activos y marcos temporales.

Casos Prácticos

Este código puede ser utilizado para:

  • Analizar correlaciones entre diferentes símbolos en distintas temporalidades.
  • Implementar estrategias de trading multitemporal, como cruces de medias móviles en múltiples marcos temporales.
  • Desarrollar sistemas de arbitraje que comparen precios entre símbolos relacionados.

¡Espero que este ejemplo te ayude a entender cómo trabajar con matrices tridimensionales en MQL5!


Ver solución:

Explicación del Código

  1. Parámetros de Entrada:
    • RSIPeriod: Define el período del RSI (por defecto, 14).
    • LookbackBars: Define el número de barras a analizar para detectar divergencias (por defecto, 5).
  2. Declaración de Arrays:
    • priceHighs[]: Almacena los precios máximos de las últimas barras.
    • priceLows[]: Almacena los precios mínimos de las últimas barras.
    • rsiValues[]: Almacena los valores del RSI para las últimas barras.
  3. Redimensionamiento y Llenado de Arrays:
    • La función ArrayResize() ajusta el tamaño de los arrays al número de barras especificado (LookbackBars).
    • Un bucle for llena los arrays con los precios máximos, mínimos y valores del RSI usando las funciones High[], Low[] y iRSI().
  4. Detección de Divergencias:
    • Divergencia Alcista: Ocurre cuando el precio forma un mínimo más bajo (priceLows[0] < priceLows[1]) mientras el RSI forma un mínimo más alto (rsiValues[0] > rsiValues[1]).
    • Divergencia Bajista: Ocurre cuando el precio forma un máximo más alto (priceHighs[0] > priceHighs[1]) mientras el RSI forma un máximo más bajo (rsiValues[0] < rsiValues[1]).
  5. Alertas:
    • Si se detecta una divergencia, se imprime un mensaje en la ventana de resultados y se muestra una alerta visual usando la función Alert().

Resultado Esperado

Cuando ejecutes este EA, verás lo siguiente:

  1. Si se detecta una divergencia alcista :
  1. Si se detecta una divergencia bajista :

Además, aparecerá una ventana emergente con la alerta correspondiente.


Interpretación del Cambio

Este ejercicio implementa un sistema para detectar divergencias entre el precio y el RSI utilizando arrays. Esto es útil porque:

  • Las divergencias son señales técnicas poderosas que pueden indicar posibles cambios en la tendencia.
  • El uso de arrays permite organizar y comparar datos históricos de manera eficiente.
  • Las alertas visuales facilitan la toma de decisiones en tiempo real.

Casos Prácticos

Este EA puede ser utilizado para:

  • Identificar oportunidades de compra o venta basadas en divergencias alcistas o bajistas.
  • Integrar señales de divergencia en estrategias automatizadas.
  • Monitorear múltiples activos y temporalidades para detectar divergencias en diferentes contextos.

¡Espero que este ejemplo te ayude a entender cómo usar arrays para detectar divergencias en MQL5!


En el próximo capítulo, exploraremos cómo integrar APIs externas para ampliar las capacidades de tus EAs.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta