Programación en MQL5 (II)

Trading Meetings  » Tutoriales »  Programación en MQL5 (II)
Programación en MQL5 - 2. Fundamentos de programación
0 Comments 13:43

 
 

En este capítulo, exploraremos cómo acceder y manipular datos del mercado en MQL5. Estos datos son fundamentales para desarrollar estrategias de trading automatizadas, ya que permiten analizar precios históricos, obtener información sobre símbolos y trabajar con fechas y horas.


MQL5 proporciona funciones poderosas para obtener datos históricos de precios, como CopyRates y CopyTicks. Estas funciones te permiten recuperar barras o ticks de diferentes temporalidades y símbolos.

La función CopyRates se utiliza para obtener datos de barras históricas (como apertura, cierre, máximo y mínimo) para un símbolo específico y una temporalidad determinada.

Ejemplo práctico: Obtener las últimas 10 barras del EURUSD en la temporalidad H1.

Explicación del código:

  • Usamos CopyRates para obtener las últimas 10 barras del EURUSD en la temporalidad H1.
  • Los datos se almacenan en un array de tipo MqlRates, donde cada elemento contiene información sobre una barra (apertura, cierre, máximo, mínimo, volumen, etc.).
  • Iteramos sobre el array para mostrar los valores de cada barra.

La función CopyTicks se utiliza para obtener ticks históricos de un símbolo específico. Un tick representa un cambio en el precio de compra o venta.

Ejemplo práctico: Obtener los últimos 5 ticks del EURUSD.

Explicación del código:

  • Usamos CopyTicks para obtener los últimos 5 ticks del EURUSD.
  • Los datos se almacenan en un array de tipo MqlTick, donde cada elemento contiene información sobre un tick (tiempo, precio de compra, precio de venta, etc.).
  • Iteramos sobre el array para mostrar los valores de cada tick.

Las funciones SymbolInfo() y MarketInfo() permiten obtener información detallada sobre los símbolos disponibles en el mercado, como spreads, precios actuales y límites de lotes.

La función SymbolInfo() es la preferida en MQL5 para obtener información sobre símbolos, ya que reemplaza a MarketInfo() en versiones anteriores.

Ejemplo práctico: Obtener información sobre el EURUSD.

Explicación del código:

  • Usamos SymbolInfoDouble y SymbolInfoInteger para obtener información sobre el precio de compra (SYMBOL_ASK), precio de venta (SYMBOL_BID) y spread (SYMBOL_SPREAD) del EURUSD.
  • Mostramos los resultados en la ventana de resultados.

Aunque MarketInfo() sigue estando disponible en MQL5 por razones de compatibilidad con MQL4, se recomienda usar SymbolInfo() siempre que sea posible.


En MQL5, el manejo de tiempo y fechas es crucial para desarrollar estrategias basadas en horarios específicos o para registrar eventos.

La función TimeCurrent() devuelve la hora actual del servidor del broker.

Ejemplo práctico: Mostrar la hora actual del servidor.


La función TimeLocal() devuelve la hora actual del sistema local.

Ejemplo práctico: Comparar la hora del servidor con la hora local.


Interactividad: Ejercicios Prácticos

Ver solución:

Explicación del Código

  1. Definición de Variables:
    • symbol: Especificamos el símbolo GBPUSD como el instrumento financiero del que queremos obtener datos.
    • timeframe: Seleccionamos la temporalidad PERIOD_D1, que corresponde a gráficos diarios.
    • count: Indicamos que queremos obtener las últimas 20 barras.
  2. Uso de CopyRates:
    • La función CopyRates se utiliza para recuperar datos históricos de barras. Le pasamos el símbolo (GBPUSD), la temporalidad (D1), el desplazamiento (0 para empezar desde la última barra disponible) y el número de barras (20).
  3. Almacenamiento en un Array:
    • Los datos obtenidos se almacenan en un array de tipo MqlRates. Cada elemento del array representa una barra y contiene información como la hora, precio de apertura, máximo, mínimo, cierre y volumen.
  4. Iteración sobre el Array:
    • Utilizamos un bucle for para recorrer el array y mostrar los detalles de cada barra en la ventana de resultados. Para formatear las fechas, usamos TimeToString con la máscara TIME_DATE | TIME_SECONDS.
  5. Gestión de Errores:
    • Si CopyRates no puede obtener las barras solicitadas, mostramos un mensaje de error junto con el código de error correspondiente utilizando GetLastError().

