哪种设计是正确的? - 页 3

 
Techno:
PapaYozh,这两个选项都只针对关闭,但修改呢?与关闭和修改的两个不同的循环相比,有2个点来进行全面处理 更好?


如果有些东西必须被关闭,有些东西必须被修改,那么结构for (i=0; i<OrderTotals(); i++)就更不正确了。

我们必须从OrdersTotal()-1移到0。

for ( i=OrderTotals()-1; i>=0; i-- )
{ 




 

即这是正确的设计吗?

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

然而,我仍然不理解这种正常化。

如果我计算出价格是一回事,那么很明显,它必须被带到终端的数字上。

但在这种情况下,我们是以从流动中获得的当前价格 收盘,当然,它不能长于数字。

 
valenok2003:

但在这里,它也是以从流量中得出的当前价格收盘的,当然,这个价格不能长于数字。

这是为一个有非正常化报价的测试者准备的。
 
valenok2003:

然而,我仍然不理解这种正常化。

如果我计算出价格是一回事,那么很明显,它必须被带到终端的数字上。

但在这种情况下,我们是以从流动中获得的当前价格收盘,当然,它不能长于数字。

有时数字=4 时,投标可能等于1.32343545654。不经常,但它发生了。
 
Techno:
有时候,当数字=4的时候,出价可以是1.32343545654,这种情况会发生。不经常,但它发生了。


活到老,学到老。谢谢你。
 
valenok2003:

即这是正确的设计吗?


并非如此:对乐器的 "符号 "没有检查。如果订单将对一个以上的工具开放,那么你就有可能以另一个工具的价格关闭一个工具的订单。如果您需要关闭专家顾问在其图表上被移动的符号的订单,那么您必须使用该图表的 "符号"。 如果您需要关闭所有订单,无论EA被移动到哪个图表,那么请阅读订单的 "符号",并要求获得相应 "符号 "的卖价和买价。而且代码中还有一些不必要的动作。

好运。

 
valenok2003:

即这是正确的设计吗?

void CloseThisSymbolAll() {
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol()) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         while (!IsTradeAllowed()) Sleep(1000);
            if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, Blue);
            if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, Red);
            Print ("close ALL orders Type : order :  Bid  "+OrderType()+" :  "+OrderOpenPrice()+"  :  "+Bid);            
         }
      }
   }
}
像这样做。
 
VladislavVG:


是的,而且代码中还有额外的动作。

如果你是指这个
int Total = OrdersTotal();

那么这里就有一个额外的变量,用于代码透明。

或者你说的是别的东西?

 
Techno:
有时在数字=4时,投标可能等于1.32343545654。不经常,但它发生了。

然而,在close.mq4 脚本的例子中(在标准MT4交付中),没有规范化。

   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
原因: