MQL5. Подсчет профита по закрытым позициям

 

Как перебрать закрытые позиции в MQL5? Пробую через HistoryDealsTotal. И там какие-то не те позиции попадаются. Как перебрать именно те позиции, которые в МТ5 в истории?

Я пытался так?

   datetime beginDay = iTime(_Symbol, PERIOD_D1, 0);
   if(!HistorySelect(beginDay, TimeCurrent()))
      printf("Не удалось получить историю сделок за сегодня.");
   printf("Всего сделок в истории: %d", HistoryDealsTotal());
   
   for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
     {
      ulong deal_ticket = HistoryDealGetTicket(i);
      printf("deal_ticket: %d", deal_ticket);
      printf("DEAL_ORDER: %d", HistoryDealGetInteger(deal_ticket,DEAL_ORDER));
      if(deal_ticket > 0)
        {
         profitTodayAbs += HistoryDealGetDouble(deal_ticket, DEAL_PROFIT);
         printf("DEAL_PROFIT: %d", HistoryDealGetDouble(deal_ticket, DEAL_PROFIT));
        }
     }
 
Mover:

Как перебрать закрытые позиции в MQL5? Пробую через HistoryDealsTotal. И там какие-то не те позиции попадаются. Как перебрать именно те позиции, которые в МТ5 в истории?

Я пытался так?

Сначала разберитесь в терминологии, что такое позиция, что такое сделка… Сделки бывают вход в рынок, выход из рынка, переворот можно пока не осваивать…

А вообще направление правильное… Только профит состоит не только из профита как такового, но ещё надо учитывать комиссию и свопы…

 

Решил так:

double ProfitToday()
  {
   double profitTodayAbs = 0;
   double profitTodayPercent = 0;
   datetime beginDay = iTime(_Symbol, PERIOD_D1, 0);
   if(!HistorySelect(beginDay, TimeCurrent()))
      printf("Не удалось получить историю сделок за сегодня.");

   for(int i = 0; i < HistoryDealsTotal(); i++)
     {
      //Выбирает сделку для дальнейшей обработки
      ulong deal_ticket = HistoryDealGetTicket(i);

      // Проверяем, что это закрытая позиция
      if(HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT)
        {
         profitTodayAbs += HistoryDealGetDouble(deal_ticket, DEAL_PROFIT) + HistoryDealGetDouble(deal_ticket, DEAL_SWAP) + HistoryDealGetDouble(deal_ticket, DEAL_COMMISSION);
        }
     }
//считаем прибыль в %
   if(balance != 0)
      profitTodayPercent = profitTodayAbs / (balance - profitTodayAbs) * 100;
   return(profitTodayPercent);
  }
Причина обращения: