Função FechaPosicao não está funcionando

 

Olá, eu estou criando um EA simples e resolvi inserir uma função para fechar a posição na inversão de sinal, mas não está funcionando.


Eu fiz a lógica operacional da seguinte forma.

if(comprado==true)

{

if(MediaRapida[1] < MediaLenta[1])

{

FechaPosicao();

}

}



void FechaPosicao()

   {

      for(int i = PositionsTotal()-1; i>=0; i--)

         {

            string symbol = PositionGetSymbol(i);

            ulong magic = PositionGetInteger(POSITION_MAGIC);

            if(symbol == _Symbol && magic == MagicNumber)

               {

                  ulong PositionTicket = PositionGetInteger(POSITION_TICKET);

                  if(trade.PositionClose(PositionTicket, 500))

                     {

                        Print("Posição Fechada - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                     }

                  else

                     {

                        Print("Posição Fechada - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                     }

               }

         }

   }


Quando a média inverte para baixo e está comprado meu EA deveria fechar a posição, mas isso não está acontecendo.

 

Em qual parte ele para vc chegou a analisar?

Se aparece a mensagem de falha ou não?


O seu desvio máximo está 500, para a moeda que opera é suficiente? normalmente eu deixo ULONG_MAX para não ter erro

Ja peguei falhas no meu codigo por deixar a linha igual a sua

if(symbol == _Symbol && magic == MagicNumber)

Então para resolver eu quebrava em dois if's e dava certo, não sei porque

 
Rafael Magalhães:

Olá, eu estou criando um EA simples e resolvi inserir uma função para fechar a posição na inversão de sinal, mas não está funcionando.


Eu fiz a lógica operacional da seguinte forma.


Quando a média inverte para baixo e está comprado meu EA deveria fechar a posição, mas isso não está acontecendo.

Bom dia!


Além das observações do Eduardo, caso a quantidade copiada pelo CopyBuffer() seja apenas 1, então a verificação correta seria:

if(MediaRapida[0] < MediaLenta[0])
 

Não aparece nenhuma mensagem de erro, apenas não executa.

Eu mudei o desvio para ULONG_MAX e mesmo assim continua sem mensagem de erro e sem executar o fechamento de posição.


Eu também mudei o meu CopyBuffer para 

if(MediaRapida[0] < MediaLenta[0])

e mesmo assim nada está executando.


Eu uso esse mesmo código para fechar posição pelo horário e funciona, mas agora quando eu coloquei a condição de cruzamento de média não está executando.

 
Rafael Magalhães:

Não aparece nenhuma mensagem de erro, apenas não executa.

Eu mudei o desvio para ULONG_MAX e mesmo assim continua sem mensagem de erro e sem executar o fechamento de posição.


Eu também mudei o meu CopyBuffer para 

e mesmo assim nada está executando.


Eu uso esse mesmo código para fechar posição pelo horário e funciona, mas agora quando eu coloquei a condição de cruzamento de média não está executando.

Então o erro está em outra parte do código que não foi adicionada aqui . . . Não seria na atualização dessa variável "comprado"?


Se a função funciona em outra situação, então o problema é porque essas condições nunca estão sendo atendidas:

if(comprado==true)




if(MediaRapida[0] < MediaLenta[0])
 

Consegui resolver. Eu fiz uma função booleana com a virada de média e funcionou.


Obrigado pela ajuda!

Razão: