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

 
RaptorUK:

Você não precisa da Função . . . . . se livrar dela.



Olá Raptor,

Eu preciso desta função, uma vez que a EA é complexa, e uso esta função com muitas versões em condições de fechamento.

Espero que vocês me entendam.

Y.

 
onewithzachy:

Vamos fazer isso novamente parte 2 :(


Obrigado onewewewithzachy, mas como eu respondi anteriormente, eu preciso desta função para fechar com muitas versões de condições, então é muito complexo colocar os comandos de código de fechamento dentro de cada condição, especialmente que não é um comando de código único.

Obrigado,

Y.

 
RaptorUK:

Faça isso . . . ( repetido a partir daqui: https://www.mql5.com/en/forum/139543 )

. . e você não precisa da Função de forma alguma.


Raptor, eu preciso desta função para superar situações REQUERIDAS, como você pode ver.

Y.

 
onewithzachy:

@ RaptorUK, estou considerando usar capacete de proteção para que pelo menos eu possa pensar bem à frente do que estou pensando agora. Não é isso, esses motoristas pensam bem à frente? :D


@ skaboy, estou pedindo educadamente aqui, se você não se importa, por favor use o botão SRC para postar seu código. Temos perguntado isso muitas vezes, só neste tópico.

@ crossy, Já passou quase uma semana desde seu primeiro posto. Certamente eu entendo que você pode não ter a cabeça clara agora lidando com 4000 linhas, neste momento eu mesmo tenho a minha aqui também. Se você ainda não entendeu, - ehm - você pode nos pedir para escrever o código Close para você. No entanto, você ainda tem que escrever o código mesmo que apenas um pouco - e nos mostrar. :D, o código do RaptorUK logo acima é mais direto do que o meu, pense nisso e então você pode seguir em frente com seu EA.

Com a maneira como você escreve o código aqui - demasiados códigos repetidos desnecessários - você deve ter um pouco de preocupação com suas 4000 linhas de código para que ele possa retardar sua EA e fazer com que sua EA perca um tique. Não faz mal perder alguns pontos, entretanto, o que acontece se você falhar a 10 pips de distância ? e provavelmente suas 4000 linhas ainda podem ser reduzidas a apenas 400 linhas. Quem sabe ?, seu EA, tornar-se mais leve e mais rápido. :D


Obrigado onewewithzachy,

Meu EA tem este pequeno erro, que é:

1) Ele fecha o bilhete relevante e procura por ele também.

2) Este erro não aparece a cada ordem fechada, e às vezes funciona bem.

Aboy as outras 3.950 linhas de código - elas funcionam muito bem.

Eu anexarei as linhas de código relevantes, novamente.

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:



Olá Raptor,

Eu preciso desta função, uma vez que a EA é complexa, e uso esta função com muitas versões em condições de fechamento.

Espero que vocês me entendam.

Y.

Acho que você não entende o código que tem copiado e colado de algum outro lugar ... e não é para solicitações . . você nem mesmo verifica se um erro que recebe é uma solicitação.
 
RaptorUK:
Acho que você não entende a cópia que tem copiada e colada de algum outro lugar . . . e não é para solicitações . . você nem sequer verifica se um erro que recebe é uma solicitação.


Não Raptor, o erro que recebi foi: O número do bilhete não foi encontrado. E posso lhe dizer que a ressonância é: O bilhete já estava fechado um segundo antes.

Não entendo como se fecha o bilhete e se continua a pesquisá-lo...

 
crossy:


Não entendo como se fecha o bilhete e se continua a pesquisá-lo...

É por causa do loop que eu disse que você não precisa ... na função que você não precisa.

"Por que você tem um loop na função Close_Single_P ? " do 3º post da página 1

"por que o laço ?" da página 4, segundo post

 

Estou errado ou esta função nunca fecha os pedidos CURTOS?

...
   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:

Estou errado ou esta função nunca fecha os pedidos CURTOS?


Waidas, você prepara. Mas esta é apenas uma pequena peça da EA, que fecha LONG e SHORT.

Obrigado.

 
RaptorUK:

É por causa do loop que eu disse que você não precisa ... na função que você não precisa.

"Por que você tem um loop na função Close_Single_P ? " do 3º post na página 1

"por que o laço ?" da página 4, segundo post


Raptor, Você era o equipamento, e eu fiz os loops, então a função agora está sem nenhum loop.

Eu o prendo novamente aqui.

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;
}
//-----------------------------------------------+
Razão: