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

 
 

La gestión de posiciones y órdenes es una parte fundamental del desarrollo de Expert Advisors (EAs) en MQL5. En este capítulo, exploraremos los diferentes tipos de órdenes disponibles, cómo enviarlas al mercado, modificarlas o cerrarlas, y cómo consultar las posiciones abiertas.


En MQL5, existen varios tipos de órdenes que permiten ejecutar estrategias comerciales con flexibilidad:

  • Órdenes Market: Se ejecutan inmediatamente al precio actual del mercado.
  • Órdenes Pending: Son órdenes condicionales que se activan cuando el precio alcanza un nivel específico.
  • Stop Loss: Es una orden automática para cerrar una posición si el precio se mueve en contra de la posición.
  • Take Profit: Es una orden automática para cerrar una posición si el precio alcanza un objetivo de ganancia.

Ejemplo Práctico: Envío de una Orden Market

A continuación, mostramos cómo enviar una orden de compra al mercado:

Explicación del código:

  • Usamos OrderSend para enviar una orden de compra (OP_BUY) al mercado.
  • Calculamos los niveles de stop loss y take profit basados en el precio actual (SYMBOL_ASK).
  • Mostramos un mensaje de éxito o error según el resultado de la operación.

Las funciones clave para gestionar órdenes en MQL5 son OrderSend(), OrderClose() y OrderModify(). A continuación, explicamos cada una de ellas con ejemplos prácticos.

Se utiliza para enviar nuevas órdenes al mercado.

Ejemplo Práctico: Envío de una Orden Pending Buy Limit


Se utiliza para cerrar posiciones abiertas.

Ejemplo Práctico: Cierre de una Posición Larga


Se utiliza para modificar órdenes pendientes o ajustar niveles de stop loss y take profit en posiciones abiertas.

Ejemplo Práctico: Modificación de un Stop Loss


Para gestionar posiciones abiertas, es necesario saber cuántas posiciones están activas y obtener información sobre ellas.

Ejemplo Práctico: Listado de Posiciones Abiertas


Interactividad: Ejercicios Prácticos

Ver solución:

Explicación del Código

  1. Definición de Parámetros:
    • Especificamos el símbolo (GBPUSD), el tamaño de lote (0.1), y el deslizamiento máximo permitido (10).
  2. Obtención del Precio Actual:
    • Usamos SymbolInfoDouble(symbol, SYMBOL_BID) para obtener el precio actual de venta (Bid) del símbolo.
  3. Cálculo del Precio de Activación:
    • Calculamos el precio de activación de la orden Sell Limit sumando 20 pips al precio actual (Bid). Esto significa que la orden se activará cuando el precio alcance este nivel.
  4. Cálculo de Stop Loss y Take Profit:
    • Establecemos el stop loss a 50 pips por encima del precio actual.
    • Establecemos el take profit a 100 pips por debajo del precio actual.
  5. Envío de la Orden Sell Limit:
    • Usamos OrderSend para enviar la orden con los parámetros calculados.
    • Si la orden se envía correctamente, mostramos un mensaje con los detalles de la orden en la ventana de resultados.
    • Si ocurre un error, mostramos el código de error correspondiente usando GetLastError().

Resultado Esperado

Cuando ejecutes este script, verás un mensaje similar al siguiente en la ventana de resultados si la orden se envía correctamente:

Si ocurre un error, verás un mensaje como este:


Caso Práctico

Este tipo de script puede ser útil para traders que desean automatizar estrategias basadas en órdenes pendientes. Por ejemplo:

  • Colocar órdenes Sell Limit o Buy Limit para aprovechar movimientos esperados en el mercado.
  • Configurar stop loss y take profit automáticamente para gestionar riesgos y maximizar ganancias.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con órdenes pendientes en MQL5!

Ver solución:

