Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 128

 
Aleksey Vyazmikin:

В тестере индикаторы отстают с отрисовкой на высоких скоростях


Да, на  высоких скоростях отстают.

Потому что приоритет за вычислениями, а не за отображением.

При отрисовке делается попытка блокировки синхронизатора. Если синхронизатор уже заблокирован расчётом, то не ждём и отваливаем.

Было сделано специально из-за запросов "почему скорость отрисовки первых 10 градаций одинаковая"

 

В Обзоре рынка оставляем, например, только EURUSD и AUDNZD. Запускаем Оптимизацию по всем символам из Обзора рынка.

Вместо двух проходов получаем четыре - добавляются проходы по AUDUSD и NZDUSD.

Наверное, это ошибка.

 
В режиме Оптимизации по всем символам OnTesterPass не вызывается. Соответственно, не поймать результаты проходов.
 
Slava:

Да, на  высоких скоростях отстают.

Потому что приоритет за вычислениями, а не за отображением.

При отрисовке делается попытка блокировки синхронизатора. Если синхронизатор уже заблокирован расчётом, то не ждём и отваливаем.

Было сделано специально из-за запросов "почему скорость отрисовки первых 10 градаций одинаковая"

А какой толк от такой визуализации? Может лучше сделать отрисовку чуть реже? Ускорение я лично использую для поиска нужной графической ситуации, дату которой точно не знаю, т.е. фактически для разработки ТС. Если нужно посмотреть ошибку в логике, то перемотка идет на большой скорости, но уже с TesterStop(), и тут графика точно не важна до точки остановки. Кстати, хорошо бы иметь TesterPause() как раз для перехода к нужной точке, но дату которой не знаешь, а рассмотреть подробней ситуацию необходимо графически. Ну и совсем замечательно в тестере иметь обратную перемотку, пусть даже без торговых операций - очень сократило бы время поиска логических ошибок (не критических в коде, а именно логических для ТС).

 
Aleksey Vyazmikin:

А какой толк от такой визуализации? Может лучше сделать отрисовку чуть реже? Ускорение я лично использую для поиска нужной графической ситуации, дату которой точно не знаю, т.е. фактически для разработки ТС. Если нужно посмотреть ошибку в логике, то перемотка идет на большой скорости, но уже с TesterStop(), и тут графика точно не важна до точки остановки. Кстати, хорошо бы иметь TesterPause() как раз для перехода к нужной точке, но дату которой не знаешь, а рассмотреть подробней ситуацию необходимо графически. Ну и совсем замечательно в тестере иметь обратную перемотку, пусть даже без торговых операций - очень сократило бы время поиска логических ошибок (не критических в коде, а именно логических для ТС).

Посмотрим, что можно сделать. Будем улучшать
 
Slava:
Посмотрим, что можно сделать. Будем улучшать

Спасибо.

А с оптимизатором будут улучшения, в плане работы с удаленными агентами и передачи им больших объемов данных? То, что я описывал ранее.

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

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5

Aleksey Vyazmikin, 2019.01.21 16:19

Логи очень большие за тот день, не знаю, что там, так-как открыть не получается - блокнот виснет. Но архив маленький, прикладываю.

При попытке получить логи поменьше, в самом начале процесса, вижу, что лог не пишется, т.е. у меня ошибка пишется, а агент лог не сохраняет или он просто пустой...

Добавлено, вот какой лог после остановки агента получился на удаленном агенте:

OQ      0       18:10:46.492    **.**.***.***   login (build 1950)
GL      2       18:20:50.519    **.**.***.***   cannot accept connect, agent is busy

 
Aleksey Vyazmikin:

А с оптимизатором будут улучшения, в плане работы с удаленными агентами и передачи им больших объемов данных? То, что я описывал ранее.


Тут вообще непонятно в чём дело.

Тестерный диспетчер залогинился к агенту и почему-то ничего больше не делает. Потом опять логинится (к уже залогиненному им же некоторое время назад) и совершенно справедливо получает отлуп.

Это поведение взято на карандаш. Как только будут понятны причины его, мы сразу же и исправим

 
Slava:

Тут вообще непонятно в чём дело.

Тестерный диспетчер залогинился к агенту и почему-то ничего больше не делает. Потом опять логинится (к уже залогиненному им же некоторое время назад) и совершенно справедливо получает отлуп.

Это поведение взято на карандаш. Как только будут понятны причины его, мы сразу же и исправим

Да я думаю причина в том, что размер файлов большой и не происходит их полная закачка - эксперт там больше 11 мегабайт, и это надо передать сразу х советникам, тут лучше бы передавать данные последовательно, передали одному агенту, потом другому и так далее, тогда проблемы бы не возникло именно этой. Если передавать последовательно каждому агенту в ручную, постепенно включая агенты, то ошибка не возникает.

 

Баг, вроде. Набросал себе такую функцию:

bool get_mutex(int sleep_duration=3000)
{
   while ( ! GlobalVariableSetOnCondition("mutex", 1, 0) ) {
      if (GetLastError() == ERR_GLOBALVARIABLE_NOT_FOUND) {
         Alert("mutex does not exist, exit");
         return false;
      }
      if ( IsStopped() )
         return false;
      Sleep(sleep_duration);
   }
   return true;
}

Далее:

1. ручками создаю ГВ с именем "mutex" и значением == 0

2. Дважды запускаю скрипт

void OnStart()
{
   Alert( get_mutex() );
}

В первый раз ответ "true", во второй "false, mutex does not exist, exit". Ожидалось - уход в цикл ожидания.

 

Провожу бэктест по реальным тикам, при этом нигде в советнике не обращаюсь к барам.

Теоретически имеет ли влияние на скорость прогона выбор в Тестере периода бара: M1 или D1?