HistoryOrderGetDouble

Возвращает запрошенное свойство ордера. Свойство ордера должно быть типа double. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

double  HistoryOrderGetDouble(
   ulong                       ticket_number,     // тикет
   ENUM_ORDER_PROPERTY_DOUBLE  property_id        // идентификатор свойства
   );

2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool  HistoryOrderGetDouble(
   ulong                       ticket_number,     // тикет
   ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // идентификатор свойства
   double&                     double_var         // сюда примем значение свойства
   );

Параметры

ticket_number

[in]  Тикет ордера.

property_id

[in]  Идентификатор свойства ордера. Значение может быть одним из значений перечисления ENUM_ORDER_PROPERTY_DOUBLE.

double_var

[out]  Переменная типа double, принимающая  значение запрашиваемого свойства.

Возвращаемое значение

Значение типа double.

Примечание

Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- запрашиваем историю сделок и ордеров
   if(!HistorySelect(0, TimeCurrent()))
     {
      Print("HistorySelect() failed. Error ", GetLastError());
      return;
     }
     
//--- в цикле по списку всех исторических ордеров на счёте
   int total=HistoryOrdersTotal();
   for(int i=0; i<total; i++)
     {
      //--- получаем тикет ордера в списке по индексу цикла
      ulong ticket=HistoryOrderGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- получаем тип ордера и выводим заголовок для списка вещественных свойств выбранного ордера
      string type=OrderTypeDescription((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ticket, ORDER_TYPE));
      PrintFormat("Double properties of an history order %s #%I64u:", type, ticket);
      
      //--- распечатываем под заголовком все вещественные свойства выбранного ордера
      HistoryOrderPropertiesDoublePrint(ticket, 16);
     }
   /*
   результат:
   Double properties of an history order Sell #2810847541:
   Volume initial: 0.50
   Volume current: 0.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 initial: 1.00
   Volume current: 1.00
   Price open:     1.10547
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10591
   StopLimit:      0.00000
   */
  }
//+------------------------------------------------------------------+
//| Выводит в журнал вещественные свойства                           |
//| выбранного исторического ордера                                  |
//+------------------------------------------------------------------+
void HistoryOrderPropertiesDoublePrint(const long ticket, const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- получаем символ ордера и количество знаков после запятой для символа
   string symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL);
   int    digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   
//--- определяем текст заголовка и ширину поля заголовка
//--- если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
   header="Volume initial:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- получаем и выводим в журнал первоначальный объём при постановке ордера с заголовком установленной ширины
   if(!HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL, value))
      return;
   PrintFormat("%-*s%-.2f", w, header, value);
   
//--- выводим в журнал значение невыполненного объёма ордера
   header="Volume current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT, value))
      return;
   PrintFormat("%-*s%-.2f", w, header, value);
   
//--- выводим в журнал значение цены, указанной в ордере
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN, value))
      return;
   PrintFormat("%-*s%-.*f", w, header, digits, value);
   
//--- выводим в журнал значение уровня StopLoss
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_SL, value))
      return;
   PrintFormat("%-*s%-.*f", w, header, digits, value);
 
//--- выводим в журнал значение уровня TakeProfit
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_TP, value))
      return;
   PrintFormat("%-*s%-.*f", w, header, digits, value);
 
//--- выводим в журнал значение текущей цены по символу ордера
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT, value))
      return;
   PrintFormat("%-*s%-.*f", w, header, digits, value);
 
//--- выводим в журнал значение цены постановки Limit ордера при срабатывании StopLimit ордера
   header="StopLimit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryOrderGetDouble(ticket, ORDER_PRICE_STOPLIMIT, value))
      return;
   PrintFormat("%-*s%-.*f", w, header, digits, value);
  }
//+------------------------------------------------------------------+
//| Возвращает описание типа ордера                                  |
//+------------------------------------------------------------------+
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");
     }
  }

Смотри также

HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Свойства ордеров