Resultado Esperado

Cuando ejecutes este script, verás un mensaje similar al siguiente en la ventana de resultados:

Este tipo de información es útil para desarrollar estrategias basadas en análisis técnico o para realizar backtesting en diferentes temporalidades.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con datos históricos en MQL5!

Ver solución:

Explicación del Código

  1. Definición de Símbolos:
    • Creamos un array llamado symbols que contiene los nombres de los tres símbolos que queremos analizar: EURUSD, GBPJPY y AUDCAD.
  2. Iteración sobre los Símbolos:
    • Usamos un bucle for para recorrer cada símbolo en el array.
    • En cada iteración, asignamos el símbolo actual a la variable symbol.
  3. Verificación de Existencia del Símbolo:
    • Antes de intentar obtener información sobre el símbolo, verificamos si está disponible en el mercado usando la función SymbolExists.
  4. Obtención del Spread:
    • Si el símbolo existe, utilizamos SymbolInfoInteger con el parámetro SYMBOL_SPREAD para obtener el spread actual en pips.
  5. Mostrar el Spread:
    • Usamos la función Print para mostrar el spread actual del símbolo en la ventana de resultados.
  6. Gestión de Errores:
    • Si un símbolo no está disponible en el mercado, mostramos un mensaje informativo indicando que el símbolo no está presente.

Resultado Esperado

Cuando ejecutes este script, verás un mensaje similar al siguiente en la ventana de resultados:

Si alguno de los símbolos no está disponible en tu cuenta o en el terminal MetaTrader 5, verás un mensaje como este:


Caso Práctico

Este tipo de script puede ser útil para traders que desean monitorear los spreads de varios pares de divisas antes de ejecutar operaciones. Los spreads más bajos generalmente indican costos de trading más bajos, lo que puede ser importante para estrategias de scalping o day trading.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con múltiples símbolos y obtener información relevante en MQL5!

Ver solución:

Explicación del Código

  1. Definición del Rango de Horas:
    • Usamos dos variables enteras, horaInicio y horaFin, para definir el rango de horas durante el cual queremos verificar si el mercado está abierto (en este caso, de 8:00 a 17:00).
  2. Obtención de la Hora Actual:
    • La función TimeCurrent() obtiene la hora actual del servidor del broker.
    • La función Hour() extrae solo la hora del valor devuelto por TimeCurrent().
  3. Verificación del Rango de Horas:
    • Utilizamos una condición if para comprobar si la hora actual (horaActual) está dentro del rango especificado (horaInicio <= horaActual < horaFin).
    • Si la hora actual está dentro del rango, mostramos un mensaje indicando que el mercado está abierto.
    • Si no está dentro del rango, mostramos un mensaje indicando que el mercado está cerrado.
  4. Mostrar la Hora Actual:
    • Usamos la función TimeToString() con la máscara TIME_DATE | TIME_SECONDS para formatear y mostrar la hora actual en un formato legible.

Resultado Esperado

Cuando ejecutes este script, verás un mensaje similar al siguiente en la ventana de resultados:

  • Si la hora actual está dentro del rango (por ejemplo, 10:30):
  • Si la hora actual está fuera del rango (por ejemplo, 19:45):

Caso Práctico

Este tipo de script puede ser útil para traders que desean automatizar estrategias basadas en horarios específicos. Por ejemplo:

  • Evitar abrir posiciones fuera de las horas de alta liquidez.
  • Programar notificaciones cuando el mercado esté abierto o cerrado.
  • Limitar la ejecución de ciertas operaciones a horarios comerciales específicos.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con tiempos y fechas en MQL5!


En el próximo capítulo, profundizaremos en la gestión de posiciones y órdenes, lo que nos permitirá implementar lógicas comerciales más avanzadas.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta