PositionSelectByTicket

Sélectionne une position ouverte par son numéro de ticket spécifié pour pouvoir l'utiliser. Retourne true en cas de succès. Sinon retourne false. Appelez GetLastError() pour obtenir des détails sur l'erreur.

bool  PositionSelectByTicket(
   ulong   ticket     // Ticket de la position
   );

Paramètres

ticket

[in]  Ticket de la position.

Valeur de Retour

Une valeur de type bool.

Note

La fonction PositionSelectByTicket() copie les données de la position dans l'environnement du programme. Les appels ultérieurs à PositionGetDouble(), PositionGetInteger() et PositionGetString() retournent les données précédemment copiées. Même si une position n'existe plus (ou que son volume, sa direction, etc. a changé), les données sont toujours disponibles. Pour être sûr de recevoir des données valides de la position, il est recommandé d'appeler PositionSelectByTicket() juste avant son utilisation.

Exemple :

#define   EXPERT_MAGIC  123456   // MagicNumber
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- déclare et initialise les structures de requête et de résultat
   MqlTradeRequest request={};
   MqlTradeResult  result ={};
   
//--- remplit les paramètres de la demande de trade pour ouvrir une position longue
   request.action    = TRADE_ACTION_DEAL;                      // type de l'opération de trading
   request.symbol    = Symbol();                               // symbole
   request.volume    = 0.1;                                    // volume de 0,1 lot
   request.type      = ORDER_TYPE_BUY;                         // type d'ordre
   request.price     = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // prix d'ouverture
   request.deviation = 5;                                      // déviation autorisée par rapport au prix
   request.magic     = EXPERT_MAGIC;                           // MagicNumber de l'ordre
   
//--- envoie une demande. En cas d'échec de l'envoi d'une demande, affiche le code d'erreur et termine l'opération
   if(!OrderSend(requestresult))
     {
      PrintFormat("OrderSend error "GetLastError());
      return;
     }
      
//--- affiche les données de l'opération
   PrintFormat("Trade request result: retcode: %u, deal: %I64u, order: %I64u"result.retcoderesult.dealresult.order);
   
//--- récupère le ticket de position à partir du résultat de l'opération de trading et sélectionne la position par ticket
//--- le ticket d'une position nouvellement ouverte correspond au ticket de l'ordre qui a généré la transaction
   ulong ticket=result.order;
   ResetLastError();
   if(!PositionSelectByTicket(ticket))
     {
      PrintFormat("PositionSelectByTicket(%I64u) failed. Error %d"ticketGetLastError());
      return;
     }
 
//--- affiche les données d'une position, sélectionné par ticket, dans le 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));
   /*
   résultat :
   Trade request resultretcode10009deal2778100901order2803905975
   Current selected positionEURUSD 0.10 Buy #2803905975 at 1.106722024.09.02 12:09:51.239
   */
  }
//+------------------------------------------------------------------+
//| Retourne l'heure en millisecondes                                |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Voir également

PositionGetSymbol(), PositionsTotal(), Propriétés d'une Position