В MQL5 отсутствуют встроенные средства модульного тестирования, поэтому ошибки в служебных функциях расчёта размера лота, стоимости пункта и нормализации часто попадают в рабочий код. В этой статье представлен фреймворк без внешних зависимостей, построенный на макросах утверждений препроцессора, наборах тестов на основе интерфейсов и центральном средстве запуска тестов с модулем форматирования результатов. Он работает как скрипт в обработчике OnStart, выполняет детерминированные тесты и выводит сводку об успешных и неуспешных тестах на вкладку "Эксперты", позволяя выявить дефекты округления, обработки граничных значений и ошибок до развёртывания.
Рассмотрим калькулятор размера лота, который рассчитывает объём позиции на основе средств счёта, процента риска и расстояния до стоп-лосса. Функция может безупречно работать с типичными входными данными, но незаметно давать неверный результат, когда рассчитанный размер лота оказывается между двумя допустимыми значениями, кратными шагу лота, и округляется в неправильном направлении.
Данный тип ошибки не приведет к сбою работы советника и не вызовет появления кода ошибки в терминале. Она просто размещает ордер с объемом, который немного отличается от заданного, тем самым незаметно искажая профиль риска стратегии в ходе сотен сделок. Без формального утверждения, проверяющего точность результатов для известных входных данных, такие дефекты с накапливающимся эффектом остаются совершенно незаметными при поверхностном наблюдении.
Чтобы восполнить этот пробел, в статье разрабатывается фреймворк тестирования на самом MQL5, без внешних зависимостей. Архитектура основана на трёх структурных компонентах:
Макросы утверждений препроцессора: автоматически фиксируют исходный файл и точный номер строки, в которой тест завершился неудачей.
Наборы тестов на основе интерфейсов: изолируют и группируют связанную тестовую логику, поддерживая порядок в рабочей среде разработки.
Центральное средство запуска тестов: объединяет результаты отдельных тестов и выводит структурированную сводку об успешных и неуспешных тестах.
Вся система работает как стандартный скрипт MQL5, не требует никаких внешних инструментов и выводит результаты непосредственно на вкладку "Эксперты" терминала.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Опубликована статья Создание фреймворка для модульного тестирования на этапе компиляции в MQL5 с использованием утверждений препроцессора:
Рассмотрим калькулятор размера лота, который рассчитывает объём позиции на основе средств счёта, процента риска и расстояния до стоп-лосса. Функция может безупречно работать с типичными входными данными, но незаметно давать неверный результат, когда рассчитанный размер лота оказывается между двумя допустимыми значениями, кратными шагу лота, и округляется в неправильном направлении.
Данный тип ошибки не приведет к сбою работы советника и не вызовет появления кода ошибки в терминале. Она просто размещает ордер с объемом, который немного отличается от заданного, тем самым незаметно искажая профиль риска стратегии в ходе сотен сделок. Без формального утверждения, проверяющего точность результатов для известных входных данных, такие дефекты с накапливающимся эффектом остаются совершенно незаметными при поверхностном наблюдении.
Чтобы восполнить этот пробел, в статье разрабатывается фреймворк тестирования на самом MQL5, без внешних зависимостей. Архитектура основана на трёх структурных компонентах:
Вся система работает как стандартный скрипт MQL5, не требует никаких внешних инструментов и выводит результаты непосредственно на вкладку "Эксперты" терминала.
Автор: Ushana Kevin Iorkumbul