Fermer l'ordre automatiquement après une période donnée et/ou SL - page 4

 

Veuillez utiliser le bouton SRC pour afficher le code . . . .

 

Il se peut que vous essayiez de clôturer un ordre deux fois...

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; 
} 
}

Vous n'avez besoin que d'une seule de ces commandes... et utilisez...

if (OrderType() <= OP_SELL) 

qui couvre OP_SELL et OP_BUY lisez ceci : https://docs.mql4.com/constants/trading

 

J'ai modifié le code comme ceci :

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;
              }              
          }
       }
    }

Maintenant, je dois trouver comment je laisse le code compter opensell et openbuy à 0 lors de l'atteinte du StopLoss ou TakeProfit.

 
nirvanamac:

J'ai modifié le code comme ceci :

Maintenant, je dois trouver comment je laisse le code compter opensell et openbuy à 0 lorsque je touche le StopLoss ou 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--;
              }              
          }
       }
    }

Sélectionnez directement sur le magicnumber et le symbole ce code sera alors écrit d'une meilleure façon.

Si vous l'utilisez comme vous l'avez fait, vous fermerez toutes les positions ouvertes depuis plus d'une heure (pas celle-là non plus).

 
deVries:

Sélectionnez directement le numéro magique et le symbole, ce code sera alors écrit d'une meilleure façon.

Si vous l'utilisez comme vous l'avez fait, vous fermerez toutes les positions ouvertes depuis plus d'une heure (pas celle-là non plus).


Bonjour deVries... J'ai essayé et je vais vérifier maintenant avec TP et SL... Merci beaucoup...
 

Wow maintenant ça a l'air bien :) pas la performance mais l'EA avec SL et TP