PositionGetDouble

La funzione restituisce la proprietà richiesta di una posizione aperta, preselezionata usando PositionGetSymbol o PositionSelect. La proprietà della funzione deve essere di tipo double. Ci sono 2 varianti della funzione.

1. Restituisce immediatamente il valore della proprietà.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // Identificativo della proprietà
   );

2. Restituisce true o false, a seconda del successo della esecuzione della funzione. Se si ha successo, il valore della proprietà viene posto in una variabile ricevente passata per riferimento dall'ultimo parametro.

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // Identificativo della proprietà
   double&                        double_var       // Qui si accetta il valore della proprietà
   );

Parametri

property_id

[in] Identificativo della proprietà della posizione. Il valore può essere uno dei valori dell'enumerazione ENUM_POSITION_PROPERTY_DOUBLE.

double_var

[out] Variabile di tipo double, che accetta il valore della proprietà richiesta.

Valore restituito

Valore di tipo double. Se la funzione fallisce, viene restituito 0.

Nota

Per l'interpretazione "netting" delle posizioni (ACCOUNT_MARGIN_MODE_RETAIL_NETTING e ACCOUNT_MARGIN_MODE_EXCHANGE), può esistere in qualsiasi momento una sola posizione per un simbolo. Questa posizione è il risultato di una o più operazioni. Non confondere le posizioni con gli ordini pendenti vigenti, che sono anche visualizzati nella scheda Trading della finestra BoxAttrezzi.

Se sono ammesse posizioni individuali (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), per un simbolo possono essere aperte più posizioni.

Per garantire la ricezione dei nuovi dati sulla posizione, si raccomanda di chiamare PositionSelect() giusto prima di fare riferimento ad essi.

Esempio:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- in un ciclo per tutte le posizioni del conto
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- ottenere il ticket della posizione successiva selezionando automaticamente una posizione per accedere alle sue proprietà
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- ottenere il tipo di posizione e visualizzare l'intestazione per la lista delle proprietà reali della posizione
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- stampare tutte le proprietà reali della posizione selezionata sotto l'intestazione
      PositionPropertiesDoublePrint(15);
     }
   /*
   risultato:
   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
   */
  }
//+-------------------------------------------------------------------------------------------------+
//| Visualizzare le proprietà reali della posizione selezionata nel journal                         |
//+-------------------------------------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- ottenere la valuta del conto, il simbolo della posizione e il numero di decimali per il simbolo
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- definire il testo dell'intestazione e la larghezza del campo dell'intestazione
//--- se la larghezza dell'intestazione viene passata alla funzione uguale a zero, allora la larghezza sarà la dimensione della riga dell'intestazione + 1
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- ottenere e visualizzare il volume della posizione con la larghezza dell'intestazione specificata nel journal
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- visualizzare il valore del prezzo della posizione nel journal
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- visualizzare il valore dello StopLoss nel journal
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- visualizzare il valore del TakeProfit nel journal
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- visualizzare il valore del 'Prezzo corrente' nel journal
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- visualizzare il valore di swap accumulato nel journal
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- visualizzare il valore attuale del profitto nel journal
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

Vedi anche

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