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

Maksim Burov #:
Спасибо.
Может примеры есть?

Вот этот индикатор посмотрите

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Индикаторы: ClosingLots

Alexey Viktorov, 2019.03.08 17:58

Индикатор переписан почти полностью. Теперь его код можно использовать как образец работы с OBJ_BITMAP_LABEL и ресурсами.

Это конечно не мультики с использованием iCanvas Nikolai Semko но лучше чем использование простых OBJ_LABEL


Alexey Viktorov #:

Вот этот индикатор посмотрите


🙏
Maksim Burov #:
Добрый день. Всех с наступившими  и наступающими праздниками.
Подскажите почему визуальный тестер становиться медленнее если в код советника  включить Comment?
Какие варианты есть, которые помогут это исправить?
Влияет это на скорость оптимизации?

Не обязательно использовать канвас.

Чтобы comment не тормозил тестер с визуализацией, нужно чтобы comment не вызывался чаще, чем 30 миллисекунд.

Например так:

   static uint lastCalc= 0 ;
   uint cur= GetTickCount();
   if (cur-lastCalc> 30 ) {
      Comment("blablabla");
      lastCalc=cur; 
   }
Или вместо Comment использовать Print, если важно не пропускать значения. 

Если же важна более качественная визуализация вывода каких-либо значений, то тогда все же лучше канвас.

https://www.mql5.com/ru/forum/277867/page8#comment_19186284
Maksim Burov #:
Влияет это на скорость оптимизации?

Comment на скорость оптимизации не влияет.

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 не работал, да и с хеджингом тоже.

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