Exécution de plus d'une EE à la fois - page 4

 
Sneck55: Il doit décrémenter s'il ferme un ordre pour correspondre à ce qui se passe dans le pool, mais pas s'il ne ferme pas d'ordre. S'il décrémente sans fermer un ordre, il entre dans une boucle sans fin.
Vous pouvez mener un cheval à l'eau...
 
Sneck55:
Elle doit être décrémentée si elle ferme un ordre pour correspondre à ce qui se passe dans le pool, mais pas si elle ne ferme pas d'ordre. S'il décrémente sans fermer un ordre, il entre dans une boucle sans fin.

Si vous n'appeliez pas constamment OrdersTotal(), vous n'auriez pas ce problème. Appelez le total une fois. Mettez-le dans un int. Utilisez ce nombre dans la boucle for.

Ceci dit, avez-vous seulement lu ma réponse précédente ? Cette boucle entière est une perte de temps complète. Regardez votre code. A votre avis, quelle est la valeur de SellTicket ?

         if(SellTicket!=0)
            {
            if(SmallMA>MediumMA)
            {
            for(Counter=0;Counter<=OrdersTotal()-1;Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&OrderType()==OP_SELL)
                  {
               //   while(IsTradeContextBusy()) Sleep(10);
                  Closed=OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red);
                  if(Closed) SellTicket=0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine");                  
                  }
            Counter--;               
                }
            }
            }
 
Et il consommera de la puissance du processeur au fil du temps.
 

Oui, et il n'est pas logique d'avoir déjà les valeurs nécessaires dans l'EA, puis de les oublier et de parcourir le pool d'ordres pour les retrouver. Ce genre de chose ne doit être fait que dans le cadre d'un redémarrage.