DEAL_REASON_TP

 
if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal))
        {

         string deal_symbol = HistoryDealGetString(trans.deal, DEAL_SYMBOL);
         ulong deal_magic = HistoryDealGetInteger(trans.deal, DEAL_MAGIC);

           {
            ENUM_DEAL_REASON reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal, DEAL_REASON);
            if(reason == DEAL_REASON_TP)
              {
               bool isDelFiboLimits = false;
               ulong deal_order_ticket = HistoryDealGetInteger(trans.deal, DEAL_ORDER);
               
               if(deal_order_ticket  == extrTicket)
                 {
                  string deal_comment = HistoryDealGetString(extrTicket, DEAL_COMMENT);
                   datetime order_open_time = (datetime)HistoryOrderGetInteger(deal_order_ticket, ORDER_TIME_SETUP);
                  Print("TP сработало: ", deal_comment," - ", deal_order_ticket, " time ", order_open_time);  // Выводим исходный комментарий ордера
                  isDelFiboLimits = true;
                  extrTicket = 100000;
                 }
               else
                 {
                  Print("Ошибка:TP сработало, но не удалось найти ордер ", deal_order_ticket, " ",extrTicket);
                 }
               DelLimitOrders(isDelFiboLimits);   //isDelFiboOrders
              }
           }
        }
     }

Привет всем ! 

Ставлю лимит ордер, сохраняю его тикет.  Ордер открылс по цене своей. Надо поймать когда именно этот ордер достигает  ТП .

 
Yerkin Sagandykov:

Привет всем ! 

Ставлю лимит ордер, сохраняю его тикет.  Ордер открылс по цене своей. Надо поймать когда именно этот ордер достигает  ТП .

Я Вам советовал поработать с отладчиком внутри OnTradeTransaction. Узнали бы наглядно последовательность процессов.

        if (trans.type == TRADE_TRANSACTION_DEAL_ADD && trans.order_state == ORDER_STATE_STARTED) {
                HistoryDealSelect(trans.deal);
                ENUM_DEAL_ENTRY entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
                ENUM_DEAL_REASON reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal, DEAL_REASON);
                if (entry == DEAL_ENTRY_OUT && (reason == DEAL_REASON_SL || reason == DEAL_REASON_TP)) {
                        // Closed on SL/TP
                }
        }
 
Edgar Akhmadeev #:

Я Вам советовал поработать с отладчиком внутри OnTradeTransaction. Узнали бы наглядно последовательность процессов.

событие по ТП ловится, но проблема как именно нужный ордер поймать. Потому как deal_order_ticket и extrTicket не равны. при выходе из рынка номер ордера другой ставится. 

 
Yerkin Sagandykov #:

событие по ТП ловится, но проблема как именно нужный ордер поймать. Потому как deal_order_ticket и extrTicket не равны. при выходе из рынка номер ордера другой ставится. 

POSITION_ID читайте что такое

 
Artyom Trishkin #:

POSITION_ID читайте что такое

POSITION_IDENTIFIER

это имеете в виду ?

 
Yerkin Sagandykov #:

POSITION_IDENTIFIER

это имеете в виду ?

Правильно догадались

 
Artyom Trishkin #:

Правильно догадались

))


так и применил. но туплю че то . не получается. попробую еще сегодян до конца дня

 
сохраняю номер

if(a_trade.BuyLimit(lots, limit_price, a_symbol.Name(), 0, take_profit, ORDER_TIME_SPECIFIED, end_of_friday, comment))  
        {
            extrTicket =a_trade.ResultOrder();

      }


затем 
 if((deal_symbol == _Symbol && deal_magic == MagicNumber))
           {
            ENUM_DEAL_REASON reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal, DEAL_REASON);
            ENUM_DEAL_ENTRY entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
            if(entry == DEAL_ENTRY_OUT &&  reason == DEAL_REASON_TP)  //(reason == DEAL_REASON_SL ||
              {
               Print("TP сработало: ");

               // Находим ордер extr
               bool isDelFiboLimits = false;

               long original_order_ticket;

               if(HistoryOrderGetInteger(extrTicket, ORDER_POSITION_ID,                long original_order_ticket;))
                 {
                  string deal_comment = HistoryDealGetString(extrTicket, DEAL_COMMENT);
                  Print("TP сработало: ", deal_comment," - ");  
                  isDelFiboLimits = true;
                  extrTicket = 0;
                 }
               else
                 {
                  Print("Ошибка:TP сработало, но не удалось найти ордер ", original_order_ticket, " ",extrTicket);
                 }
               DelLimitOrders(isDelFiboLimits);   //isDelFiboOrders
              }
           }

где ошибка ?

 
Yerkin Sagandykov #:
 extrTicket =a_trade.ResultOrder();
 extrTicket =a_trade.ResultDeal();
 
Ihor Herasko #:

Спасибо ! Разобрался !