どのデザインが正しいのでしょうか?

 

このように

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=0; i < Total; i++)   //требует уточнения эта строка                                                     
  {                                                                                          
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),Bid,5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),Ask,5); break;
        default     : break;
      }        
    }
  }  
} 

とか、こんな感じで...。

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=1; i <= Total; i++)                                                        
  {                                                                                          
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),Bid,5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),Ask,5); break;
        default     : break;
      }        
    }
  }  
}

また、この機能ですべての注文が終了するのでしょうか?

なぜか1件だけ注文が締め切られている、理由がわからない。

 
どちらも時間の無駄です。
 
TheXpert:
どちらも時間の無駄です。


なぜ?
 
valenok2003:


なぜ?


だって、こっちの方がいいんだもん。

int Total = OrdersTotal();
  for (int i=Total; i>=1; i--)
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
...
 
valenok2003:


PATHY なぜ?
1つ以上の注文がある場合、どのオプションもすべての注文をクローズしないこと。
 

一度の注文でも...が閉まらないかも...。

 

OrdersTotal() - 未決済注文と保留中の注文の 合計数を返します。

For OrderSelect() - ナンバリングは1から始まるのか、それとも0から始まるのか?

 
valenok2003:

OrdersTotal() - 未決済注文と保留中の注文の合計数を返します。

OrderSelect()の場合 - 番号は1から始まるのか、それとも0から始まるのか?

少なくとも1つのオーダーが終了した後、ナンバリングがどうなるか考えてみてください。

ナンバリングは0から始まります。

 
最初のものは基本的に正しく、すべての注文を閉じますが、終値は 正規化する必要があります。2回目は失敗、すべての注文が決済されない(サイクルが正しくない)
 

そうそう、休みが多いと脳に悪いんだよね。))))

ありがとうございました。

 
Techno:
最初のものは基本的に正しく、すべての注文を閉じますが、終値を正規化する必要があります。2つ目は失敗、すべての注文がクローズされない(ループが正しくない)


それはないでしょう。

信じられないなら、デモで実験してみろ。

理由: