PositionGetDouble

Die Funktion gibt die angeforderte Eigenschaft der offenen Position zurück, die vorläufig mittels der Funktion PositionGetSymbol oder PositionSelect ausgewählt wurde. Die Podsitionseigenschaft muss vom Typ double sein.  Es gibt 2 Varianten der Funktion.

1. Gibt den Wert  der Eigenschaft selbst zurück.

double  PositionGetDouble(
    ENUM_POSITION_PROPERTY_DOUBLE  property_id      // Identifikator der Eigenschaft
   );

2. Gibt true oder false zurück, abhängig davon, ob die Funktion erfolgreich durchgeführt wird. Bei erfolgreicher Durchführung wird der Wert der Eigenschaft  der Empfangsvariablen zugewiesen, die durch Referenz als letzter Parameter übertragen wird.  

bool  PositionGetDouble(
    ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // Identifikator der Eigenschaft 
   double&                         double_var       // hier nehmen wir den Wert der Eigenschaft auf 
   );

Parameter

property_id

[in]  Identifikator der Positionseigenschaft. Der Wert kann einer der Enumerationswerte ENUM_POSITION_PROPERTY_DOUBLE sein.

double_var

[out]  Variable vom Typ double, der der Wert der angeforderten Eigenschaft zugewiesen wird.

Rückgabewert

Wert vom Typ double.

Hinweis

Im Netting Mode (ACCOUNT_MARGIN_MODE_RETAIL_NETTING und ACCOUNT_MARGIN_MODE_EXCHANGE) kann nur eine Position pro Symbol vorhanden sein, die das Ergebnis eines oder mehrerer Handelsgeschäfte darstellt. Man darf Positionen und aktuelle Pending Orders, die auch im Tab Handel in der Werkzeugleiste angezeigt werden, nicht miteinander verwechseln.

Bei einer unabhängigen Verrechnung von Positionen (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) können gleichzeitig mehrere Positionen für ein Symbol existieren.

Um aktuelle Details zu einer Position zu erhalten, sollte man unmittelbar davor die Funktion PositionSelect() aufrufen.

Beispiel:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- in einer Schleife durch die Liste aller Positionen des Kontos
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- Abrufen des Tickets der nächsten Position, durch die automatische Auswahl einer Position, um auf ihre Eigenschaften zuzugreifen
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- Positionstyp abrufen und Kopfzeile für die Liste der „double“-Eigenschaften der Position anzeigen
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- alle „double“-Eigenschaften der ausgewählten Position unter der Kopfzeile ausdrucken
      PositionPropertiesDoublePrint(15);
     }
   /*
   Ergebnis:
   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
   */
  }
//+------------------------------------------------------------------+
//| „double“-Eigenschaften der gewählten Position ins Journal drucken|
//+------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- Kontowährung, Positionssymbol und Anzahl der Dezimalstellen für das Symbol abrufen
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- Definieren der Kopftextes und der Breite des Textfeldes
//--- Wenn der Funktion eine Breite von Null übergeben wird, dann ist die Breite die Größe der Kopfzeile + 1
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- Abrufen und Ausdruck von Positionsvolumen mit der angegebenen Breite der Kopfzeile im Journal
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- Anzeige des Preises der Position im Journal
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- Wert des StopLoss im Journal anzeigen
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- Wert des TakeProfit im Journal anzeigen
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- den Wert „Aktueller Preis“-im Journal anzeigen
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- kumulierten Swap-Wert im Journal anzeigen
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- aktuellen Gewinn im Journal anzeigen
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

Siehe auch

PositionGetSymbol(), PositionSelect(), Eigenschaften der Positionen