複数のEAを同時に実行する - ページ 4

 
Sneck55: プールで起こることと一致するように、注文をクローズした場合はデクリメントする必要がありますが、注文をクローズしなかった場合はそうではありません。もし、注文をクローズせずにデクリメントすると、無限ループに陥ります。
馬を水に導くことができる...
 
Sneck55:
プールで起こることと一致するように、注文を閉じると減少する必要がありますが、注文を閉じない場合はそうではありません。もし、注文を閉じずに減少させると、無限ループに入ります。

OrdersTotal() を何度も呼び出さなければ、この問題は発生しません。合計を一度呼び出す。それをint型にする。そのintをforループで使用します。

とはいえ、私の以前の返信を読んだことがあるのでしょうか?そのループ全体は完全に時間の無駄です。あなたのコードを見てください。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に必要な値を入れておきながら、それを忘れてオーダープールを探し回って値を取り出すのは論理的ではありません。そのようなことは、リブートリカバリーの一部としてのみ行われる必要があります。