Explicación del Código

  1. Verificación de Posiciones Abiertas:
    • Usamos PositionsTotal() para verificar si hay posiciones abiertas en el terminal.
    • Si no hay posiciones abiertas, mostramos un mensaje indicando que no hay nada que cerrar.
  2. Recorrido de Posiciones Abiertas:
    • Utilizamos un bucle for para recorrer todas las posiciones abiertas.
    • Para cada posición, obtenemos su ticket (PositionGetTicket), símbolo (PositionGetString), tipo (PositionGetInteger) y volumen (PositionGetDouble).
  3. Filtrado de Posiciones Cortas:
    • Comprobamos si el tipo de posición es POSITION_TYPE_SELL, lo que indica una posición corta (venta).
    • Si es una posición corta, procedemos a cerrarla.
  4. Cierre de la Posición:
    • Usamos OrderClose para cerrar la posición corta. Le pasamos el ticket de la posición, el volumen y el precio de cierre (SYMBOL_ASK para posiciones cortas).
    • Si la operación de cierre es exitosa, mostramos un mensaje de confirmación.
    • Si ocurre un error, mostramos el código de error correspondiente usando GetLastError().

Resultado Esperado

Cuando ejecutes este script, verás mensajes similares a los siguientes en la ventana de resultados:

  • Si hay posiciones cortas:
  • Si no hay posiciones abiertas:
  • Si ocurre un error al cerrar una posición:

Caso Práctico

Este tipo de script puede ser útil para traders que desean automatizar la gestión de riesgos o implementar estrategias basadas en condiciones específicas. Por ejemplo:

  • Cerrar todas las posiciones cortas antes de un evento importante en el mercado (como un anuncio económico).
  • Automatizar el cierre de posiciones cortas cuando se alcanza un cierto nivel de beneficio o pérdida.

¡Espero que este ejemplo te sea útil para entender cómo filtrar y gestionar posiciones específicas en MQL5!

Ver solución:

Explicación del Código

  1. Verificación de Posiciones Abiertas:
    • Usamos PositionsTotal() para verificar si hay posiciones abiertas en el terminal.
    • Si no hay posiciones abiertas, mostramos un mensaje indicando que no hay nada que procesar.
  2. Inicialización de Variables:
    • Creamos dos variables:
      • totalVolume: Para almacenar el volumen total de todas las posiciones.
      • weightedSum: Para almacenar la suma ponderada de los precios de apertura multiplicados por sus volúmenes correspondientes.
  3. Recorrido de Posiciones Abiertas:
    • Utilizamos un bucle for para recorrer todas las posiciones abiertas.
    • Para cada posición, obtenemos su volumen (POSITION_VOLUME) y precio de apertura (POSITION_PRICE_OPEN).
    • Calculamos la contribución de cada posición al promedio ponderado multiplicando su volumen por su precio de apertura y lo acumulamos en weightedSum.
    • También acumulamos el volumen total en totalVolume.
  4. Cálculo del Promedio Ponderado:
    • Después de procesar todas las posiciones, calculamos el promedio ponderado dividiendo weightedSum entre totalVolume.
    • Mostramos el resultado en la ventana de resultados con una precisión adecuada usando _Digits.
  5. Gestión de Errores:
    • Si totalVolume es igual a 0 (lo cual no debería ocurrir normalmente), mostramos un mensaje indicando que no se pudo calcular el promedio ponderado.

Resultado Esperado

Cuando ejecutes este script, verás mensajes similares a los siguientes en la ventana de resultados:

  • Si hay posiciones abiertas:
  • Si no hay posiciones abiertas:

Caso Práctico

Este tipo de script puede ser útil para traders que desean monitorear el rendimiento general de sus posiciones abiertas. El promedio ponderado del precio de apertura es una métrica importante porque refleja el costo medio ajustado según el tamaño de cada posición. Algunas aplicaciones prácticas incluyen:

  • Evaluar si las posiciones actuales están rentables en conjunto.
  • Tomar decisiones informadas sobre cuándo cerrar posiciones o ajustar niveles de stop loss y take profit.
  • Implementar estrategias de promediación (averaging) basadas en el costo medio actual.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con posiciones abiertas y realizar cálculos avanzados en MQL5!


En el próximo capítulo, profundizaremos en la creación de indicadores personalizados, lo que nos permitirá implementar análisis técnicos avanzados.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta