PositionSelectByTicket

Seleciona uma posição aberta para trabalhar no futuro com ela segundo o ticket indicado. Retorna true se a função for bem-sucedida. Retorna false se a função falhar. Para mais informações sobre o erro, chame a função GetLastError().

bool  PositionSelectByTicket(
   ulong   ticket     // ticket da posição
   );

Parâmetros

ticket

[in]  Bilhete da posição.

valor de retorno

Valor do tipo bool.

Observação

A função PositionSelectByTicket() copia os dados da posição para o ambiente do software, e chamadas subsequentes de PositionGetDouble(), PositionGetInteger() e PositionGetString() retornam esses dados copiados anteriormente. Isso significa que a posição em si pode já não existir (ou ter alterado o volume, a direção, etc.), mas ainda assim os dados dessa posição podem ser obtidos. Para garantir que os dados das posições estejam atualizados, é recomendável chamar a função PositionSelectByTicket() logo antes de acessá-los.

Exemplo:

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos e inicializamos as estruturas de solicitação e resultado
   MqlTradeRequest request={};
   MqlTradeResult  result ={};
   
//--- preenchemos os parâmetros da solicitação de negociação para abrir uma posição longa
   request.action    = TRADE_ACTION_DEAL// tipo de operação de negociação
   request.symbol    = symbol;            // símbolo
   request.volume    = 0.1;                                    // volume de 0.1 lote
   request.type      = ORDER_TYPE_BUY;                         // tipo de ordem
   request.price     = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // preço para abertura
   request.deviation = 5;                                      // desvio admissível em relação ao preço
   request.magic     = EXPERT_MAGIC;      // MagicNumber da ordem
   
//--- enviamos a solicitação, se o envio falhar, imprimimos o código de erro e encerramos o trabalho
   if(!OrderSend(requestresult))
     {
      PrintFormat("OrderSend error "GetLastError());
      return;
     }
      
//--- imprimimos informações sobre a operação
   PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u"result.retcoderesult.dealresult.order);
   
//--- obtemos o ticket da posição a partir do resultado da operação de negociação e selecionamos a posição pelo ticket
//--- o ticket da posição recém-aberta corresponde ao ticket da ordem que gerou a operação
   ulong ticket=result.order;
   ResetLastError();
   if(!PositionSelectByTicket(ticket))
     {
      PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d"ticketGetLastError());
      return;
     }
 
//--- imprimimos no log os dados da posição selecionada pelo 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 o tempo em milissegundos                                 |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Veja também

PositionGetSymbol(), PositionsTotal(), Propriedades das posições