Discusión sobre el artículo "Automatización de estrategias de trading en MQL5 (Parte 7): Creación de un EA para el comercio en cuadrícula con escalado dinámico de lotes"

 

Artículo publicado Automatización de estrategias de trading en MQL5 (Parte 7): Creación de un EA para el comercio en cuadrícula con escalado dinámico de lotes:

En este artículo, creamos un asesor experto de trading con cuadrículas en MQL5 que utiliza el escalado dinámico de lotes. Cubrimos el diseño de la estrategia, la implementación del código y el proceso de backtesting. Por último, compartimos conocimientos clave y mejores prácticas para optimizar el sistema de comercio automatizado.

El trading en cuadrícula es un enfoque sistemático que coloca órdenes de compra y venta en intervalos de precios predeterminados, lo que permite a los operadores capitalizar las fluctuaciones del mercado sin necesidad de realizar predicciones precisas de tendencias. Esta estrategia se beneficia de la volatilidad del mercado abriendo y cerrando continuamente operaciones dentro de un rango de precios definido. Para mejorar su rendimiento, integraremos un escalado de lotes dinámico, que ajustará el tamaño de las posiciones en función de condiciones predefinidas, como el saldo de la cuenta, la volatilidad o los resultados comerciales anteriores. Nuestro sistema de negociación en cuadrícula funcionará con los siguientes componentes clave:

  • Estructura de cuadrícula: Definiremos el espaciado entre los pedidos.
  • Reglas de entrada y ejecución: Determinaremos cuándo abrir operaciones en cuadrícula basándonos en distancias fijas utilizando una estrategia de indicador de media móvil.
  • Escalado dinámico de lotes: Implementaremos un mecanismo adaptativo de dimensionamiento de lotes que ajusta el tamaño de las posiciones en función de las condiciones del mercado o de parámetros de riesgo predefinidos.
  • Gestión de operaciones: Incorporaremos mecanismos de stop-loss, take-profit y breakeven opcionales para gestionar el riesgo de forma eficaz.
  • Estrategia de salida: Desarrollaremos una lógica para cerrar posiciones basada en objetivos de ganancias, límites de riesgo o cambios de tendencia.

En pocas palabras, aquí está la visualización del plan de estrategia completo para facilitar su comprensión.

DISEÑO DE CUADRÍCULA

Al combinar un sistema de cuadrícula estructurado con un tamaño de lote adaptable, crearemos un EA que maximice los retornos y al mismo tiempo gestione el riesgo de manera eficaz. A continuación, implementaremos estos conceptos en MQL5.


Autor: Allan Munene Mutiiria

 
//--- Recuperar precios de barras recientes para la lógica de señales de operación
double low1  = iLow(_Symbol, _Period, 1);
double low2  = iLow(_Symbol, _Period, 2);
double high1 = iHigh(_Symbol, _Period, 1);
double high2 = iHigh(_Symbol, _Period, 2);

estas variables no se utilizan... ¿por qué este código?

 
testtestmio71 #:

estas variables no se utilizan... ¿por qué este código?

Son funciones a reutilizar.

 
Allan Munene Mutiiria #:
Son funciones a reutilizar.
en el código ... donde se utiliza low1 variabile ?
 
testtestmio71 #:
en el código ...donde usas low1 variabile ?

¿Cuál es el problema con las variables? ¿Algún bug? Son funciones que se pueden utilizar en cualquier parte del código.

Si tuviera que explicar más, yo diría que para obtener los precios bajos y altos de la barra anterior y la barra anterior + 1.

void ExecuteInitialTrade(double ask, double bid){
   //--- Señal de COMPRA: mínimo de la barra anterior por encima de la MA y barra anterior por debajo de la MA
   if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){
      gridSize = ask - gridSize_Spacing;     //--- Fijar el disparo de la rejilla por debajo de la petición actual
      TakeProfit = ask + takeProfitPts;      //--- Fijar TP para COMPRA
      if(obj_Trade.Buy(LotSize, _Symbol, ask, 0, TakeProfit,"Initial Buy"))
         Print("Initial BUY order executed at ", ask, " with LotSize: ", LotSize);
      else
         Print("Initial BUY order failed at ", ask);
      isTradeAllowed = false;
   }
   //--- Señal de VENTA: máximo de la barra anterior por debajo de la MA y barra anterior por encima de la MA
   else if(iHigh(_Symbol, _Period, 1) < maData[1] && iHigh(_Symbol, _Period, 2) > maData[1]){
      gridSize = bid + gridSize_Spacing;     //--- Fijar el disparo de la rejilla por encima de la puja actual
      TakeProfit = bid - takeProfitPts;      //--- Establecer TP para VENTA
      if(obj_Trade.Sell(LotSize, _Symbol, bid, 0, TakeProfit,"Initial Sell"))
         Print("Initial SELL order executed at ", bid, " with LotSize: ", LotSize);
      else
         Print("Initial SELL order failed at ", bid);
      isTradeAllowed = false;
   }
}

Concretamente aquí. Puedes pasar a usar las funciones o igual borrarlas si no las quieres. ¿Queda claro? Gracias.

 
double low1  = iLow(_Symbol, _Period, 1);

por ejemplo.....para la señal de compra que utilizó iLow y no Low1 variabile

if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){

¡¡¡es solo para mi estudio, gracias!!!

 

estas cuatro líneas se pueden comentar

// double low1  = iLow(_Symbol, _Period, 1);
// double low2  = iLow(_Symbol, _Period, 2);
// double high1 = iHigh(_Symbol, _Period, 1);
// double high2 = iHigh(_Symbol, _Period, 2);
 
testtestmio71 #:

estas cuatro líneas se pueden comentar

Claro. ¿Ya está todo bien?

 

está bien.....best EA .

Las 4 líneas son confusas para un novato

 
testtestmio71 #:

está bien.....best EA .

Las 4 líneas son confusas para un novato

Ok

 

gran artículo - muchas gracias... ¡Estoy estudiando el enfoque comercial que voy a poner con ediciones en mis propios oficios en símbolos hashedge personalizados!

comprobación....