Definindo fechamento da minha posição baseado nos pontos obtidos de gain ou loss

 

Boa noite

Estou verificando no meu código pela quantidade de pontos que andou a favor para o gain ou contra para o loss

No gain ele está funcionando normalmente, porém no loss ele não está funcionando, podem me ajudar

Quanto ativa o sinal de venda, gravo o preço da entrada

     m_PrecoEntrada = NormalizeDouble(m_trade.RequestPrice(),0);

Depois fico verificando se atingiu o pontos desejados para gain ou loss e tenta fechar a posição

m_PrecoAtual = NormalizeDouble(PrecoAtual(),0);

 if ((m_PrecoAtual <= (m_PrecoEntrada - m_pontosalvo)) || ((m_PrecoAtual >= m_PrecoEntrada + m_pontosalvo)))

 {

           m_trade.PositionClose(m_symbol,m_deviation);

}

Preço atual é gerado através da função PrecoAtual()

double CEngine::PrecoAtual(void)

{

 double last= SymbolInfoDouble(Symbol(),SYMBOL_LAST);

   int digits =(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);

   last=NormalizeDouble(last,digits);

   return last;

}

A verificação quando caminha a favor do gain funciona normalmente, porém quando caminha para o loss não é executado

Podem me ajudar

 
Maurício Júnior:


Olá Maurício,

qual é o erro que aparece no log?

 
Rogerio Giannetti Torres:

Olá Maurício,

qual é o erro que aparece no log?

No diário aparece esse erro:

2021.03.10 20:29:16.576 2021.03.08 10:49:17   Not enough money for ORDER_TYPE_BUY 3.0 WINJ21 Error code=4753

porém debugando, ele nao entra no if para fechar a posição quando o mercado está caminhando para o meu loss, já se ele esta caminhando para o meu gain ele entra no if e fecha a posição
 
Maurício Júnior:

No diário aparece esse erro:

2021.03.10 20:29:16.576 2021.03.08 10:49:17   Not enough money for ORDER_TYPE_BUY 3.0 WINJ21 Error code=4753

porém debugando, ele nao entra no if para fechar a posição quando o mercado está caminhando para o meu loss, já se ele esta caminhando para o meu gain ele entra no if e fecha a posição

Bom, 

ou você está vendo cabelo em sapo, ou tem BUG escandaloso no compilador, o que eu duvido muito.

Então faz um Print como mostrado abaixo, veja eu digitei o Print copiando exatamente como está no If.

      if((m_PrecoAtual <= (m_PrecoEntrada - m_pontosalvo)) || ((m_PrecoAtual >= m_PrecoEntrada + m_pontosalvo)))
        {
         Print(" Teste1: ", (m_PrecoAtual <= (m_PrecoEntrada - m_pontosalvo)));
         Print(" Teste2: ", (m_PrecoAtual >= m_PrecoEntrada + m_pontosalvo));
         m_trade.PositionClose(_Symbol, 0);
        }
 

Rogério muito obrigado pelo alerta do "cabelo em sapo", pois revisei todo o código novamente e descobri um furo em outra função, o que não deixava chegar na minha verificação.

Muito obrigado.  Problema resolvido.

Razão: