Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2584

 
Alexey Belyakov #:

Правильно ли я вас понимаю, что вторая часть равенства в этой строчки не нужна? Тоесть в итоге эта строчка будет выглядеть так:

Да, не нужна.

Откройте справку, Я дал ссылку, там всё описано досконально.

 
Andrei Sokolov #:

Я дал вам эту функцию, чтоб вы по справке разобрались как она работает. И разобравшись вы уже смогли бы собрать нужную вам. Не тыкайте пальцем в небо, тыкайте в справочник.

Спасибо конечно за функцию. 

 
Alexey Belyakov #:
Добрый день!

Уважаемые опытные программисты, помогите пожалуйста!
Мне нужно отобразить в переменной финансовый результат последней закрытой позиции из истории.

В MQL4 я добился этого так:

Как сделать это в MQL5 не понимаю, кучу противоречивой информации перечитал. 

void OnStart()
  {
   Print(HistoryProfit());
  }
//+------------------------------------------------------------------+
double HistoryProfit(ulong in_ticket_in = 0)
  {
   HistorySelect(0, TimeCurrent());
   double profit = 0.0;
   for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
     {
      ulong  deal_ticket = HistoryDealGetTicket(i);

      if(in_ticket_in == 0)
         in_ticket_in = deal_ticket;

      if(HistoryDealGetInteger(deal_ticket, DEAL_POSITION_ID) == HistoryDealGetInteger(in_ticket_in, DEAL_POSITION_ID))
        {
         profit += HistoryDealGetDouble(deal_ticket, DEAL_PROFIT);
         profit += HistoryDealGetDouble(deal_ticket, DEAL_SWAP);
         profit += HistoryDealGetDouble(deal_ticket, DEAL_COMMISSION);
         profit += HistoryDealGetDouble(deal_ticket, DEAL_FEE);
        }
     }
   return profit;
  }
//+------------------------------------------------------------------+

Немного изменил код от Andrei Sokolov, получился скрипт, который распечатывает финансовый результат ПОСЛЕДНЕЙ закрытой позиции.

 

Ура! получилось! "Доехал сам")))  Всем спасибо за помощь!

Рабочий вариант будет выглядеть так:

     HistorySelect(0, TimeCurrent());
        double profit = 0.0;
        ulong ticket_out = 0;
        for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
        {
                ulong  deal_ticket = HistoryDealGetTicket(i);
                
                if (  HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT
                && HistoryDealGetInteger(deal_ticket, DEAL_POSITION_ID))
                {
                        ticket_out = deal_ticket;
                        break;
                }
        }
        profit += HistoryDealGetDouble(ticket_out, DEAL_PROFIT);
        profit += HistoryDealGetDouble(ticket_out, DEAL_SWAP);
        profit += HistoryDealGetDouble(ticket_out, DEAL_COMMISSION);
        profit += HistoryDealGetDouble(ticket_out, DEAL_FEE);
 
 Print ("ПРОФИТ",profit);
 
 
Aleksandr Slavskii #:

Немного изменил код от Andrei Sokolov, получился скрипт, который распечатывает финансовый результат ПОСЛЕДНЕЙ закрытой позиции.

И вам свасибо! Пригодится и ваш вариант.

 
Alexey Belyakov #:

Ура! получилось! "Доехал сам")))  Всем спасибо за помощь!

Рабочий вариант будет выглядеть так:

Ура!

Теперь можно выставлять программу в Маркет!

 
Vitaly Muzichenko #:

Ура!

Теперь можно выставлять программу в Маркет!

Неее. Это для себя. Ничего, никогда на маркет не выставлял. А уже много готовых экспертов скопилось.

 
Alexey Belyakov #:

Ура! получилось! "Доехал сам")))  Всем спасибо за помощь!

Рабочий вариант будет выглядеть так:

Этот код будет верным только если нет свопа и комиссия берётся при закрытии позиции.

 
Aleksandr Slavskii #:

Этот код будет верным только если нет свопа и комиссия берётся при закрытии позиции.

Добавить можно и своп и комиссию при необходимости, там уже меньше проблем.

 
Alexey Belyakov #:

Добавить можно и своп и комиссию при необходимости, там уже меньше проблем.

Они у вас добавлены, только так, что работать не будут.