OrderGetDouble

Retorna a propriedade solicitada de uma ordem, previamente selecionada usando OrderGetTicket ou OrderSelect. A propriedade da ordem deve ser do tipo double. Existem 2 variantes da função.

1. Imediatamente retorna o valor da propriedade.

double  OrderGetDouble(
   ENUM_ORDER_PROPERTY_DOUBLE  property_id        // Identificador de propriedade
   );

2. A função retorna true ou false, dependendo se a execução foi bem-sucedida. Se for bem-sucedida, o valor da propriedade é armazenado em uma variável passada por referência como o último parâmetro.

bool  OrderGetDouble(
   ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // Identificador de propriedade
   double&                     double_var         // valor da propriedade
   );

Parâmetros

property_id

[in]  Identificador da propriedade da ordem. O valor pode ser um dos valores da enumeração ENUM_ORDER_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

Não confunda ordens pendentes com posições, que também são exibidos na aba "negócios" da "caixa de ferramentas" do terminal do cliente.

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 que os dados da posição estejam atualizados, é recomendável chamar OrderSelect() logo antes de acessá-los.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- no loop pela lista de todas as ordens na conta
   int total=OrdersTotal();
   for(int i=0i<totali++)
     {
      //--- obtemos a ordem dos tickets na lista por índice de loop
      ulong ticket=OrderGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- obtemos o tipo de ordem e gerar o cabeçalho da lista de propriedades reais da ordem selecionada
      string type=OrderTypeDescription((ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE));
      PrintFormat("Double properties of an active pending order %s #%I64u:"typeticket);
      
      //--- imprimimoa todas as propriedades reais da ordem selecionada sob o cabeçalho
      OrderPropertiesDoublePrint(16);
     }
   /*
   Resultado:
   Double properties of an active pending order Sell Limit #2812000714:
   Volume initial1.00
   Volume current1.00
   Price open:     145.282
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.044
   StopLimit:      0.000
   Double properties of an active pending order Buy Limit #2812001112:
   Volume initial1.00
   Volume current1.00
   Price open:     144.836
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.051
   StopLimit:      0.000
   Double properties of an active pending order Buy Stop #2812001488:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10642
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10530
   StopLimit:      0.00000
   Double properties of an active pending order Sell Stop #2812001712:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10374
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10525
   StopLimit:      0.00000
   */
  }
//+------------------------------------------------------------------+
//| Retorna a descrição do tipo de ordem                             |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      case ORDER_TYPE_BUY_LIMIT        :  return("Buy Limit");
      case ORDER_TYPE_SELL_LIMIT       :  return("Sell Limit");
      case ORDER_TYPE_BUY_STOP         :  return("Buy Stop");
      case ORDER_TYPE_SELL_STOP        :  return("Sell Stop");
      case ORDER_TYPE_BUY_STOP_LIMIT   :  return("Buy Stop Limit");
      case ORDER_TYPE_SELL_STOP_LIMIT  :  return("Sell Stop Limit");
      default                          :  return("Unknown order type");
     }
  }
//+------------------------------------------------------------------+
//| Imprime no log as propriedades reais da ordem selecionada        |
//+------------------------------------------------------------------+
void OrderPropertiesDoublePrint(const uint header_width=0)
  {
//--- obtemos o símbolo de ordem e o número de casas decimais do símbolo
   string symbol = OrderGetString(ORDER_SYMBOL);
   int    digits = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- imprimimos no log o volume inicial ao configurar a ordem com um cabeçalho de largura definida
   OrderPropertyPrint("Volume initial:",header_width,2,ORDER_VOLUME_INITIAL);
   
//--- imprimimos no log o valor do volume de pedidos não atendidos
   OrderPropertyPrint("Volume current:",header_width,2,ORDER_VOLUME_CURRENT);
   
//--- imprimimos no log o valor do preço especificado na ordem
   OrderPropertyPrint("Price open:",header_width,digits,ORDER_PRICE_OPEN);
   
//--- imprimimos no log o valor do nível StopLoss
   OrderPropertyPrint("StopLoss:",header_width,digits,ORDER_SL);
 
//--- imprimimos no log o valor do nível TakeProfit
   OrderPropertyPrint("TakeProfit:",header_width,digits,ORDER_TP);
 
//--- imprimimos no log o valor do preço atual por símbolo da ordem
   OrderPropertyPrint("Price current:",header_width,digits,ORDER_PRICE_CURRENT);
 
//--- imprimimos no log o valor do preço de definição da ordem Limit quando a ordem StopLimit é acionada
   OrderPropertyPrint("StopLimit:",header_width,digits,ORDER_PRICE_STOPLIMIT);
  }
//+------------------------------------------------------------------+
//| Imprime no log o valor da propriedade real da ordem              |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string headeruint header_widthint digitsENUM_ORDER_PROPERTY_DOUBLE property)
  {
   double value=0;
   if(!OrderGetDouble(propertyvalue))
      PrintFormat("Cannot get property %s, error=%d"EnumToString(property), GetLastError());
   else
     {
      //--- se a largura do cabeçalho passada para a função for zero, a largura será o tamanho da string do cabeçalho + 1
      uint w=(header_width==0 ? header.Length()+1 : header_width);
      PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
     }
  }

Também Veja

OrdersTotal(), OrderGetTicket(), Propriedades de uma Ordem