Обсуждение статьи "Пользовательские инструменты отладки и профилирования для разработки на MQL5 (Часть II): Профилирование советников и тестирование торговой логики"

Опубликована статья Пользовательские инструменты отладки и профилирования для разработки на MQL5 (Часть II): Профилирование советников и тестирование торговой логики:

Мы создаём компактный профилировщик, который записывает в CSV количество вызовов, минимальное, максимальное и среднее время выполнения, а также количество медленных вызовов, и простую среду запуска тестов, которая формирует детерминированные отчёты об успешном или неуспешном прохождении тестов. В статье объясняется, где размещать замеры в советнике, как выполнять выборку тиков и как сохранять возможность тестирования чистых вычислений. Выполнение сначала скрипта, а затем профилирующего советника позволяет получить воспроизводимые данные для регрессионного анализа.

Журналы описывают ход события. Они хорошо отвечают на такие вопросы, как "Выполнил ли советник эту ветвь кода?" или "Почему ордер был заблокирован?", но гораздо хуже помогают оценить затраты при многократном выполнении операций. Если CopyBuffer() работает чуть медленнее на протяжении тысяч вызовов, обычный журнал даёт лишь информационный шум, а профилировщик — число вызовов, суммарное, минимальное, максимальное и среднее время выполнения. С корректностью возникает аналогичная проблема: журнал может сообщить об обнаружении сигнала на покупку, но не может доказать, что этот сигнал получен по задуманному правилу.

Пересечение скользящих средних может выглядеть правдоподобно на вкладке "Эксперты", даже если используется неверный индекс бара. Правило расчёта объёма может работать корректно для большинства символов, но давать сбой при минимальном объёме, установленном брокером. Проверка расстояния до стопа может корректно работать для валютного символа с пятью знаками после запятой в котировке, но давать сбой для металла с двумя знаками после запятой. В таких случаях полезно выделить три вида доказательств:

  • Ведение журнала — это наблюдение: в нём фиксируется то, что, по словам программы, она сделала.
  • Профилирование — это измерение: оно фиксирует, как часто выполнялись выбранные операции и сколько ресурсов они потребовали.
  • Модульное тестирование — это проверка: оно позволяет убедиться, что выбранные правила по-прежнему возвращают ожидаемые результаты при фиксированных входных данных.


Автор: Sahil Bagdi