Маппинг сделок in и out из истории.

 

Необходимо получить тикеты последней пары сделок in и out из истории. 

И есть реализация:

string symbol = "EURUSD";
HistorySelect(0,TimeCurrent());
ulong total=HistoryDealsTotal();
ulong inTicket = 0;
ulong outTicket = 0;
for(int i = total - 1; i != -1; i--)
  {
   ulong ticket = HistoryDealGetTicket(i);
   ENUM_DEAL_ENTRY entry = HistoryDealGetInteger(ticket, DEAL_ENTRY);
   if(Symbol() == symbol && magic == HistoryDealGetInteger(ticket, DEAL_MAGIC) && entry == DEAL_ENTRY_OUT)
     {
      inTicket = HistoryDealGetTicket(i-1);
      outTicket = ticket;
      break;
     }
  }

Но меня беспокоит inTicket = HistoryDealGetTicket(i-1) может получиться что предыдущей записью в истории перед out будет идти не соответствующий ей in, и я получу неверные данные.


1. Возможно ли что несколько in или несколько out по одному инструменту располагаются подряд в истории.

2. Если да, то как их мапить?

 

Ну если счёт хеджевый и открыто несколько позиций по символу, например с одним и тем же ТП, то при сработке ТП будет в истории несколько аут сделок.

А что вам мапить то надо? последние аут и ин? так перебирайте с конца пока не встретите аут и ин, как обе встретились, выход  из цикла.

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

Ну если счёт хеджевый и открыто несколько позиций по символу, например с одним и тем же ТП, то при сработке ТП будет в истории несколько аут сделок.

А что вам мапить то надо? последние аут и ин? так перебирайте с конца пока не встретите аут и ин, как обе встретились, выход  из цикла.

Мне нужно отправлять запрос на сервер статистики после закрытия каждой сделки  

      return "{" +
             "\"magic\":" + _magic + "," +
             "\"mtId\":" + orderId + "," +
             "\"isDemo\":" + isDemo + "," +
             "\"openAt\":" + openAt + "," +
             "\"closeAt\":" + closeAt + "," +
             "\"size\":" + size + "," +
             "\"symbol\":" + "\"" + _instanceSymbolTitle + "\"" + "," +
             "\"type\":" + "\"" + type +"\"" + "," +
             "\"openPrice\":" + openPrice + "," +
             "\"closePrice\":" + closePrice + "," +
             "\"stopLoss\":" + stopLoss + "," +
             "\"takeProfit\":" + takeProfit + "," +
             "\"swap\":" + swap + "," +
             "\"profit\":" + profit + "," +
             "\"deposit\":" + deposit + "," +
             "\"properties\":" + properties +
             "}";
     }

Из всех этих данных которые от меня ждут от сделки in мне нужно цена открытия openPrice, время открытия openAt, тип сделки type BUY\SELL и т.д. и id ордера mtId что бы можно было сопоставить график статистики во внешнем приложении и MT.  Но проблема будет если in у меня будет от одной позиции а out от другой если я просто сдвинусь в надежде что in и out от одной сделки всегда идут подряд.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Павел Раввич:

Мне нужно отправлять запрос на сервер статистики после закрытия каждой сделки  

Из всех этих данных которые от меня ждут от сделки in мне нужно цена открытия openPrice, время открытия openAt, тип сделки type BUY\SELL и т.д. и id ордера mtId что бы можно было сопоставить график статистики во внешнем приложении и MT.  Но проблема будет если in у меня будет от одной позиции а out от другой если я просто сдвинусь в надежде что после in идет out от одной сделки.

понятно. как выше Алексей указал. Вам надо при обнаружении новой сделки аут, взять её идентификатор позиции DEAL_POSITION_ID  и найти по нему ин сделку

 
Павел Раввич:

Мне нужно отправлять запрос на сервер статистики после закрытия каждой сделки  

Из всех этих данных которые от меня ждут от сделки in мне нужно цена открытия openPrice, время открытия openAt, тип сделки type BUY\SELL и т.д. и id ордера mtId что бы можно было сопоставить график статистики во внешнем приложении и MT.  Но проблема будет если in у меня будет от одной позиции а out от другой если я просто сдвинусь в надежде что in и out от одной сделки всегда идут подряд.

Это MT4-представление истории.

Причина обращения: