哪种设计是正确的?

 

像这样

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

这个功能是否会关闭所有的订单?

我只有一个订单因某种原因而关闭,我搞不清楚原因。

 
这两个人都是在浪费时间。
 
TheXpert:
这两个人都是在浪费时间。


为什么?
 
valenok2003:


为什么?


因为这样做更好。

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


PATHY 为什么?
PATAMU,如果有1个以上的订单,你的选项都不会关闭所有的订单。
 

哪怕只有一个订单...可能不会关闭...

 

OrdersTotal() - 返回未结订单挂单 的总数。

对于OrderSelect()--编号是以1开始还是以0开始?

 
valenok2003:

OrdersTotal() - 返回未结订单和挂单的总数。

对于OrderSelect()--编号是以1开始还是以0开始?

想一想,至少有一个订单结束后,编号会发生什么变化。

编号从零开始。

 
第一个基本上是正确的,它将关闭所有的订单,但收盘价 应该被规范化。第二次失败,不是所有的订单都会关闭(循环不正确)。
 

是的,知道了,很多假期都对大脑不利。))))

谢谢你!

 
Techno:
第一条基本上是正确的,它将关闭所有的订单,但我们必须将收盘价正常化。第二条失败了,不是所有的订单都会被关闭(循环不正确)。


它不会。

如果你不相信我,可以在一个演示上做个实验。

原因: