Rôbo não encerrando posições no Stop Loss e no Take profit definidos

 

Bom dia pessoal,


Sou iniciante no desenvolvimento de robôs e provavelmente minha dúvida seja iniciante.

Estou programando este robô mas ele não sai das operações. Ele consegue entrar mas não consegue stopar nem no GAIN nem no LOSS.


Poderiam me ajudar?

bool Buy()
{
   MqlTradeRequest request;
   MqlTradeResult result;
   MqlTradeCheckResult checkResult;
   
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(checkResult);
   
   request.action=TRADE_ACTION_DEAL;
   request.type=ORDER_TYPE_BUY;
   request.symbol=_Symbol;
   request.volume=lote;
   request.magic=EA_Magic;
   request.deviation=2.0;
   request.type_filling=ORDER_FILLING_RETURN;
   request.price=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), 2);
   request.sl=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 2.0, 2);
   request.tp=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) + TP, 2);
   
   
   if(!OrderCheck(request, checkResult))
   {
      Print("Erro na checagem da ordem: ", GetLastError());
      Print("Código de erro: ", checkResult.retcode);
      return false;
   }
   
   
   Print("Saldo: ", ACCOUNT_BALANCE);
   Print("Saldo após operação: ", checkResult.balance);
   
   if(!OrderSend(request, result))
   {
      Print("Erro no envio da ordem: ", GetLastError());
      Print("Código de retorno do erro: ", result.retcode);
      return false;
   }
   
   return true;  
   
   
}
 
Vlehmann:

Bom dia pessoal,


Sou iniciante no desenvolvimento de robôs e provavelmente minha dúvida seja iniciante.

Estou programando este robô mas ele não sai das operações. Ele consegue entrar mas não consegue stopar nem no GAIN nem no LOSS.


Poderiam me ajudar?

Você testou o que escreveu com um "Print", por exemplo?

Para que utilizar o NormalizeDouble??

O TP você declarou em algum lugar, o SL não. Nao seria boa pratica utilizar o mesmo padrão: se declarar um, declara o outro?

Você acompanhou a aba diário? O que diz la?

Outro alerta: Você apenas captura o código de erro e não faz tratamento. Precisa tratar os erros!! Que erro retornou no envio das ordens SL e TP?

 
Joscelino Celso de Oliveira:

Você testou o que escreveu com um "Print", por exemplo?

Para que utilizar o NormalizeDouble??

O TP você declarou em algum lugar, o SL não. Nao seria boa pratica utilizar o mesmo padrão: se declarar um, declara o outro?

Você acompanhou a aba diário? O que diz la?

Outro alerta: Você apenas captura o código de erro e não faz tratamento. Precisa tratar os erros!! Que erro retornou no envio das ordens SL e TP?

Boa tarde Joscelino,

Obrigado pelo feedback.

Esse código é só pela aprendizagem mesmo. Eu testei o mesmo código com ativo de FOREX e funcionou. Não sei porque nos ativos da BOVESPA não funcionou.

Razão: