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

 
Martingeil:
要像这样做。

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

就是这句话让人困惑。我认为这里根本就不需要它。还是我错了?

 
valenok2003:

就是这句话让人困惑。我认为这里根本就不需要它。还是我错了?

这是要切断神奇的符号

当搜索时,它首先搜索简单的没有magik的符号的订单,如果没有这样的订单,该函数停止工作.........,如果它发现有这样的符号的订单,那么它在其中搜索magik,并关闭那些符合magik的订单,如果交易流是自由的。

 
valenok2003:

就是这句话让人困惑。我认为这里根本就不需要它。还是我错了?

如果我们说的是删除所有的订单,那么这一行就没有必要了,至于规范化,你凭什么认为内置的脚本是这样的,应该把它们作为一个例子?
 
Martingeil:

需要砍掉那个特定角色的雄性。

当搜索时,它首先通过符号搜索没有大写字母的订单,如果没有这样的订单,则停止该功能,如果有带有这样符号的订单,则浏览它们,并找到那些与大写字母相匹配的订单,如果交易流是自由的,则关闭它们。

而我们怎么能事先知道MagicNumber,因为我们是用OrderMagicNumber()得到的。而除了这句话
OrderSymbol() == Symbol()

是重复的。

还有这句话

Print ("close ALL orders Type : order :  Bid  "+OrderType()+" :  "+OrderOpenPrice()+"  :  "+Bid);

如果没有这样的majik,函数就停止工作,如果有这样的majik,就搜索它们。

 
Techno:
如果我们说的是删除所有的订单,那么这一行就没有必要了,至于规范化,你凭什么认为内置的脚本是这样的,应该把它们作为一个例子?


嗯,马克思,毕竟。
 
Martingeil:

需要切断这个特殊符号的魔力

当搜索一个订单时,它首先搜索一个没有神奇数字的订单;如果没有这样的订单,该函数将停止工作.........,如果它找到一个有这样数字的订单,那么它将通过所有的订单来寻找一个神奇的数字,如果交易流是自由的,它将关闭所有与神奇数字匹配的订单。

我明白了,我只是在说关闭所有的订单,这就是为什么我一开始没有理解。

我冒昧地把你的例子重新安排成这样。

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      if (OrderMagicNumber() == MagicNumber)
      {
        while (!IsTradeAllowed()) Sleep(1000);
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
      }
    }
  }

但要关闭所有订单

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
 
valenok2003:


嗯,马克思,毕竟。
甚至恩格斯)不需要人格崇拜,根据自己的知识来写)。
 
valenok2003:
如果你是指这个

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

或者你说的是别的东西?

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

在这种情况下,它是这样的。

C/C++的 "通用标准 "是。

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=Total-1; i >=0; i--)                                                        
  {                                                                                          
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      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;
      }        
    }
  }  
}

操作次数的差异。如果在这种情况下影响不大,比如说测试人员的风格不同,就会对优化时间产生明显的影响。对于现实世界来说,它影响到速度,这有时是很关键的。

特别是制动是这样的设计(我没有在你的网站上看到,但由于某些原因,大多数人喜欢它?

for (int i=0; i<OrdersTotal(); i++)

这里,在循环的每一次传递中都会调用一个函数。就计算成本而言,它是最 "昂贵 "的操作。

好运。

我看到你已经在这个意义上修复了代码。

 

其结果是这个脚本

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+
问题--为什么它不总是关闭所有的订单?例如,我连续开了三个卖出订单,然后试图用脚本关闭它们,它可能会关闭一个或两个或所有的订单。原因是什么呢?
 

伙计,在所有的选项中选错了,这可真是个好办法。孩子,你不应该是打码的。

它不是因为重新引用 而关闭的。

原因: