Тестирование нового компилятора MQL5 для x64 платформ - ускорение расчетов от 2 до 10 раз! - страница 14
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Хотел сегодня проверить ускорение вычислений на своём эксперте в предвкушении супер скорости (даже проц помощнее взял) и... почему-то эксперт с оптимизацией работал в тестере в 3 раза медленней. У вас такого не было? Как локализую и воспроизведу проблему, напишу код. Там системных вызовов нет, только работа с кучей массивов и базовые арифметические операции.
Ещё пара пожеланий:
1. Можно добавить возможность из редактора запускать скрипт без отладки, т.е. как будто из Навигатора. Такой тип запуска есть в любой среде разработки. Думал, как в сях, предложить Ctrl + F5, но вы эту комбинацию уже заняли :)
2. Добавить вызов виндовой консоли stdout из скрипта, чтобы не переключаться каждый раз в терминал, чтобы посмотреть результат скрипта. Хотя, как я понимаю, можно самому её попробовать вызвать средствами WinAPI.
3. Добавить хоть какую-то настройку оптимизации по генетическому алгоритму. Например, число комбинаций может быть 1e35 и 10к проходов не всегда хватает (оптимизатор даже не генерирует новые проходы после 10к), понимаешь, что 20-30к хватило бы, но настроить это никак не можешь. С другой стороны, когда ты какие-то параметры зафиксировал, а часть оставил для более точной настройки и изучения распределения... так вот, когда число комбинаций небольшое, например, 50к, оптимизатор для ГА предлагает всего 2к прогонов - а этого тоже недостаточно для этой конкретной задачи - получше изучить поведение функции на этих параметрах. Т.е. перебирать все 50к глупо, а ГА генерирует всего 2к прогонов и не выдаёт достаточной картины. Надеюсь, вы поняли, о чём я говорю.
Улучшения будут обязательно.
кто-нибудь уже протестировал отладку на истории в тестере стратегий?
Улучшения будут обязательно.
кто-нибудь уже протестировал отладку на истории в тестере стратегий?
Улучшения будут обязательно.
кто-нибудь уже протестировал отладку на истории в тестере стратегий?
А еще было бы неплохо иметь возможность выбрать "find usages" из контестного меню.
понимаю немного не по теме, но глабалных изменений писать особо не надо, а такие фишечки приятно иметь разработчикам.
я проверил досконально на новом компиляторе Moving Average, MACD Sample расхождения не нашел, видно хорошо на них оттестировались. Попробую на своих советниках.
До конца не отладил и не нашёл, как вылезает баг (очень по-разному), но пока обнаружил следующие проблемы при Optimize=1. Сразу скажу, что у моего эксперта порядка 100 входных параметров, и он много работает с массивами. Плюс он не торгует, а делает только вычисления.
Опишу порядок моих действий:
1. Запускаю терминал, выбираю в тестере "Оптимизация = Отключена" и даю эталонный входной набор параметров. Тестер выдаёт правильный результат.
2. Выбираю "Оптимизация = Быстрая (генетический алгоритм)", запускаю - тестер даже не генерирует первый шаг. Агенты (процессоры) не отвечают. Сначала я думал, что могут возникать какие-то ошибки вычислений при плохих наборах параметров и тестер просто умирает.
3. Снова выбираю "Оптимизация = Отключена" и снова даю эталонный набор. Теперь тестер вообще не выдаёт результатов.
4. Открываю код эксперта в редактора, нажимаю F5, чтобы сгенерировать неоптимизированный код. В тестере опять запускаю на эталонном наборе - вуаля, результат есть. В общем, что-то внутри у него сглючивает из-за оптимизации.
Я добавил функцию, которая логирует в файл входные параметры эксперта. Так вот, на шаге 2 (запущена оптимизация, а шаги тестера почти не генерируются) для некоторых параметров проскакивали рандомные значения, которые вообще не предусмотрены, потому что параметр либо неизменяемый, либо значение не входит в выставленный диапазон. Например, у меня один параметр был выставлен на 80 и был неизменяемым. В логе было значение 0.01355835795402527 (?). Другой выставлен на 0, в логе 4.940656458412465e-324; Оба параметра были double. Но потом я обнаружил, что для int тоже проскакивают совсем неподходящие значения.
Во-вторых, я вырезал "лишний" код эксперта, чтобы оставить только такой код, который тоже приводит к ошибке. Получилось всё равно довольно много. Плюс функция логирования выводила значение ВСЕХ параметров. Однако, когда я поудалял большую часть параметров (и их стало меньше 64 или 80), тестер не умирал. При этом ещё обнаружилась странная связь ошибки с моей функцией логирования. Когда она закомментирована (т.е. все параметры НЕ используются в коде), тестер умирает. Когда она логирует, тестер умирает. Очень странно.
И третье. Заметил, что распараллеливание вычислений не приводит к линейному росту общей скорости запусков. Для примера прилагаю файлы: скрипт и эксперт с тем же кодом. Это реальный кусок кода, вырезанный из моего эксперта, только массивы переименованы. При Optimize=1 скрипт у меня отрабатывает за 156 мс, т.е. возможно 6 прогонов за секунду. (Без Optimize в 3 раза дольше). У меня 8 потоков, т.е. теоретически возможно 48 прогонов в секунду. При запуске же эксперта в тестере (делаем Медленную оптимизацию, включаем параметр dummy, например, на 2000 прогонов) я получил всего лишь чуть больше 4 прогонов в секунду, т.е. даже медленней, чем на одном ядре! Хотя в диспетчере задач честно висело 8 процессов. Из-за чего так? Блокировка доступа к памяти нескольких процессов? Долгая инициализация массивов? (Правда, там массивы небольшие).
Запускаем в тестере одиночный прогон, в журнале появляется вывод Print: 156 мс. Т.е. с экспертом как бы всё нормально.
Кстати, указатели в MQL когда-нибудь будут? :) А то мне вот пришлось делать массивы-копии.
почему-то эксперт с оптимизацией работал в тестере в 3 раза медленней.
Сейчас понял, почему становится медленнее - работает только один агент (случайный), другие - failed и так постоянно по одной попытке раз в несколько секунд. Из лога тестера ничего непонятно. Как я понял, если фейлит и самый последний агент, то случается то, о чём я писал раньше: шаги тестера вообще не генерируются.
Билд 1117 не решил всех вышеописанных проблем (в т.ч. с массивом struct).
Сегодня обновился до 1117, но отладка на исторических данных - так и не идет.
Беру ExpertMACD.mt5, ставлю брейкпоинт прямо на входе в функцию Init, запускаю отладку на исторических данных (нажимаю кнопку), окно редактора прикрывается, открываются настройки тестера стратегий. Выставляю временной период (за 2015 год, дневки, все тики), визуализация - стоит галочка, нажимаю кнопку Старт - и пошла визуализация. Брейкпоинт не сработал.
Что я делаю не так ?
Сегодня обновился до 1117, но отладка на исторических данных - так и не идет.
Беру ExpertMACD.mt5, ставлю брейкпоинт прямо на входе в функцию Init, запускаю отладку на исторических данных (нажимаю кнопку), окно редактора прикрывается, открываются настройки тестера стратегий. Выставляю временной период (за 2015 год, дневки, все тики), визуализация - стоит галочка, нажимаю кнопку Старт - и пошла визуализация. Брейкпоинт не сработал.
Что я делаю не так ?
Нужно открыть демо счёт на MetaQuotes-Demo, затем
У меня на MACD Sample.mq5 на демо-счёте moex символ USDRUB_TOM не работает (сначала начинает работать, затем через несколько шагов прекращает), не работает и простой бэктест.
А Moving Average.mq5 на демо-счёте moex символ USDRUB_TOM работает нормально (и простой бэктест тоже).
На демо-счёте demoforex символ EURUSD работает нормально (и простой бэктест тоже) MACD Sample.mq5 и Moving Average.mq5
Записал видео отладки на MACD Sample.mq5 символ EURUSD на демо-счёте demoforex. (дневки тоже работают нормально)
До конца не отладил и не нашёл, как вылезает баг (очень по-разному), но пока обнаружил следующие проблемы при Optimize=1. Сразу скажу, что у моего эксперта порядка 100 входных параметров, и он много работает с массивами. Плюс он не торгует, а делает только вычисления.
...............................................
Кстати, указатели в MQL когда-нибудь будут? :) А то мне вот пришлось делать массивы-копии.
Добрый день, хотелось бы побольше конкретики.
1. Ваш эксперт делает вычисления, но не торгует. Что и как выводит эксперт? Что вы ожидаете от эксперта при запуске в тестере стратегий? Какие данные Вы ожидаете получить при тестировании с оптимизацией? На нашей стороне тестирование приложенного Вами эксперта ошибок не выявило. Описанные Вами ошибки относятся к нему?
2. Опишите пошагово свои действия и ожидания с приложением используемого кода пожалуйста.
3. Можете приложить логи тестирования с оптимизацией и без?
4. Ваша версия терминала, ОС?
Eduard Vavrin, приложенный файл не относится к описанным ошибкам. Давайте, я попробую подготовить код, который приводит к ошибке, и пришлю вам. Просто это потребует времени и пока что этот код содержит слишком много от исходного эксперта.
По поводу приложенного мной фала: там шла речь о том, что одиночный запуск приложенного эксперта занимает 156 мс, т.е. 1/6 секунды. Можно предположить, что на 8 потоках мы получим 48 запусков в секунду. В реальности при множественном прогоне (для этого есть параметр dummy, режим Медленной оптимизации) на 8 потоках скорость получается всего лишь 4-5 прогонов в секунду. Вопрос был: почему скорость падает? На вкладке Агенты я вижу, что все потоки работают, и каждый поток тратит на прогон больше 1 секунды. То, что эксперт возвращает rand() - это так, для галочки, чтобы видеть, что он отработал.