OrderGetTicket

Возвращает тикет соответствующего ордера и автоматически выбирает ордер для дальнейшей работы с ним при помощи функций.

ulong  OrderGetTicket(
   int  index      // номер в списке ордеров
   );

Параметры

index

[in]  Номер ордера в списке текущих ордеров.

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

Значение типа ulong. В случае неудачного выполнения возвращает 0.

Примечание

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

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

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Функция OrderGetTicket() копирует данные об ордере в программное окружение, и последующие вызовы OrderGetDouble(), OrderGetInteger(), OrderGetString() возвращают ранее скопированные данные. Это означает, что самого ордера может уже и не быть (или же в нем изменились цена открытия, уровни Stop Loss / Take Profit или момент истечения), а данные этому ордеру можно еще получать. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderGetTicket() непосредственно перед обращением за ними.

Пример:

void OnStart()
  {
//--- переменные для получения значений из свойств ордера
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
   long     positionID;
//--- количество текущих отложенных ордеров
   uint     total=OrdersTotal();
//--- пройдем в цикле по всем ордерам
   for(uint i=0;i<total;i++)
     {
      //--- получим тикет ордера по его позиции в списке
      if((ticket=OrderGetTicket(i))>0)
        {
         //--- получим свойства ордера
         open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
         time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
         symbol        =OrderGetString(ORDER_SYMBOL);
         order_magic   =OrderGetInteger(ORDER_MAGIC);
         positionID    =OrderGetInteger(ORDER_POSITION_ID);
         initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
         type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
         //--- подготовим и выведем информацию об ордере
         printf("#ticket %d %s %G %s at %G was set up at %s",
                ticket,                 // тикет ордера
                type,                   // тип
                initial_volume,         // выставленный объем
                symbol,                 // символ, по которому выставили
                open_price,             // указанная цена открытия
                TimeToString(time_setup)// время установки ордера
                );
        }
     }
//---
  }

Смотри также

OrdersTotal(), OrderSelect(), OrderGetInteger()