PositionSelectByTicket

Seleziona una posizione aperta per lavorare in base al numero di ticket specificato nella posizione. Se ha successo, restituisce true. Restituisce false se la funzione fallisce. Chiamare GetLastError() per i dettagli dell'errore.

bool  PositionSelectByTicket(
   ulong   ticket     // Ticket della posizione
   );

Parametri

ticket

[in] Ticket della posizione.

Valore Restituito

Un valore di tipo bool.

Nota

La funzione PositionSelectByTicket() copia i dati della posizione nell'ambiente del programma. Ulteriori chiamate di PositionGetDouble(), PositionGetInteger() e PositionGetString() restituiscono i dati precedentemente copiati. Anche se una posizione non esiste più (o la sua dimensione, direzione ecc. è cambiata), i dati possono ancora essere ricevuti a volte. Per essere sicuri di ricevere dati validi sulla posizione, si consiglia di chiamare PositionSelectByTicket() prima di accedere ai dati.

Esempio:

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- dichiarare e inizializzare le strutture di richiesta e risultato
   MqlTradeRequest request={};
   MqlTradeResult  result ={};
   
//--- Inserire i parametri della richiesta di trade per aprire una posizione lunga
   request.action    = TRADE_ACTION_DEAL;                      // tipo di operazione di trading
   request.symbol    = Symbol();                               // simbolo
   request.volume    = 0.1;                                    // volume di 0.1 lotti
   request.type      = ORDER_TYPE_BUY;                         // tipo di ordine
   request.price     = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // prezzo di apertura
   request.deviation = 5;                                      // deviazione consentita dal prezzo
   request.magic     = EXPERT_MAGIC;                           // MagicNumber dell'ordine
   
//--- inviare una richiesta. Se l'invio di una richiesta fallisce, visualizzare il codice di errore e completare l'operazione
   if(!OrderSend(requestresult))
     {
      PrintFormat("OrderSend error "GetLastError());
      return;
     }
      
//--- visualizzare i dati dell'operazione
   PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u"result.retcoderesult.dealresult.order);
   
//--- ottenere il ticket della posizione dal risultato dell'operazione di trade e selezionare la posizione per ticket
//--- il ticket di una posizione appena aperta corrisponde al ticket dell'ordine che ha generato l'operazione
   ulong ticket=result.order;
   ResetLastError();
   if(!PositionSelectByTicket(ticket))
     {
      PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d"ticketGetLastError());
      return;
     }
 
//--- visualizzare i dati di una posizione, selezionata tramite ticket, nel journal
   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));
   /*
   risultato:
   Trade request resultretcode10009deal2778100901order2803905975
   Current selected positionEURUSD 0.10 Buy #2803905975 at 1.106722024.09.02 12:09:51.239
   */
  }
//+------------------------------------------------------------------+
//| Restituisce il tempo con millisecondi                            |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Vedere anche

PositionGetSymbol(), PositionsTotal(), Proprietà delle Posizioni