Что такое Walk-Forward тестирование?
Простым языком, Walk-Forward тестирование эмулирует переодическую переоптимизацию советника и его торговлю на исторических данных.
Т.е., для примера: провели оптимизацию за 3 месяца (In Sample / Back Test), выбрали лучший сет параметров, торгуем с этим сетом 1 месяц (Out Of Sample / Forward Test). После чего опять проводим оптимизацию за 3 месяца, выбираем лучший и торгуем с эти сетом еще месяц. И так далее.
Результат тестирования (за исключением первого IS участка), как мы видим, будет состоять из идущих друг за другом OOS участков зеленого цвета, т.е. честных участков торговли.
Что дает Walk-Forward тестирование?
Это тестирование позволяет на историческом отрезке времени оценить устойчивость системы на Forward-участках и выявить те параметры системы, которые имеет смысл оптимизировать.
Если в результате тестирования на forward участках система показывает плохие результаты, то причин 3:
1) Торговая система бесперспективна либо нужно изменить или доработать ее алгоритмы
2) Выбраны неподходящие параметры для оптимизации
3) После оптимизации выбирается неподходящий сет
Выбор правильных параметров и сетов - отдельная проблема, ведь некоторые параметры приводят к переоптимизации, а из 15-20 сетов только несколько оказываются вполне рабочими.
Ручной Walk Forward с использованием штатного тестера
Первое, что приходит в голову - запускать штатный тестер в MT5 на всех участках с включенным форвардом. Выбираем лучший сет найденный на участке оптимизации и записываем результат его форварда. После прогона на последнем участке, результаты форвардов суммируем. Это и будет результатом торговли.
Достаточно трудоемкое занятие, особенно когда идет разработка системы и нужно оценивать эффект от каждого нововведения.
Вариациями на тему может быть сбор статистических данных на каждом участке (что возможно делать в торговом роботе через фреймы оптимизации) с последующим анализом форвардов в сторонних программах.
Автоматический Walk Forward с использованием штатного тестера
Приемлемым вариантом в штатном тестере мог бы быть такой:
Walk-Forward тестирование походило бы на обычный единичный прогон, в котором график баланса строился из Forward участков.
Но чего нет, того нет.
Можно ли сейчас, используя тестер MT5, провести оптимизацию и форвард прогоны последовательно на отдельных кусках истории и получить итоговый результат за одно нажатие кнопки?
Как оказалось можно, при работе по такой схеме:
- Запуск в тестере сразу на всем периоде в режиме оптимизации с полным перебором.
- Перебирается только 1 служебный параметр. Нам понадобится большое количество итераций, поэтому количество шагов нужно выставить с запасом например 100 000 (это можно сделать программно через ParameterSetRange).
Со стороны тестера все. Остальное реализует программная часть написанная на MQL5.
Что происходит в программной части:
- Ведется счетчик участков. На основании этого счетчика советнику разрешается торговать N дней (In Sample участок).
- Перебор значений параметров эксперта и анализ результата ведется программно через встроенный генетический алгоритм. (Тестер на каждой итерации просто послушно выплевывает результаты торговли с измененными параметрами в фреймы)
- По результатам генетической оптимизации сетов (с кастомным критерием, например основанным на минимальной просадке,максимальной прибыли и максимальном количество сделок) остается сет-победитель.
- На следующей итерации советнику разрешается торговать M дней (на OOS первого участка), этот результат торговли мы запоминаем.
- Делаем приращение счетчика участков и переходим к пункту 1.
Как только участки заканчиваются, мы переводим эксперт в режим остановки, и штатный оптимизатор быстро заканчивает уже не нужный перебор служебного параметра.
Весь процесс можно визуализировать, т.к. при работе в режиме анализа фреймов терминал запускает эксперт с флагом MQLInfoInteger(MQL_FRAME_MODE)
Все вышеизложенное проверено в черновом варианте без генетического алгоритма поиска, т.к. у меня пока нет его MQL реализации.
Во второй части статьи покажу визуализированные результаты прогонов с перебором параметров без генетики.