Trading Sistemático 게시글

Más Operaciones Después del Breakeven: Optimiza tu Trading con MetaTrader 4

첨부파일
35609.zip (12.47 KB, 다운로드 0회)

¡Hola, traders! Hoy vamos a hablar sobre una herramienta muy útil que puede ayudarte a mejorar tus operaciones en MetaTrader 4: la función de conteo de órdenes de nuestro pequeño Asesor Experto (EA).

¿Qué es la función de conteo de órdenes?

La esencia de esta función es contar las órdenes que aún no han alcanzado el breakeven. Aquí te dejo un fragmento del código que implementa esta función:

int OrdersCounter()
  {
   int counter=0;
//---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) // Si la orden fue abierta por este EA
           {
//--- si se ha alcanzado el breakeven 
   /* Para compras, solo cuando el StopLoss es igual o superior al precio de apertura. Nota: esta implementación no es recomendable si tienes órdenes pendientes, es solo para compras y ventas*/
            double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
            if(!XBreakeven) // Si solo se ha alcanzado el breakeven y el trailing stop no ha protegido el precio de apertura'
              {
               counter++; // Contamos la posición
              }
           }
   return counter;
  }

En esta función, contamos solo las órdenes que NO tienen un stoploss por encima o igual al precio de apertura en compras y por debajo en ventas. En resumen, contamos todas las órdenes que no han llegado al breakeven o donde el trailing stop no ha protegido su precio de apertura.

 double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
            if(!XBreakeven) // Si solo se ha alcanzado el breakeven y el trailing stop no ha tenido lugar'

Con esto, creamos un contador que devuelve el valor que vamos a usar para limitar nuestra posición máxima, que en este caso hemos establecido en 1 orden a la vez.

   if(OrdersCounter()<MaximumOrders)

Por lo tanto, cada vez que se alcanza el breakeven, esta función lo ignorará al contarlo. En este ejemplo, como solo teníamos una posición, el contador devolverá cero y ¡boom! Abrimos otra venta y el proceso continúa.

Esto no sería posible si no hubiera creado una función de breakeven:

void BreakEvenFunction()
  {
//---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
           {
// Para compras, si el Bid está por encima del Precio de Apertura + pips de breakeven. Viceversa para ventas
            double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());
            /* Para compras, solo cuando el StopLoss es igual o superior al Precio de Apertura. Viceversa para ventas */
            if(xHybrid)
              {
               bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
              }
           }
  }

¿Te animas a probarlo?

연관 포스트

댓글 (0)