MT5 и скорость в боевом исполнении - страница 90

 

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

MT5 и скорость в боевом исполнении

fxsaber, 2021.03.10 14:53

Наглядный пример, какие тормоза вызывает Обзор рынка.

Смотреть на значения в столбце Процессор (второй справа).


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

 
BillionerClub:

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

Особенно, если МТ в виртуалке (не самый редкий случай).

 
BillionerClub:

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

В Терминале нет ограничения FPS (Frames per Second). В Обзоре рынка может быть 300 fps и выше.

Любая визуализация в торговых терминалах при fps > 50 - выбрасывание вычислительных ресурсов на ветер.

 
BillionerClub:

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

скорее быть не на базе SysListView32, который сам по себе не шустрый, но иметь свой элемент для отрисовки,  но со всеми "прелястями" реализации скроллингов, сортировок и т.п. Другой вопрос - так ли он нужен при работе в таком виде? и тогда его выключение на период работы будет вариантом фикса данной проблемы (если это проблема)

 
Обнаружил отсутствие кеша свойств для графических объектов.
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  const string Name = "ObjectName";
  
  ObjectCreate(0, Name, OBJ_BITMAP_LABEL, 0, 0, 0);
  
  for (int i = 0; i < 10; i++)
    _B(::ObjectGetInteger(0, Name, OBJPROP_COLOR), 100); // Повторное обращение к тому же объекту должно быть быстрым, но этого не происходит.
    
  ObjectDelete(0, Name);
  
  Print(::ObjectSetInteger(0, Name, OBJPROP_COLOR, 0)); // true для удаленного объекта!
}


Результат.

Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 9361 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 396 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1399 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 987 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1111 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1040 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 639 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 796 mcs.
true


Очень дорого выходит.  Ну и ошибка ObjectSet-функции заодно.

Строка для поиска: Oshibka 026.

 
fxsaber:

Ну и ошибка ObjectSet-функции заодно.

Строка для поиска: Oshibka 026.

Работа с объектами ассинхронная

 
Andrey Khatimlianskii:

Работа с объектами ассинхронная

Получается, что ObjectSet всегда true обязан возвращать.

 
fxsaber:

Получается, что ObjectSet всегда true обязан возвращать.

Читайте справку:

https://www.mql5.com/ru/docs/objects/objectsetinteger

Возвращаемое значение

Возвращает true только в том случае, если команда на изменение свойств графического объекта успешно отправлена графику, иначе возвращает false. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().


Документация по MQL5: Графические объекты / ObjectSetInteger
Документация по MQL5: Графические объекты / ObjectSetInteger
  • www.mql5.com
ObjectSetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:

Получается, что ObjectSet всегда true обязан возвращать.

Не могу прийти к такому же выводу, используя логику.

 
Andrey Khatimlianskii:

Anton:

false - только, если ошибиться с ChartID. Со своим графиком (ноль) всегда true.

Надо очень постараться, чтобы вызвать false.

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