[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 6

 
DhP:


每一个刻度都会重新计算挂单的数量。

如果数量较少,说明有一个挂单变成了市价单。

所有剩余的(已经变得不必要的)可以被删除。


在删除时,两个订单都是市场订单。但即使最后一个挂单 被删除或触发,其票据仍被触发并产生错误。而倒数第二项仍在等待。
 
Andreev:

谢谢你的链接!!。将会研究一下 :)随着时间的推移,以及神奇的数字和按订单类型(bylimit或selllimit)是一个好主意。但你可能没有完全理解我。我的问题不是在订单上做标记,而是如何删除它。无论我如何定义倒数第二个订单,我都只能删除最后一个挂单。
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
正如我从你的第一个帖子中理解的那样,"我使用下面的例子来定义,但它只关闭了最后一个挂单,而不是第一个挂单,尽管第一个挂单的所有条件都满足了。帮助我找到错误!!!!!!!!!!!!!" - 你需要删除所有剩余的挂单,在把其中一些变成市场订单后 - 这个代码应该写在你的交易条件中,然后继续...
 
Roman.:
我从你的第一篇帖子中了解到 "我使用下面的例子来定义,但它只关闭了最后一个挂单,而不是第一个挂单,尽管第一个挂单的所有条件都满足了。帮助我找到错误!!!!!!!!!!!!!" - 你需要删除所有剩余的挂单,在把其中一些变成市场订单后 - 这个代码应该被输入到你的交易条件中并继续进行...

谢谢!!!。没想到会这么复杂:))))。
 
Roman.:
我从你的第一篇帖子中了解到 "我使用下面的例子来定义,但它只关闭了最后一个挂单,而不是第一个挂单,尽管第一个挂单的所有条件都满足了。帮助我找到错误!!!!!!!!!!!!!" - 你需要删除所有剩余的挂单,在把其中一些变成市场订单后 - 这个代码应该被输入到你的交易条件中并继续进行...

我想这可能需要几行字 ...:)
 
Andreev:

在删除的那一刻,这两个订单都是可以销售的。但即使最后一个挂单被删除或触发,触发它的票据仍会显示错误。倒数第二位仍将在那里。


我甚至无法想象这怎么可能。

如果在重新计算挂单 后,专家顾问未能找到一个订单,它会立即发出命令,删除其余的订单。

删除不需要的挂单的操作一定要在任何开仓操作之前(先于)。

 
Roman.:

我从你的第一篇帖子中了解到 "我使用下面的例子来定义,但它只关闭了最后一个挂单,而不是第一个挂单,尽管第一个挂单的所有条件都满足了。帮助我找到错误!!!!!!!!!!!!!" - 你需要删除所有剩余的挂单,在把其中一些变成市场订单后 - 这个代码应该写在你的交易条件中,然后继续...

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
你有没有试过把代码写得紧凑?

这是你的代码。

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))                            continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))                    continue;
      ticket = OrderTicket( );                         // Номер ордера
      orderLots = OrderLots();                         // Lots   
      SL =  OrderStopLoss();                           // Значение StopLoss ордера
      TP = OrderTakeProfit();                          // Значение TakeProfit ордера
      if (ticket>0) {
         while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
            Sleep(100);
            OrderDelete(ticket,CLR_NONE); // и удаляете их                       
         }
      return (0);
      }
 
Andreev:

我想可能会有几行字......。:)

嗯。artmedia70(24.07.2011 20:01) 将所有东西都装进了差不多两行。正如你所希望的那样)))。
 

请帮助我,我在哪里犯了错误?我们的想法是,在订单被关闭的酒吧里,订单不应该打开。


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
if ((условие 1)&&(условие 2)&&(OrderCloseTime()!=Time[0]))
 {
 OrderSend...; 
 }

但在测试器中,在订单关闭后,条件仍然得到满足,并且在同一方向上又开了一个订单。

 
artmedia70:
没试过把代码写得紧凑吗?

这里是你自己的代码。

我有...:-)))这是帕斯卡尔的一个习惯...可读性更差...特别是对于那些不太 "入门 "的人来说...:-)))在嵌套循环和条件的操作中,你需要按制表符宽度缩进,或3个空格--作为最后的手段... :-))
 
LazarevDenis:

请帮助我,我在哪里犯了错误?我们的想法是,在订单被关闭的酒吧里,订单不应该打开。


但在测试器中,在订单关闭后,条件仍然得到满足,并且在同一方向上又开了一个订单。


为了帮助,谷歌 这个 ,并搜索类似:在一个酒吧打开和关闭一个订单 site:mql4.com - 你将会很幸运。