Остановить оптимизацию при достижении необходимого показателя или времени. - страница 2

 
Georgiy Merts #:

В OnTesterInit() глобальная переменная создаётся. И по F3 она отображается правильно. 

А вот в Агенты тестирования эта глобальная переменная не попадает. 

Пока решение "через дополнительную переменную" мне представляется наиболее приемлемым. Сегодня я уже не буду заниматься, а вот завтра с утра - попробую.

если по F3 она отображается, ТО ЭТО ОШИБКА

у тестера/оптимизатора и терминала - разные пространства имён

 
Georgiy Merts #:

Разве TimeLocal() в проходе тестера возваращает время на компьютере? Мне казалось, что эта функция возвращает время в среде самого тестируемого эксперта. 

Как мне кажется, такая функция прервёт работу эксперта в одиночном проходе. 

А требуется прервать процесс оптимизации при достижении условия (либо максимального времени, либо необходимого значения OnTester()

Я не прав? 

Здравствуйте, Георгий! Вот ссылка, в которой найдёте ответ на Ваш вопрос.

С уважением, Владимир.

 

Интересное наблюдение: в функции OnTesterPass(), когда выясняется, что оптимизация идёт слишком долгое время - вызываю функцию ExpertRemove().

Эксперт, видимо, снимается с тестирования, происходит обработка фреймов, собранных за прошедшее время, формируется нормальный файл отчета (моими, внутренними функциями), но сам процесс оптимизации продолжается дальше. 

Значит, нельзя в OnTesterPass() остановить оптимизацию. 

Ищем варианты дальше.  

 
MrBrooklin #:

Здравствуйте, Георгий! Вот ссылка, в которой найдёте ответ на Ваш вопрос.

С уважением, Владимир.

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

Пока что, как я вижу - вариант с дополнительной переменной наилучший. При начале оптимизации каждый агент получает время старта через дополнительную переменную, а внутри OnInit() анализирует текущее время (причём, получать его надо не через TimeLocal(), а через создание временного файла и анализ параметров его создания), и если прошло слишком много времени - возвращать AGENT_NOT_SUITABLE.

Сегодня я уже не буду заниматься, а вот завтра - попробую.
 
Georgiy Merts #:

Интересное наблюдение: в функции OnTesterPass(), когда выясняется, что оптимизация идёт слишком долгое время - вызываю функцию ExpertRemove().

Эксперт, видимо, снимается с тестирования, происходит обработка фреймов, собранных за прошедшее время, формируется нормальный файл отчета (моими, внутренними функциями), но сам процесс оптимизации продолжается дальше. 

Значит, нельзя в OnTesterPass() остановить оптимизацию. 

Ищем варианты дальше.  

Нельзя никак. Даже если программно закрыть в терминале тот чарт, на котором выполняется контролирующая оптимизацию копия эксперта (в котором срабатывают OnTesterXXX-события). ИМХО, это баг, но есть как есть.

 
Maxim Kuznetsov #:

если по F3 она отображается, ТО ЭТО ОШИБКА

у тестера/оптимизатора и терминала - разные пространства имён

Да, возможно.

Вот и проблема в том, чтобы из терминала в тестер передать данные "в другое пространство". 

 
Georgiy Merts #:

Да, возможно.

Вот и проблема в том, чтобы из терминала в тестер передать данные "в другое пространство". 

не просто "да, возможно", но если в OnTesterInit установка глоб.переменной меняет (или устанавливает) значения которые вы видите тыкнув F3 терминала, это не "проблема", это @#па

 
Georgiy Merts #:

Разве TimeLocal() в проходе тестера возваращает время на компьютере? Мне казалось, что эта функция возвращает время в среде самого тестируемого эксперта. 

Как мне кажется, такая функция прервёт работу эксперта в одиночном проходе. 

А требуется прервать процесс оптимизации при достижении условия (либо максимального времени, либо необходимого значения OnTester()

Я не прав? 

Это скрипт, запуск которого в Терминале запустит Оптимизатор любого выбранного в нем советника и прервет эту оптимизацию через заданное время.

 
Georgiy Merts #:

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

Пока что, как я вижу - вариант с дополнительной переменной наилучший. При начале оптимизации каждый агент получает время старта через дополнительную переменную, а внутри OnInit() анализирует текущее время (причём, получать его надо не через TimeLocal(), а через создание временного файла и анализ параметров его создания), и если прошло слишком много времени - возвращать AGENT_NOT_SUITABLE.

Сегодня я уже не буду заниматься, а вот завтра - попробую.

А через GetTickCount() никак не пойти? Или там тоже моделируемые?

 
fxsaber #:

Это скрипт, запуск которого в Терминале запустит Оптимизатор любого выбранного в нем советника и прервет эту оптимизацию через заданное время.

Надо разобраться. Хорошо звучит, именно то, что надо.