Ajuda: Por que a EA não fecha um negócio - página 4

 

Você terá problemas se ninguém lhe responder se você não estiver usando o botão SRC para postar seu código :D

 
crossy:

Olá freinds,


OrderT é o número do bilhete de encomenda,




Meu PROBLEMA é: A EA às vezes fecha o comércio muito bem, mas às vezes a EA fecha a tarde MAS continua a procurar o bilhete para fechá-lo, embora já estivesse fechado.

(Eu recebo o erro: "Número desconhecido do bilhete..." .

Acho que tenho um erro lógico.

Obrigado pela sua gentil ajuda.

Y

É muito, muito simples . . . .

Basta responder a esta simples pergunta e você terá sua resposta...

Você passa o número TICKET para a Função para que o ticket possa ser fechado . . . por que você então faz um loop através de TODAS as outras encomendas ? você já SABE o número do Ticket que você precisa fechar . . por que o loop ?

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

Espero que seja mais claro, agora.

Obrigado

 
RaptorUK:

É muito, muito simples . . . .

Basta responder a esta simples pergunta e você terá sua resposta...

Você passa o número TICKET para a Função para que o ticket possa ser fechado . . . por que você então faz um loop através de TODAS as outras encomendas ? você já SABE o número do Ticket que você precisa fechar . . por que o loop ?


Obrigado Raptor, fiz isso uma vez sem o ORDERSELECT, mas teve o mesmo erro.

Y.

 
Eu já dei uma pista na primeira página. https://www.mql5.com/en/forum/139543
 

Obrigado, e eu fiz como você sugeriu e recebi o erro

massagem que não encontrou o TICKET.

 
crossy:

Olá freinds,


OrderT é o número do bilhete de encomenda,




Meu PROBLEMA é: A EA às vezes fecha o comércio muito bem, mas às vezes a EA fecha a tarde MAS continua a procurar o bilhete para fechá-lo, embora já estivesse fechado.

(Eu recebo o erro: "Número desconhecido do bilhete..." .

Acho que tenho um erro lógico.

Obrigado pela sua gentil ajuda.

Y

É muito, muito simples . . . .

Basta responder a esta simples pergunta e você terá sua resposta...

Você passa o número TICKET para a Função para que o ticket possa ser fechado . . . por que você então faz um loop através de TODAS as outras encomendas ? você já SABE o número do Ticket que você precisa fechar . . por que o loop ?

 
onewithzachy:
Eu já dei uma pista na primeira página. https://www.mql5.com/en/forum/139543
E eu também dei a resposta. . . https://www. mql5.com/en/forum/139543
 
crossy:


Obrigado Raptor, fiz isso uma vez sem o ORDERSELECT, mas teve o mesmo erro.

Você não está lendo o que eu escrevi e perguntou . . . por que o laço ? qual é a função do laço nesta situação ?
 
...
   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;
}
//-----------------------------------------------+

OK. Aqui está a versão modificada, a qual eu tive o mesmo erro.

Y.