Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1489

 
Maksim Burov #:

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

Информация же не каждый тик меняется? Ну и Николай ещё подсказал уже, что можно просто сделать вывод после некоторого таймаута, тем самым снизить частоту этого самого вывода.
 

Всем большое спасибо за помощь.
Теперь другая задача.

Есть функция, которая считает профит всех закрытых ордеров после определенного тика. 
Для проверки было добавлено время закрытия ордера (позиции).
Так как все писалось на MQL4, а теперь переписывается на MQL5, встала вопрос, как правильно и грамотно обыграть эту проверку.

Проще говоря, как переписать  код на MQL5)

double CalculateProfitHistory() 
{
   double profit = 0;
   int  i, ototal = OrdersHistoryTotal();

   for(i = ototal-1; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
         if(OrderSymbol() == Symbol() && OrderCloseTime() > 0)
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
               if(OrderMagicNumber() == Magic )
               {
                  if (LockTicket !=0)
                  {
                     if (OrderTicket() >= LockTicket)
                     {
                        profit += OrderProfit()+OrderCommission()+OrderSwap();
                     }                  
                  }
               }
            }
         }
      }
   }
   return(profit);
}
 
Maksim Burov #:

Всем большое спасибо за помощь.
Теперь другая задача.

Есть функция, которая считает профит всех закрытых ордеров после определенного тика. 
Для проверки было добавлено время закрытия ордера (позиции).
Так как все писалось на MQL4, а теперь переписывается на MQL5, встала вопрос, как правильно и грамотно обыграть эту проверку.

Проще говоря, как переписать  код на MQL5)

// сначала выбираем нужный интервал
HistorySelect(TimeStart,TimeCurrent()+10);

// перебираем ордера в интервале
for(i=HistoryOrdersTotal()-1;i>=0;i--)
         {
          ord=HistoryOrderGetTicket(i);

         // далее получаем (или сразу сравниваем) любые свойства ордера, типа
          o_sym=HistoryOrderGetString(ord, ORDER_SYMBOL);
          o_magic=HistoryOrderGetInteger(ord, ORDER_MAGIC);
          ...
         }

Что-то типа того.

 
Maksim Burov #:

Всем большое спасибо за помощь.
Теперь другая задача.

Есть функция, которая считает профит всех закрытых ордеров после определенного тика. 
Для проверки было добавлено время закрытия ордера (позиции).
Так как все писалось на MQL4, а теперь переписывается на MQL5, встала вопрос, как правильно и грамотно обыграть эту проверку.

Проще говоря, как переписать  код на MQL5)

Так как перебирать придется не ордера (предыдущий пост), а сделки, то удобнее всего использовать это

HistoryPosition - неопубликованный функционал MQL5-языка.
HistoryPosition - неопубликованный функционал MQL5-языка.
  • 2023.11.22
  • www.mql5.com
HistoryPositionsTotal Возвращает количество всех закрытых позиций в истории. HistorySelect() не влияет на результат данной функции. int HistoryPositionsTotal(); Возвращаемое значение Значение типа
 
JRandomTrader #:

Что-то типа того.

Что то не справился( Можно чуть подробнее на основе моего кода.

 
Maksim Burov #:

Что то не справился( Можно чуть подробнее на основе моего кода.

Возможно, лучше посмотреть вариант от Aleksandr Slavskii. Я с MQL4 не работал, да и с хеджингом тоже.

Или обратить внимание сюда и, на всякий случай, сюда.

 
JRandomTrader #:

Возможно, лучше посмотреть вариант от Aleksandr Slavskii. Я с MQL4 не работал, да и с хеджингом тоже.

Или обратить внимание сюда и, на всякий случай, сюда.

Не лучше. Это обычные функции от фхсабера.

Ваш вариант вполне приемлем, только надо ордера заменить сделками. Профит, комиссию и своп хранят сделки, а не ордера.

 
Здравствуйте, у меня проблема с VPS. Я не получаю уведомления на телефон, когда MT4 выключен. Когда платформа включена, уведомления работают. Кто-нибудь может дать мне совет, что может быть не так? Спасибо
 

Alexey Viktorov #:

Ваш вариант вполне приемлем, только надо ордера заменить сделками. Профит, комиссию и своп хранят сделки, а не ордера.

И учитывать, что ордер может породить несколько сделок.

Так что или пребирать для каждого ордера его сделки, или завести массив/список (по к-ву ордеров) структур и заполнять их, перебирая сделки.
 
JRandomTrader #:

И учитывать, что ордер может породить несколько сделок.

Так что или пребирать для каждого ордера его сделки, или завести массив/список (по к-ву ордеров) структур и заполнять их, перебирая сделки.

Да зачем усложнять себе жизнь? Если надо посчитать прибыль за определённый период, а в коде исходном именно это и делается, то просто перебрать сделки за этот период. У сделки IN есть или может быть комиссия, у сделки OUT кроме комиссии может быть\есть своп и прибыль. Так всё просуммировав получили желаемый результат.

Другое дело, если задача собрать в массив прибыль по каждому ID позиции отдельно.

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