ERRO NO BREAKEVEN

 

Olá, o meu breakeven é acionado, mas fica aparecendo mensagem de erro no trade.PositionsModify. O meu stop é movido para o preço de entrada e logo em seguida fica dando erro no meu stop loss. 


Obs.: Eu estou usando uma conta Hedge


Vou disponibilizar o meu código e a imagem com a mensagem de erro:

bool Breakeven()
  {
   //+------------------------------------------------------------------+
   //| CALCULAR O PREÇO DE REFERÊNCIA DO TS                             |
   //+------------------------------------------------------------------+
   double newSLPrice    = 0;
   ulong  refTicket     = 0;
   double currTPPrice   = 0;
   double preco_entrada = PositionGetDouble(POSITION_PRICE_OPEN);
   bool   BK_1          = false;
   
   //+------------------------------------------------------------------+
   //| CASO COMPRADO                                                    |
   //+------------------------------------------------------------------+
   if(comprado)
     {
      if(PositionSelectByTicket(ticketComprado))
        {
         double positionSL = PositionGetDouble(POSITION_SL);
         currTPPrice       = PositionGetDouble(POSITION_TP);
         
         if(positionSL>0)
           {
            //
            if( Breakeven==Breakeven_1 )
              {
               if( BK_1 == false && tick.ask > preco_entrada + NormalizeDouble(500*_Point, _Digits) )
                 {
                  newSLPrice = preco_entrada;
                  refTicket  = ticketComprado;
                  BK_1       = true;
                  Print("BREAKEVEN DE COMPRA ATIVADO COM SUCESSO");
                 }
              
            
           }
        }
     }
  }
   
   
   //+------------------------------------------------------------------+
   //| LÓGICA DE MOVIMENTAÇÃO DO SL                                     |
   //+------------------------------------------------------------------+
   if(newSLPrice>0)
     {
      bool ok = trade.PositionModify(refTicket,newSLPrice,currTPPrice);
      if(ok)
        {
         if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
           {
            Print("TS atualizado com sucesso!");
           }
         else
           {
            Print("ERRO - > Retorno inesperado do servidor");
            return(false);
           }
        }
      else
        {
         Print("ERRO - > Erro ao enviar trade.PositionModify");
         return(false);
        }
     }
   
   //
   return(false);
  }


Eu estou disponibilizando apenas o código de compra como exemplo.

Arquivos anexados:
img.jpg  38 kb
 
Rafael Magalhães:

Olá, o meu breakeven é acionado, mas fica aparecendo mensagem de erro no trade.PositionsModify. O meu stop é movido para o preço de entrada e logo em seguida fica dando erro no meu stop loss. 


Obs.: Eu estou usando uma conta Hedge


Vou disponibilizar o meu código e a imagem com a mensagem de erro:


Eu estou disponibilizando apenas o código de compra como exemplo.

Coloca os logs da abertura da posição também

 
Rafael Magalhães:

Olá, o meu breakeven é acionado, mas fica aparecendo mensagem de erro no trade.PositionsModify. O meu stop é movido para o preço de entrada e logo em seguida fica dando erro no meu stop loss. 


Obs.: Eu estou usando uma conta Hedge


Vou disponibilizar o meu código e a imagem com a mensagem de erro:


Eu estou disponibilizando apenas o código de compra como exemplo.

Se o novo SL e o novo TP foram iguais aos valores atuais para a posição, então não há necessidade de alteração. Essa é causa do esse erro.

Verifique se é o caso antes, de solicitar a alteração, como destacado no exemplo abaixo.

bool ExpertPositionModify(const ulong ticket, double stop, double take)
  {
   if(positions_total<=0)
     {
      return false;
     }
   double sl = NormalizeDouble(stop,_Digits);
   double tp = NormalizeDouble(take,_Digits);
   if(!expert_position.SelectByTicket(ticket))
     {
      Print(MQLInfoString(MQL_PROGRAM_NAME),", Erro ",(string)GetLastError()," ao selecionar posição! Stops não alterados!");
      ResetLastError();
      return false;
     }
   if(sl==expert_position.StopLoss()&&tp==expert_position.TakeProfit())
     {
      Print(MQLInfoString(MQL_PROGRAM_NAME),", Stops não alterados!");
      return true;
     }
   if(!trade.PositionModify(ticket,sl,tp))
     {
      Print(MQLInfoString(MQL_PROGRAM_NAME),", Erro ",(string)trade.ResultRetcode(),", ",trade.ResultRetcodeDescription(),", Stops não alterados!");
      if(!expert_position.SelectByTicket(ticket))
        {
         Print(MQLInfoString(MQL_PROGRAM_NAME),", A Posição ",ticket," não existe!");
        }
      return false;
     }
   Print(MQLInfoString(MQL_PROGRAM_NAME)+", Stops alterados para a posição: "+(string)ticket);
   return true;
  }
Razão: