Делаем Walk-Forward на MQL5 с использованием штатного тестера. Часть 1.

Делаем Walk-Forward на MQL5 с использованием штатного тестера. Часть 1.

18 апреля 2016, 21:54
Igor Volodin
5
646

Что такое  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. Запуск в тестере сразу на всем периоде в режиме оптимизации с полным перебором.
  2. Перебирается только 1 служебный параметр. Нам понадобится большое количество итераций, поэтому количество шагов нужно выставить с запасом например 100 000 (это можно сделать программно через ParameterSetRange).  

Со стороны тестера все. Остальное реализует программная часть написанная на MQL5.


Что происходит в программной части:

  1. Ведется счетчик участков. На основании этого счетчика советнику разрешается торговать N дней (In Sample участок). 
  2. Перебор значений параметров эксперта и анализ результата ведется программно через встроенный генетический алгоритм. (Тестер на каждой итерации просто послушно выплевывает результаты торговли с измененными параметрами в фреймы)
  3. По результатам генетической оптимизации сетов (с кастомным критерием, например основанным на минимальной просадке,максимальной прибыли и максимальном количество сделок) остается сет-победитель.
  4. На следующей итерации советнику разрешается торговать M дней (на OOS первого участка), этот результат торговли мы запоминаем.
  5. Делаем приращение счетчика участков и переходим к пункту 1. 

Как только участки заканчиваются, мы переводим эксперт в режим остановки, и штатный оптимизатор быстро заканчивает уже не нужный перебор служебного параметра.

Весь процесс можно визуализировать, т.к. при работе в режиме анализа фреймов терминал запускает эксперт с флагом  MQLInfoInteger(MQL_FRAME_MODE)

Все вышеизложенное проверено в черновом варианте без генетического алгоритма поиска, т.к. у меня пока нет его MQL реализации.

Во второй части статьи покажу визуализированные результаты прогонов с перебором параметров без генетики.


Поделитесь с друзьями: