Новая версия платформы MetaTrader 5 build 5430: Улучшенные графики на движке Blend2D - страница 26
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я хотел найти способ остановить оптимизацию из MQL5.
Да и если бы собирал в OnTesterPass(), то пришлось бы дописывать инфу в конец файла (или в разные). Тысячи открытий закрытий файла(ов) и дозаписи вместо одного.
Почему не дозаписывать без закрытия? Если представить обработчик фреймов, как функцию, то ее вызов нужно прописать только в OnTesterPass и OnTesterDeinit - две строки.
главная проблема в том, что если окно оптимизации закрыть, то часть проходов запишется, а все что после - нет (хотя я несколько лет это не пробовал, на 100% не уверен). И как потом мне эту неполную часть проходов обрабатывать?
mqd-файл читать.
Отчет в .opt будет полный, а данные из фреймов - частичные. При повторной оптимизации - придется снова все проходы рассчитывать, как то выбрать, что рассчитывать, а что нет - не представляю... так что толку от частичной информации нет, пусть уж будет или всё или ничего в OnTesterDeinit().
Вы же можете при запуске оптимизации автоматом штатно задать единое значение входного параметра для всех проходов. И в проходах это значение прописывать во FrameAdd, фильтруя при получении через FrameFilter. Это позволить отделять новые оптимизации от предыдущих.
И вообще неясно зачем нужна OnTesterPass() если она и опоздавшие фреймы может пропустить и при закрытии окна остаток перестанет обрабатывать. Разве только чтобы старые коды продолжали работать, которые её используют.
Чтобы можно было обрабатывать то, что уже получили.
Исправлено в версии 5488.
Поле ввода в тестере стратегий работает некорректно даже при указание размера шрифта.
1. Создаем поле ввода в тестере
2. Нажимаем на него, чтобы активировать ручной ввода
3. Отжимаем (делаем неактивным)
4. Введенное значение находится в поле ввода, но его не видно.
Вы же можете при запуске оптимизации автоматом штатно задать единое значение входного параметра для всех проходов. И в проходах это значение прописывать во FrameAdd, фильтруя при получении через FrameFilter. Это позволить отделять новые оптимизации от предыдущих.
Но я хотел не совсем то...
А чтобы после закрытия окна и частично потерянными данными из фреймов, но с завершенной оптимизацией в opt файлах - потом пропустить оптимизации, для которых есть фреймовые записи. Если просто запустить - то тестер считает opt файл из кеша. Если поменять какой то незначимый параметр - то оптимизация начнется сначала. Вот тут то можно считывать ранее созданный файл с фреймовыми данными, каждым проходом в onInit() и если данные есть, то завершить проход без расчетов. Вроде должно работать. Но при этом в новый opt файл запишутся нули для таких проходов. И придется обрабатывать оба opt файла. Всю эту схему еще объяснить надо рядовому пользователю....
Сколько проблем из за случайно закрытого окна оптимизации. Гораздо более удобным для пользователей было бы отсутствие возможности закрыть окно. Или возможность работы в скрытом окне. Как в начале и предлагал.
Пока же обойдусь предупреждением на нем:

Mt5 вылетает при запуске. запускается и вылетает через секунду.
Mt5 вылетает при запуске. запускается и вылетает через секунду.
Не вижу бага. Все же прием фреймов и их запись - разные задачи. Фреймовый советник только получает Pass-уведомления об обновлении mqd-файла.
Задачи разные, но первичная и вторичная, ИМХО, перевернуты по смыслу функционала на 180 градусов. Фреймы были задуманы для их кастомной обработки во фреймовом советнике (терминал вообще не в курсе, что там за данные и как их обрабатывать). То, что они дополнительно сохраняются во внутреннем кеше терминала в виде mqd-файла - нюанс реализации, потому что простое их складирование никакой пользы не несет. А штатных (встроенных) средств их чтения нет. Понятно, что зная формат (неофициально опубликованный!) можно прочитать файл через MQL5, но он лежит вне песочницы, что намекает на нестандартные доп. действия.
Резюме - выгрузка фреймового советника - это явный запрос на остановку оптимизации. И как было замечено в обсуждении - нужно выдавать запрос пользователю на подтверждение. Полностью блокировать окно считаю неправильным, потому что и так отсутствуют средства управления оптимизацией. Остановка оптимизации через блокировку отдельных проходов - это очень неэкономный способ, и небыстрый, потому что сработает только после отработки всех текущих пакетов заданий на агентах.
Использование DLL/WinApi разумеется тоже возможно для GUI-автоматизации, но это как играть в шахматы по переписке.
Так много технических подробностей....
Mt5 вылетает при запуске. запускается и вылетает через секунду.
подобное поведение бывает при обновлениях (терминал запускается, "вылетает", потом через несколько времени запускается новая версия).
Иногда могут быть ошибки обновления. Например какой-то файл не читается или не перезаписывается.
"По колёсам постучать":
- перезагрузить комп. Чтобы все временные блокировки пропали
- проверить диск на наличие ошибок
- при выключенном терминале:
- в диспетчере снять все задачи MetaTrader, MetaEditor (Optimizer и прочие) если они там окажутся
- в каталоге %APPDATA%/Roaming/MetaQuotes/WebInstall удалить все файлы. Это обновления, может почему-то битое получилось
- временно отключить антивир, потому-что он может быть параноиком и блокировать загрузки/запуски/файлы
- запустить MetaTrader
- ЖДАТЬ :-) При запуске он будет закачивать обновления и потом их запускать