Как отследить ордер?

 

В советнике вставляется сетка отложенных ордеров, после срабатывания ордера мы получаем открытую позицию. 

Закрытие позиции отслеживается через  OnTradeTransaction

void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
    {
      ResetLastError();
      //--- get transaction type as enumeration value
      ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
      //--- if transaction is result of addition of the transaction in history
      if(type==TRADE_TRANSACTION_DEAL_ADD)
        {
         long     deal_ticket       =0;
         long     deal_order        =0;
         long     deal_time         =0;
         long     deal_time_msc     =0;
         long     deal_type         =-1;
         long     deal_entry        =-1;
         long     deal_magic        =0;
         long     deal_reason       =-1;
         long     deal_position_id  =0;
         double   deal_volume       =0.0;
         double   deal_price        =0.0;
         double   deal_commission   =0.0;
         double   deal_swap         =0.0;
         double   deal_profit       =0.0;
         string   deal_symbol       ="";
         string   deal_comment      ="";
         string   deal_external_id  ="";
         if(HistoryDealSelect(trans.deal))
           {
            deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
            deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
            deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
            deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
            deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
            deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
            deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
            deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
            deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

            deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
            deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
            deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
            deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
            deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

            deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
            deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
            deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
           }
         else
            return;
         ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
         if(deal_symbol == _Symbol)
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
               if(deal_entry==DEAL_ENTRY_OUT)

Как после закрытия позиции, найти(идетифицировать) ордер который инициировал позицию? В принципе нужна цена по которой устанавливался ордер, а она далеко не всегда такая же как у закрытой позиции.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Aleksandr Slavskii:

В советнике вставляется сетка отложенных ордеров, после срабатывания ордера мы получаем открытую позицию. 

Закрытие позиции отслеживается через  OnTradeTransaction

Как после закрытия позиции, найти(идетифицировать) ордер который инициировал позицию? В принципе нужна цена по которой устанавливался ордер, а она далеко не всегда такая же как у закрытой позиции.

В помощь вам

bool  HistorySelectByPosition(
   long   position_id     // идентификатор позиции - POSITION_IDENTIFIER
   );

Но не забывайте, что если сетка начинается с открытия позиции по маркет, а не ордера, то цены ордера не получите.

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
Alexey Viktorov:

В помощь вам

Но не забывайте, что если сетка начинается с открытия позиции по маркет, а не ордера, то цены ордера не получите.

Спасибо, попробую.

 

Aleksandr Slavskii:

В принципе нужна цена по которой устанавливался ордер

В комментарии не пробовали записать цену установки отложки? Или они после срабатывания не прописываются в открытую позицию?

 
Yevhenii Levchenko:

В комментарии не пробовали записать цену установки отложки? Или они после срабатывания не прописываются в открытую позицию?

В том то и дело, что при срабатывании комменты удаляются, тикет меняется и от информации ордера ничего не остаётся.

 
Да, уже и не важно, сделал по другому, совсем по другому)))