OrderGetTicket

Retourne le ticket de l'ordre correspondant et sélectionne automatiquement l'ordre pour pouvoir l'utiliser ensuite avec les fonctions.

ulong  OrderGetTicket(
   int  index      // indice dans la liste des ordres
   );

Parameters

index

[in]  Numéro de l'ordre dans la liste des ordres en cours.

Valeur de Retour

Valeur de type ulong. Si la fonction échoue, retourne 0.

Note

Ne confondez pas les ordres en attente en cours avec les positions, qui sont également affichées dans l'onglet Trading de la fenêtre Boîte à Outils. Un ordre est une demande (ou requête) d'effectuer une transaction, tandis qu'une position est le résultat de l'une ou plusieurs transactions.

Pour le "netting" des positions (ACCOUNT_MARGIN_MODE_RETAIL_NETTING et ACCOUNT_MARGIN_MODE_EXCHANGE), seule une position peut exister pour un même symbole à tout moment. Cette position est le résultat d'une ou plusieurs transactions. Ne confondez pas les positions avec les ordres en attente valides, qui sont également affichés dans l'onglet Trading de la fenêtre Boîte à Outils.

Si les positions individuelles sont autorisées (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), plusieurs positions peuvent être ouvertes pour un même symbole.

La fonction OrderGetTicket() copie les données d'une position dans l'environnement du programme et les appels ultérieurs à OrderGetDouble(), OrderGetInteger() et OrderGetString() retournent les données copiées auparavant. Cela signifie que l'ordre lui-même peut ne plus exister (ou que son prix d'ouverture, son Stop Loss, son Take Profit ou son expiration a changé), mais que les données de cet ordres sont toujours accessibles. Pour être sûr d'utiliser les données à jour d'un ordre, il est recommandé d'appeler OrderGetTicket() juste avant son utilisation.

Exemple :

void OnStart()
  {
//--- variables pour retourner les valeurs des propriétés de l'ordre
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
   long     positionID;
//--- nombre d'ordres en attente en cours
   uint     total=OrdersTotal();
//--- parcours les ordres dans une boucle
   for(uint i=0;i<total;i++)
     {
      //--- retourne le ticket de l'ordre par sa position dans la liste
      if((ticket=OrderGetTicket(i))>0)
        {
         //--- retourne les propriétés de l'ordre
         open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
         time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
         symbol        =OrderGetString(ORDER_SYMBOL);
         order_magic   =OrderGetInteger(ORDER_MAGIC);
         positionID    =OrderGetInteger(ORDER_POSITION_ID);
         initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
         type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
         //--- prépare et affiche les informations de l'ordre
         printf("#ticket %d %s %G %s à %G a été établie à %s",
                ticket,                 // ticket de l'ordre
                type,                   // type
                initial_volume,         // volume placé
                symbol,                 // symbole
                open_price,             // prix d'ouverture spécifié
                TimeToString(time_setup)// heure du placement de l'ordre
                );
        }
     }
//---
  }

Voir également

OrdersTotal(), OrderSelect(), OrderGetInteger()