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

 
RaptorUK:

你根本不需要这个功能......摆脱它。



你好,Raptor。

我需要这个函数,因为我的EA是一个复杂的EA,而且我在很多版本的od关闭条件下使用这个函数。

我希望你能理解我。

Y.

 
onewithzachy:

让我们再做一次第二部分 :(


谢谢onewithzachy,但正如我之前所回答的,我需要这个函数 来关闭许多版本的条件,所以把关闭代码命令放在每个条件中太复杂了,尤其是它不是一个代码命令。

谢谢。

Y.

 
RaptorUK:

这样做......。( 从这里重复:https://www.mql5.com/en/forum/139543 )

.......你就完全不需要这个功能了。


猛禽,我需要这个功能来克服REQUATE情况,你可以看到。

Y.

 
onewithzachy:

@ RaptorUK,我正在考虑戴上防撞头盔,这样至少我可以比现在想得更远。那些司机不就是这样吗?


@ skaboy,我在这里礼貌地问一下,如果你不介意的话,请你用SRC按钮来发布你的代码。仅仅在这个主题中,我们已经问了太多次了。

@ crossy,从你的第一篇帖子到现在已经快一个星期了。当然,我理解你现在可能没有一个清晰的头脑来处理4000行,现在我自己的头脑也在这里。如果你还是不明白,--嗯--你可以要求我们为你写出那段封闭的代码。不过你还是要写代码,哪怕只是一点点--给我们看看。 :D, RaptorUK的代码就在上面,比我的更直接,想想看,然后你就可以继续你的EA了。

以你在这里写代码的方式--太多不必要的重复代码--你应该对你的4000行代码有一点担心,它可能会拖慢你的EA,使你的EA错过一个点。错过几个点是可以的,但是如果你错过了10个点会怎样? 可能你的4000行还是可以减少到400行。谁知道呢,你的EA会变得更轻更快。


谢谢你,onewithzachy。

我的EA有一个小错误,那就是。

1)它关闭了相关的票据,而且还在寻找它。

2)这个错误并不是每一个平仓单都会出现,有时它的效果很好。

至于其他3950条代码线--它们工作得非常好。

我再次附上相关的代码行。

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;
      }
      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;
}
//-----------------------------------------------+
 
crossy:



你好,Raptor。

我需要这个函数,因为该EA是一个复杂的EA,我在许多版本的od关闭条件下使用这个函数。

我希望你能理解我。

Y.

我认为你没有理解你从其他地方复制和粘贴的代码......而且,这不是为了重新报价。......你甚至没有检查你得到的错误是否是一个重新报价。
 
RaptorUK:
我认为你不明白你从别的地方复制和粘贴的副本......而且,这不是为了重新报价。......你甚至不检查你得到的错误是否是一个重新报价。


不是猛禽,我得到的错误是。票号没有找到。我可以告诉你的是,该票据在一秒钟前就已经关闭了。

我不明白它是如何关闭票据并继续搜索它的......

 
crossy:


我不明白它是如何关闭票据并继续搜索它的......

这是因为在你不需要的函数 中,有一个我说过你不需要的循环。

"为什么在Close_Single_P函数中有一个循环? " 来自第1页的第3篇文章

"为什么有循环?" 来自第4页的第2篇文章

 

我错了吗,还是这个函数 从不关闭空头订单?

...
   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);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
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);
         ^^^   Never executed
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
Waidas:

我错了吗?还是这个函数从不关闭空头订单?


Waidas,你是对的。但这只是EA中的一小部分,它关闭了长线和短线。

谢谢。

 
RaptorUK:

这是因为在你不需要的函数中,我说过你不需要的循环。

"为什么在Close_Single_P函数里有一个循环? " 来自第1页第3个帖子

"为什么有循环?" 来自第4页的第2篇文章


Raptor,你说的很对,我把循环的部分删掉了,所以现在这个函数 没有任何循环。

我在这里再次附上它。

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