PositionGetDouble

La fonction retourne la propriété demandée d'une position ouverte, pré-sélectionnée avec PositionGetSymbol ou PositionSelect. La propriété de la position doit être de type double. Il existe 2 variantes de cette fonction.

1. Retourne immédiatement la valeur de la propriété.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // Identifiant de la propriété
   );

2. Retourne true ou false, suivant le succès de la fonction. En cas de succès, la valeur de la propriété est placée dans la variable correspondante passée par référénce (le dernier paramètre).

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // Identifiant de la propriété
   double&                        double_var       // Valeur de la propriété
   );

Paramètres

property_id

[in]  Identifiant de la propriété de la position. La valeur peut être l'une des valeurs de l'énumération ENUM_POSITION_PROPERTY_DOUBLE

double_var

[out]  Variable de type double qui prendra la valeur de la propriété demandée.

Valeur de Retour

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

Note

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.

Pour être sûr d'utiliser les données à jour d'une position, il est recommandé d'appeler PositionSelect() juste avant son utilisation.

Exemple :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- boucle sur toutes les positions du compte
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- obtient le ticket de la position suivante en sélectionnant automatiquement une position pour accéder à ses propriétés
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- récupère le type de position et affiche l'en-tête de la liste des propriétés réelles de la position
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- imprime toutes les propriétés réelles de la position sélectionnée sous l'en-tête
      PositionPropertiesDoublePrint(15);
     }
   /*
   résultat :
   Double properties of an open position Buy #2807075208:
   Volume:        1.00
   Price open:    1.10516
   StopLoss:      0.00000
   TakeProfit:    0.00000
   Price current1.10518
   Swap:          0.00
   Profit:        2.00 USD
   */
  }
//+------------------------------------------------------------------+
//| Affiche les propriétés réelles de la position sélectionnée  |
//+------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- récupère la devise du compte, le symbole de position et le nombre de décimales du symbole
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- définit le texte d'en-tête et la largeur du champ d'en-tête
//--- si la largeur de l'en-tête est passée à la fonction égale à zéro, alors la largeur sera la taille de la ligne d'en-tête + 1
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- récupère et affiche le volume de position avec la largeur d'en-tête spécifiée dans le journal
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- affiche la valeur du prix de la position dans le journal
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- affiche la valeur du StopLoss dans le journal
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- affiche la valeur du TakeProfit dans le journal
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- affiche la valeur 'Prix actuel' dans le journal
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- affiche la valeur du swap accumulé dans le journal
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- affiche la valeur actuelle du bénéfice dans le journal
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

Voir également

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