同时运行一个以上的EA - 页 4

 
Sneck55: 如果它关闭了一个订单,它需要递减,以配合池子里发生的事情,但如果它没有关闭一个订单,就不需要递减。如果它在没有关闭订单的情况下进行递减,就会进入一个无尽的循环。
你可以把马牵到水里......
 
Sneck55:
如果它关闭了一个订单,它需要递减,以配合池子里发生的事情,但如果它不关闭订单,就不需要递减。如果它在没有关闭订单的情况下进行递减,就会进入一个无尽的循环。

如果你没有一直调用OrdersTotal(),你就不会有这个问题。调用一次总数。把它放在一个int中。在for循环中使用这个int。

说了这么多,你到底有没有读过我之前的回答?整个循环完全是在浪费时间。看看你的代码。你认为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--;               
                }
            }
            }
 
而且随着时间的推移,它将消耗cpu的功率。
 

是的,如果在EA中已经有了必要的值,然后忘记它们并在订单池中翻找它们,这是不符合逻辑的。这类事情只需要作为重启恢复的一部分来做。