帮助。为什么EA不关闭交易 - 页 4

 

如果你不使用SRC按钮来发布你的代码,你会遇到没有人回复你的问题。

 
crossy:

各位朋友,大家好。


OrderT是订单的票号,




我的问题是。EA有时能很好地关闭交易,但有时EA关闭了交易,但它仍在继续寻找票据来关闭它,尽管它已经被关闭。

(我得到的错误是:"未知票据号码..." 。

我认为我有一个逻辑错误。

谢谢你的帮助。

Y

这非常、非常简单。

只要回答这个简单的问题,你就会得到答案 . .

你把票据 号码传递给函数,这样票据就可以被关闭了 . . . . 为什么你要在所有的 其他订单中循环呢? 你已经知道了 你需要关闭的票据号码. . . 为什么要循环呢?

 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
      {  
         if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
         {   
            Check = false;
            if ( TREN == "LONG" )
              PRC = MarketInfo(SYMB,MODE_BID);
            else
            if ( TREN == "SHORT" )
               PRC = MarketInfo(SYMB,MODE_ASK);
         
            Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
            if ( Check )
               break;
         }      
      } 
   }
   return;
}
//-----------------------------------------------+

我希望现在更清楚了。

谢谢

 
RaptorUK:

这非常、非常简单。

只要回答这个简单的问题,你就会得到答案 . . .

你把票据 号码传递给函数,这样就可以关闭票据了 ...... 为什么你要在所有的 其他订单中循环呢? 你已经知道了 你需要关闭的票据号码...... 为什么还要循环呢?


谢谢Raptor,我做过一次,没有ORDERSELECT,但有同样的错误。

Y.

 
我已经在第一页提供了一个线索。 https://www.mql5.com/en/forum/139543
 

谢谢onewithzachy,我按照你的建议做了,我得到的错误是

按摩说它没有找到票据。

 
crossy:

各位朋友,大家好。


OrderT是订单的票号,




我的问题是。EA有时能很好地关闭交易,但有时EA关闭了交易,但它仍在继续寻找票据来关闭它,尽管它已经被关闭。

(我得到的错误是:"未知票据号码..." 。

我认为我有一个逻辑错误。

谢谢你的帮助。

Y

这非常、非常简单。

只要回答这个简单的问题,你就会得到答案 . .

你把票据 号码传递给函数,这样票据就可以被关闭了 . . . . 为什么你要在所有的 其他订单中循环呢? 你已经知道了 你需要关闭的票据号码. . . 为什么要循环呢?

 
onewithzachy:
我已经在第一页提供了一个线索。 https://www.mql5.com/en/forum/139543
我也给出了答案。 . .https://www.mql5.com/en/forum/139543
 
crossy:


谢谢Raptor,我做过一次,没有使用ORDERSELECT,但也有同样的错误。

你没有读懂我写的东西,而是问......为什么是循环? 在这种情况下,循环的作用 是什么?
 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+

O.K. 这里是修改后的版本,我得到了同样的错误。

Y.