Cerrar la orden automáticamente después de un período determinado y/o SL - página 4

 

Por favor, utilice el botón SRC para publicar el código . . . .

 

Puede que esté intentando cerrar una orden dos veces...

if (OrderType() == OP_BUY || OP_SELL) 
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red); 
openbuy = 0;
opensell = 0;
}


if (OrderType() == OP_SELL) 
{
Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red); 
opensell = 0;
openbuy = 0; 
} 
}

Sólo necesitas uno de estos... y usar...

if (OrderType() <= OP_SELL) 

que cubre OP_SELL y OP_BUY lea esto: https://docs.mql4.com/constants/trading

 

He cambiado el código así:

for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
       if((OrderOpenTime()+3600) < TimeCurrent())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);           
               openbuy = 0;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);  
               opensell = 0;
              }              
          }
       }
    }

Ahora tengo que averiguar cómo dejo que el código cuente opensell y openbuy a 0 cuando golpea el StopLoss o TakeProfit

 
nirvanamac:

He cambiado el código así:

Ahora tengo que encontrar la manera de dejar que el código cuente opensell y openbuy a 0 cuando se golpea el StopLoss o TakeProfit


opensell = 0;
openbuy =0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   //==> select also on magicnumber and symbol
       {
       if(OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol() && OrderType() == OP_BUY){openbuy++;}
       if(OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol() && OrderType() == OP_SELL){opensell++;}
       if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);           
               openbuy = openbuy-1;    //openbuy--;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);  
               opensell = opensell-1;    //opensell--;
              }              
          }
       }
    }

Seleccione directamente en magicnumber y symbol este código será entonces escrito de una mejor manera

Si se utiliza la forma en que lo había hecho, entonces usted va a cerrar todas las operaciones abiertas más largo que una hora (también no de este)

 
deVries:

Seleccione directamente el número mágico y el símbolo este código se escribirá de una manera mejor

Si lo utiliza de la forma en que lo había hecho, entonces cerrará todas las operaciones abiertas que se ejecuten durante más de una hora (tampoco de esta)


Hola deVries...lo he probado y lo comprobaré ahora con TP y SL...muchas gracias...
 

Wow ahora se ve bien :) no el rendimiento, pero el EA con SL y TP