HistoryOrderGetDouble

Retorna a propriedade da ordem. A propriedade da ordem deve ser do tipo double. Existem 2 variantes da função.

1. Imediatamente retorna o valor da propriedade.

double  HistoryOrderGetDouble(
   ulong                       ticket_number,     // Ticket (bilhete)
   ENUM_ORDER_PROPERTY_DOUBLE  property_id        // Identificador de propriedade
   );

2. A função vai retornar "true" ou "false", dependendo se deu certo ou não. Se der certo, o valor da propriedade será passado por referência para uma variável de destino, que você define no último parâmetro.

bool  HistoryOrderGetDouble(
   ulong                       ticket_number,     // Ticket (bilhete)
   ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // Identificador da propriedade
   double&                     double_var         // valor da propriedade
   );

Parâmetros

ticket_number

[in]  Ticket da ordem.

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.

Observação

Não confunda as ordens do histórico de negociação com as ordens pendentes que aparecem no separador "Comércio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que foram cancelados ou levaram a uma transação, pode ser visto na aba "Histórico" da "caixa de ferramentas" do terminal do cliente.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- solicitamos o histórico de operações e ordens
   if(!HistorySelect(0TimeCurrent()))
     {
      Print("HistorySelect() failed. Error "GetLastError());
      return;
     }
     
//--- em um loop pela lista de todos os pedidos históricos da conta
   int total=HistoryOrdersTotal();
   for(int i=0i<totali++)
     {
      //--- obtemos a ordem dos tickets na lista por índice de loop
      ulong ticket=HistoryOrderGetTicket(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)HistoryOrderGetInteger(ticketORDER_TYPE));
      PrintFormat("Double properties of an history order %s #%I64u:"typeticket);
      
      //--- imprimimoa todas as propriedades reais da ordem selecionada sob o cabeçalho
      HistoryOrderPropertiesDoublePrint(ticket16);
     }
   /*
   Resultado:
   Double properties of an history order Sell #2810847541:
   Volume initial0.50
   Volume current0.00
   Price open:     1.10491
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10491
   StopLimit:      0.00000
   Double properties of an history order Buy Limit #2811003507:
   Volume initial1.00
   Volume current1.00
   Price open:     1.10547
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10591
   StopLimit:      0.00000
   */
  }
//+------------------------------------------------------------------+
//| Imprimimos no log as propriedades reais                          |
//| da ordem histórica escolhida                                     |
//+------------------------------------------------------------------+
void HistoryOrderPropertiesDoublePrint(const long ticketconst uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- obtemos o símbolo de ordem e o número de casas decimais do símbolo
   string symbol = HistoryOrderGetString(ticketORDER_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 initial:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- obtemos e imprimimos no log o volume inicial ao colocar uma ordem com o cabeçalho da largura definida
   if(!HistoryOrderGetDouble(ticketORDER_VOLUME_INITIALvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- imprimimos no log o valor do volume de pedidos não atendidos
   header="Volume current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_VOLUME_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- imprimimos no log o valor do preço especificado na ordem
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- imprimimos no log o valor do nível StopLoss
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- imprimimos no log o valor do nível TakeProfit
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- imprimimos no log o valor do preço atual por símbolo da ordem
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- imprimimos no log o valor do preço de definição da ordem Limit quando a ordem StopLimit é acionada
   header="StopLimit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticketORDER_PRICE_STOPLIMITvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
  }
//+------------------------------------------------------------------+
//| 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");
     }
  }

Também Veja

HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Propriedades de uma Ordem