PositionGetDouble

A função retorna a propriedade solicitada de uma posição aberta, pré-selecionado usando PositionGetSymbol ou PositionSelect. A propriedade da operação deve ser do tipo double. Existem 2 variantes da função.

1. Imediatamente retorna o valor da propriedade.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // Identificador de propriedade
   );

2. Retorna true ou false dependendo do sucesso da execução da função. Se for bem sucedido, o valor da propriedade é colocada em uma variável de recebimento passada por referência no último parâmetro.

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // Identificador de propriedade
   double&                     double_var         // valor da propriedade
   );

Parâmetros

property_id

[in]  Identificador da propriedade da operação. O valor pode ser um dos valores da enumeração ENUM_POSITION_PROPERTY_DOUBLE.

double_var

[out]  Variável de tipo double, que aceita o valor da propriedade requerida.

Valor retornado

Valor do tipo double. Se a função falhar, será retornado 0.

Observação

Ao usar o registro de posições com "cobertura" (ACCOUNT_MARGIN_MODE_RETAIL_NETTING e ACCOUNT_MARGIN_MODE_EXCHANGE), para cada símbolo, em qualquer momento, pode estar aberta apenas a posição que resulte de uma ou mais operações. Não confunda as posições com as ordens pendentes ativas que aparecem na aba "Negociação" da janela "Caixa de ferramentas".

Ao usar a exibição independente de posições (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), pode haver várias posições abertas ao mesmo tempo para cada símbolo.

Para garantir o recebimento de novos dados sobre a posição, é recomendado chamar PositionSelect() logo antes referindo-se a eles.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- no loop por todas as posições na conta
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- obtemos o ticket da próxima posição, selecionando automaticamente a posição para acessar suas propriedades
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- obtemos o tipo da posição e imprimimos o cabeçalho para a lista de propriedades reais da posição
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- imprimimos sob o cabeçalho todas as propriedades reais da posição selecionada
      PositionPropertiesDoublePrint(15);
     }
   /*
   Resultado:
   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
   */
  }
//+------------------------------------------------------------------+
//| Imprime no log as propriedades reais da posição selecionada      |
//+------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- obtemos a moeda da conta, o símbolo da posição e o número de dígitos após a vírgula para o símbolo
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- definimos o texto do cabeçalho e a largura do campo de cabeçalho
//--- se a largura do cabeçalho for passada para a função igual a zero, a largura será o tamanho da linha do cabeçalho + 1
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- obtemos e imprimimos no log o volume da posição com um cabeçalho de largura definida
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- imprimimos no log o valor do preço da posição
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- imprimimos no log o valor do StopLoss
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- imprimimos no log o valor do TakeProfit
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- imprimimos no log o valor do Preço Atua
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
l//--- imprimimos no log o valor do swap acumulado
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- imprimimos no log o valor do lucro atual
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

Também Veja

PositionGetSymbol(), PositionSelect(), Propriedades de uma Posição