failed modify order #265238079 buy 0.00 WINZ19 at market sl: 0 tp: 0 -> 112040, sl: 112050 tp: 111045 [Invalid request]

 

Olá amigos! apresenta esse erro constantemente no meu Expert! alguém pode me ajudar?  = 



void ModificarOrdem(double preco)

  {

   for(int i = 0; i < OrdersTotal(); i++)

     {

         ulong ticket = OrderGetTicket(i);

         //Verifica o número mágico

         if(OrderGetInteger(ORDER_MAGIC) == numero_magico && OrderGetString(ORDER_SYMBOL) == _Symbol)

           {

             double askNow =NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

            double bidNow =NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); 

            

                 double SL = (bidNow-qtd_pontos*_Point)+stop*_Point;

                 double TP = (askNow-qtd_pontos*_Point)-take*_Point;       

                   PRC = NormalizeDouble(ticks.last, _Digits);

                 

               //Modifica a ordem

               if(trade.OrderModify(ticket, PRC - qtd_pontos*_Point, SL, TP, ORDER_TIME_GTC, 0, 0))

                 {


                 }

               else

                 {

                  Print("Erro ao modificar ordem ", GetLastError());

                   

                 }

              }

           }

        }

failed modify order #265238079 buy 0.00 WINZ19 at market sl: 0 tp: 0 -&gt; 112040, sl: 112050 tp: 111045 [Invalid request]
failed modify order #265238079 buy 0.00 WINZ19 at market sl: 0 tp: 0 -&gt; 112040, sl: 112050 tp: 111045 [Invalid request]
  • 2019.12.16
  • www.mql5.com
Olá amigos! apresenta esse erro constantemente no meu Expert! alguém pode me ajudar...
 
pabloelchapo22:

Olá amigos! apresenta esse erro constantemente no meu Expert! alguém pode me ajudar?  = 



void ModificarOrdem(double preco)

  {

   for(int i = 0; i < OrdersTotal(); i++)

     {

         ulong ticket = OrderGetTicket(i);

         //Verifica o número mágico

         if(OrderGetInteger(ORDER_MAGIC) == numero_magico && OrderGetString(ORDER_SYMBOL) == _Symbol)

           {

             double askNow =NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

            double bidNow =NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); 

            

                 double SL = (bidNow-qtd_pontos*_Point)+stop*_Point;

                 double TP = (askNow-qtd_pontos*_Point)-take*_Point;       

                   PRC = NormalizeDouble(ticks.last, _Digits);

                 

               //Modifica a ordem

               if(trade.OrderModify(ticket, PRC - qtd_pontos*_Point, SL, TP, ORDER_TIME_GTC, 0, 0))

                 {


                 }

               else

                 {

                  Print("Erro ao modificar ordem ", GetLastError());

                   

                 }

              }

           }

        }

Como é que você faz um BUY à mercado e o preço de SL é maior que o TP ??!

 

Olá. Obrigado por sua ajuda! Por favor pode me auxiliar em algo mais... acho que estou programando errado a função NormalizeDouble,  veja o codigo a baixo!



void OnTick()

  {


 int copied = CopyRates(_Symbol, _Period, 0, 2, rates);

   if(copied < 0)

      return;

   if(!SymbolInfoTick(_Symbol, ticks))

   {

            Alert("Erro ao obter informações de Preços: ", GetLastError());

            return;

         }


//Estratégia


   if(SemOrdem() && SemPosicao())

     {

         

         Venda(ticks.last - qtd_pontos * _Point);

         

        {

           ModificarOrdem(ticks.last);

           

 if(TotalOrdens() == 0)

{

  Sleep(10000);

 

  }

  ModificarOrdem(ticks.last);

     }


// ------------------------------------------------------------------------------

void Venda(double pr)

  {

     double askNow =NormalizeDouble(ticks.last,_Digits);

    double PRR = askNow;

    double SL = askNow+stopLoss*_Point;

    double TP = askNow-takeProfit*_Point;

 

   if(trade.SellStop(lote, PRR, _Symbol, SL, TP, ORDER_TIME_GTC, 0, "Compra"))

     {

      

     }

   else

     {

      Print("Erro ao adicionar compra ", GetLastError());

     }

  }

// ---- ERRO:  2019.12.17 11:26:09.222 Trades '3000836776': failed sell stop 1.00 WINZ19 at 112275 sl: 112285 tp: 111775 [Invalid price]


void ModificarOrdem(double preco)

  {

   for(int i = 0; i < OrdersTotal(); i++)

     {

         ulong ticket = OrderGetTicket(i);

         //Verifica o número mágico

         if(OrderGetInteger(ORDER_MAGIC) == numero_magico && OrderGetString(ORDER_SYMBOL) == _Symbol)

           { 

         double askNow =NormalizeDouble(ticks.last,_Digits);

    double PRR = askNow;

   double SL = (askNow-qtd_pontos*_Point)+stopLoss*_Point;

    double TP = (askNow-qtd_pontos*_Point)-takeProfit*_Point;

           

       

               //Modifica a ordem

               if(trade.OrderModify(ticket, PRR - qtd_pontos*_Point, SL, TP, ORDER_TIME_GTC, 0, 0))

                 {


                 }

               else

                 {

                  Print("Erro ao modificar ordem ", GetLastError());

                   

                 }

              }

           }

        }


    // ------------------------------------------------------------------------------

   int TotalOrdens()

  {

   int contador = 0;

   for(int i = 0; i < OrdersTotal(); i++)

     {

      ulong ticket = OrderGetTicket(i);

      if(OrderSelect(ticket))

        {

         if(OrderGetInteger(ORDER_MAGIC) == numero_magico && OrderGetString(ORDER_SYMBOL) == _Symbol)

           {

            contador++;

           }

        }

     }

   return contador;

  }

Razão: