Error al modificar una posicion

 

Buenos días, estoy intentando modificar los StopLoss y TakeProfit de una posición abierta
Y me canta error continuamente, he mirado la información de la función y no se si me falta algo que establecer antes o que sucede.


Lo he intentado tanto en el evento OnTrade como en el evento OnTick


Codigo:

            ulong spread = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

            double price_open=PositionGetDouble(POSITION_PRICE_OPEN); 

      double stoploss; //= price_open-inpSL;

      double takeprofit; //= price_open+inpTP;

   

       stoploss=PositionGetDouble(POSITION_SL); 

       takeprofit=PositionGetDouble(POSITION_TP); 

       

       if (stoploss == 0)

       {

               Print("El Ticket: ", ticket, " no tiene configurado el #SL:", stoploss, " -- Nuevo SL: ", price_open-inpSL+spread);

          stoploss = price_open-inpSL+spread;

               modificar = true;

       }

       


       if (takeprofit == 0)

       {

               Print("El Ticket: ", ticket, " no tiene configurado el #TP:", takeprofit, " -- Nuevo TP: ", price_open+inpSL+spread);

          takeprofit= price_open+inpTP+spread;

               modificar = true;

       }


       if (modificar) 

      {

               if (trade.PositionModify(ticket, stoploss, takeprofit)) 

Print("Ticket " + (string) ticket + " modificado por #ticket"); 

else 

Alert((string) trade.ResultRetcode() + "No se ha podido modificar");

            }



Un ejemplo en el DAX del resultado:

CTrade::OrderSend: modify position DAX30 (sl: 14718.14, tp: 14758.14) [invalid stops]

El precio de mercado estaba en ese momento justo en medio  (14738.14)




 
RI2022:

Buenos días, estoy intentando modificar los StopLoss y TakeProfit de una posición abierta
Y me canta error continuamente, he mirado la información de la función y no se si me falta algo que establecer antes o que sucede.


Lo he intentado tanto en el evento OnTrade como en el evento OnTick


Codigo:

            ulong spread = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

            double price_open=PositionGetDouble(POSITION_PRICE_OPEN); 

      double stoploss; //= price_open-inpSL;

      double takeprofit; //= price_open+inpTP;

   

       stoploss=PositionGetDouble(POSITION_SL); 

       takeprofit=PositionGetDouble(POSITION_TP); 

       

       if (stoploss == 0)

       {

               Print("El Ticket: ", ticket, " no tiene configurado el #SL:", stoploss, " -- Nuevo SL: ", price_open-inpSL+spread);

          stoploss = price_open-inpSL+spread;

               modificar = true;

       }

       


       if (takeprofit == 0)

       {

               Print("El Ticket: ", ticket, " no tiene configurado el #TP:", takeprofit, " -- Nuevo TP: ", price_open+inpSL+spread);

          takeprofit= price_open+inpTP+spread;

               modificar = true;

       }


       if (modificar) 

      {

               if (trade.PositionModify(ticket, stoploss, takeprofit)) 

Print("Ticket " + (string) ticket + " modificado por #ticket"); 

else 

Alert((string) trade.ResultRetcode() + "No se ha podido modificar");

            }



Un ejemplo en el DAX del resultado:

CTrade::OrderSend: modify position DAX30 (sl: 14718.14, tp: 14758.14) [invalid stops]

El precio de mercado estaba en ese momento justo en medio  (14738.14)




Suele haber una distancia mínima para colocar los stops SYMBOL_TRADE_STOPS_LEVEL.

Como es un número entero tendrás que multiplcarlo por _Point y sumar o restar al precio Ask/Bid para obtener el precio mínimo al que puedes moverlos para que te acepte la orden.

https://www.mql5.com/es/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Estado de entorno / Información sobre el instrumento
Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Estado de entorno / Información sobre el instrumento
  • www.mql5.com
Información sobre el instrumento - Estado de entorno - Constantes, Enumeraciones y Estruturas - Manual de referencia de MQL5 - manual de usuario para el lenguaje del trading algorítmico/automático para MetaTrader 5