начал с ограничения по времени.
Внутри функции Init() во время прохода эксперта в тестере пытаюсь обратиться к этой глобальной переменной. Потом планирую запросить текущее время (тоже через временный файл), и если прошло уже слишком много времени - возвратить параметр AGENT_NOT_SUITABLE. В результате тестирование завершается, а обработка фреймов получает лучший проход.
Однако, эксперт во время прохода оптимизации почему-то не находит глобальную переменную (хотя, по F3 глобальная переменная есть). Функция GlobalVariablesTotal() тоже почему-то возвращает NULL (стало быть, глобальные переменные в проход тестера не передаются). Я что-то делаю не так?
А какие предложение у форумчан?
Глобальные переменные в каждом процессе свои: в терминале - свои, на каждом агенте - свои. Обмениваться инфой можно через локальные файлы в общей папке, если агенты локальные.
В общем случае, включая управление удаленными агентами, возможность прервать оптимизацию не запроектирована.
Глобальные переменные в каждом процессе свои: в терминале - свои, на каждом агенте - свои. Обмениваться инфой можно через локальные файлы в общей папке, если агенты локальные.
В общем случае, включая управление удаленными агентами, возможность прервать оптимизацию не запроектирована.
Даже Глобальные Переменные Терминала?
Странно...
Ну... Попробую и через файлы.
Глобальные терминала - внутри терминала, само название намекает.
Ваша конкретная задача имеет относительно простое решение: в начале оптимизации, внутри OnTesterInit, можно использовать ParameterSetRange, чтобы указать физическое время старта в некоторой вспомогательной input-переменной, и от неё отсчитывать лимит времени на каждом агенте.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132 input int inMaxTesterTime = 10; void OnStart() { if (MTTESTER::ClickStart()) // Запустили. { const datetime StartTime = TimeLocal(); while (!IsStopped() && !MTTESTER::IsReady()) // Пока Тестер работает { Sleep(1000); if ((TimeLocal() - StartTime >= inMaxTesterTime)) // проверяем длительность. { MTTESTER::ClickStart(false); // Закончили. break; } } } }
Разве TimeLocal() в проходе тестера возваращает время на компьютере? Мне казалось, что эта функция возвращает время в среде самого тестируемого эксперта.
Как мне кажется, такая функция прервёт работу эксперта в одиночном проходе.
А требуется прервать процесс оптимизации при достижении условия (либо максимального времени, либо необходимого значения OnTester()
Я не прав?
Всех приветствую.
Такая задача - запускаем тестирование эксперта в тестере стратегий, хочется, чтобы он прекращал оптимизацию либо при достижении определённого результат OnTester(), либо при слишком долгой оптимизации. Как бы это сделать? У кого какой опыт и предложения?
Я начал с ограничения по времени.
В функции OnTesterInit() запрашиваю время сервера (не TimeCurrent(), текущее время на компьютере через создание временного файла).
Создаю глобальную переменную с этим временем. Сразу вызываю функцию GlobalVariablesFlush(), чтобы записать глобальную переменную на диск.
Внутри функции Init() во время прохода эксперта в тестере пытаюсь обратиться к этой глобальной переменной. Потом планирую запросить текущее время (тоже через временный файл), и если прошло уже слишком много времени - возвратить параметр AGENT_NOT_SUITABLE. В результате тестирование завершается, а обработка фреймов получает лучший проход.
Однако, эксперт во время прохода оптимизации почему-то не находит глобальную переменную (хотя, по F3 глобальная переменная есть). Функция GlobalVariablesTotal() тоже почему-то возвращает NULL (стало быть, глобальные переменные в проход тестера не передаются). Я что-то делаю не так?
А какие предложение у форумчан?
Подозрения что не проверяете успех "создаю глоб.переменную" и видимо в OnTesterInit сие не сработает.
Глобальные терминала - внутри терминала, само название намекает.
Ваша конкретная задача имеет относительно простое решение: в начале оптимизации, внутри OnTesterInit, можно использовать ParameterSetRange, чтобы указать физическое время старта в некоторой вспомогательной input-переменной, и от неё отсчитывать лимит времени на каждом агенте.
Я попробую.
Время начала тестирования определять через время создания файла, и его передавать во вспомогательной переменной каждому агенту, а внутри агента также запрашивать время через создание файла, и сравнивать его со временем старта. Если прошло слишком много - в Ините возвращаем AGENT_NOT_SUITABLE.
Подозрения что не проверяете успех "создаю глоб.переменную" и видимо в OnTesterInit сие не сработает.
В OnTesterInit() глобальная переменная создаётся. И по F3 она отображается правильно.
А вот в Агенты тестирования эта глобальная переменная не попадает.
Пока решение "через дополнительную переменную" мне представляется наиболее приемлемым. Сегодня я уже не буду заниматься, а вот завтра с утра - попробую.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всех приветствую.
Такая задача - запускаем тестирование эксперта в тестере стратегий, хочется, чтобы он прекращал оптимизацию либо при достижении определённого результат OnTester(), либо при слишком долгой оптимизации. Как бы это сделать? У кого какой опыт и предложения?
Я начал с ограничения по времени.
В функции OnTesterInit() запрашиваю время сервера (не TimeCurrent(), текущее время на компьютере через создание временного файла).
Создаю глобальную переменную с этим временем. Сразу вызываю функцию GlobalVariablesFlush(), чтобы записать глобальную переменную на диск.
Внутри функции Init() во время прохода эксперта в тестере пытаюсь обратиться к этой глобальной переменной. Потом планирую запросить текущее время (тоже через временный файл), и если прошло уже слишком много времени - возвратить параметр AGENT_NOT_SUITABLE. В результате тестирование завершается, а обработка фреймов получает лучший проход.
Однако, эксперт во время прохода оптимизации почему-то не находит глобальную переменную (хотя, по F3 глобальная переменная есть). Функция GlobalVariablesTotal() тоже почему-то возвращает NULL (стало быть, глобальные переменные в проход тестера не передаются). Я что-то делаю не так?
А какие предложение у форумчан?