PositionSelectByTicket

Elige una posición abierta para trabajar posteriormente con ella según el ticket indicado. Retorna true en caso de que la función se ejecute con éxito. Retorna false en caso de que la función no se ejecute con éxito. Para obtener la información sobre el error, hay que llamar a la función GetLastError().

bool  PositionSelectByTicket(
   ulong   ticket     // ticket de la posición
   );

Parámetros

ticket

[in]  Ticket de la posición.

Valor devuelto

Valor del tipo bool.

Observación

La función PositionSelectByTicket() copia los datos sobre la posición en el entorno programático, y las siguientes llamadas de PositionGetDouble(), PositionGetInteger() y PositionGetString() retornarán los valores copiados anteriormente. Esto significa que la propia posición podría no existir ya (o haber modificado su volumen, dirección, etc.), pero sus datos podrían ser obtenidos todavía. Para obtener de forma garantizada datos recientes sobre una posición, se recomienda llamar a la función PositionSelectByTicket() justo antes de solicitarlos.

Ejemplo:

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos e inicializamos las estructuras de solicitud y resultado
   MqlTradeRequest request={};
   MqlTradeResult  result ={};
   
//--- rellenamos los parámetros de la solicitud comercial para abrir una posición larga
   request.action    = TRADE_ACTION_DEAL;                      // tipo de operación comercial
   request.symbol    = Symbol();                               // símbolo
   request.volume    = 0.1;                                    // volumen de 0.1 lote
   request.type      = ORDER_TYPE_BUY;                         // tipo de orden
   request.price     = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // precio de apertura
   request.deviation = 5;                                      // desviación permitida respecto al precio
   request.magic     = EXPERT_MAGIC;                           // MagicNumber de la orden
   
//--- enviar la solicitud, si la solicitud no se ha podido enviar, mostramos el código de error y finalizamos el funcionamiento
   if(!OrderSend(requestresult))
     {
      PrintFormat("OrderSend error "GetLastError());
      return;
     }
      
//--- mostramos la información sobre la operación
   PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u"result.retcoderesult.dealresult.order);
   
//--- obtenemos el ticket de la posición a partir del resultado de la operación comercial y seleccionamos la posición según el ticket
//--- el ticket de la posición recién abierta se corresponde con el ticket de la orden que ha generado la operación
   ulong ticket=result.order;
   ResetLastError();
   if(!PositionSelectByTicket(ticket))
     {
      PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d"ticketGetLastError());
      return;
     }
 
//--- mostramos en el registro los datos de la posición seleccionada según el ticket
   ENUM_POSITION_TYPE type  = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   long               time  = PositionGetInteger(POSITION_TIME_MSC);
   double             price = PositionGetDouble(POSITION_PRICE_OPEN);
   double             volumePositionGetDouble(POSITION_VOLUME);
   string             symbolPositionGetString(POSITION_SYMBOL);
   int                digits= (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   PrintFormat("Current selected position: %s %.2f %s #%I64u at %.*f, %s",
               symbolvolume, (type==POSITION_TYPE_BUY ? "Buy" : "Sell"), ticketdigitspriceTimeMscToString(time));
   /*
   resultado:
   Trade request resultretcode10009deal2778100901order2803905975
   Current selected positionEURUSD 0.10 Buy #2803905975 at 1.106722024.09.02 12:09:51.239
   */
  }
//+------------------------------------------------------------------+
//| Retorna la hora en milisegundos                                  |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Véase también

PositionGetSymbol(), PositionsTotal(), Propiedades de las posiciones