Как узнать номер ордера по( или из) которому открылась позиция? - страница 2

 
ROMAN KIVERIN #:

Вот что получилось. Пока вроде устраивает.

Я имел ввиду так

/*********************TradeTransaction function**********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
   {
    HistoryDealSelect(trans.deal);
    long posID = HistoryDealGetInteger(trans.deal, DEAL_POSITION_ID);
    HistorySelectByPosition(posID);
    int ordersTotal = HistoryOrdersTotal();
    ulong ordersTicket = HistoryOrderGetTicket(0);
    Print(ordersTicket);
   }
 }/*******************************************************************/



ps; Хотя я пропустил проверку сделки на IN/OUT если сделка IN то продолжить, иначе выход…

 
Alexey Viktorov #:

Я имел ввиду так

 Спасибо большое Alexey. Очень рад что откликнулось так много участников форума и все вместе помогли мне разобраться с данным вопросом.

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

Ещё раз спасибо и всего Вам доброго!

Alexey Viktorov
Alexey Viktorov
  • 2023.07.31
  • www.mql5.com
Профиль трейдера
 

С учетом последних предложений получилась следующая версия кода:

//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
     {
      HistoryDealSelect(trans.deal);
      if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)
        {
         ulong ParentOrderTicket = HistoryDealGetInteger(trans.deal, DEAL_ORDER);
         //    ParentOrderTicket - Тикет Ордера на котором открылась позиция trans.position
         for(int Index = 0; Index <= CountSeries; Index++)
            if(TradeSeries[CountSeries].CheckNewPosition(ParentOrderTicket, trans.position))
               break;
        }
     }
  }

Всем ещё раз спасибо.