Walk-Forward оптимизация по-простому

22 мая 2017, 16:27
Stanislav Korotky
0
1 385

Метод walk-forward оптимизации пользуются популярностью у трейдеров благодаря своей эффективности в анализе и настройке EA. Некоторое время назад в Маркете стали доступны два продукта для проведения такой оптимизации в МетаТрейдере - библиотека WalkForwardOptimizer (WFO) и скрипт WalkForwardReporter. Они поддерживают несколько режимов работы и предоставляют гибкие настройки, но из-за этого могут показаться сложными для простых пользователей. Для решения этой проблемы имеются упрощенные версии библиотеки и скрипта. Это совершенно отличные продукты. Ниже представлено руководство пользователя для новых продуктов. Если Вы не знакомы с технологией walk-forward, ознакомьтесь с вводной информацией в руководстве пользователя WFO.

 

Введение 

Библиотека WalkForwardLight (wfL) и скрипт WalkForwardbuilder (wfLbuilder) представляют собой набор инструментов для простого и быстрого исследования стабильности торговых роботов.

Библиотека WalkForwardLight встраивается в ваш эксперт и собирает во время оптимизации данные о поведении EA: баланс, плавающую прибыль, количество ордеров на каждом баре. Затем с помощью скрипта WalkForwardBuilder можно сгенерировать walk-forward HTML-отчет на основе собранных данных.

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

Набор инструментов WalkForwardLight реализует walk-forward необычным способом. Он не воспроизводит стандартный цикл пошаговой оптимизации на in-sample данных и последующее тестирование на данных out-of-sample. Изменение процесса направлено на существенное уменьшение вычислительной нагрузки и упрощение настройки (подробности - далее). Если Вы считаете, что должны использовать walk-forward в точном соответствии с каноническим подходом, используйте продукты WalkForwardOptimizer и WalkForwardReporter. Они потребуют вдумчивого подбора настроек и длительного процесса оптимизации, включая несколько вспомогательных мета-параметров, добавляемых библиотекой WFO (это может существенно увеличить пространство поиска). Если это представляет для Вас сложности, используйте wfL. Она предоставляет основные возможности walk-forward анализа на раз-два-три. Несмотря на модификацию walk-forward тестирования, эта версия дает хорошую оценку устойчивости EA.

Цель walk-forward методологии не столько в поиске оптимальных параметров EA, сколько в определении подходящей глубины истории для оптимизации и периода, через который нужно проводить переоптимизацию советника. Еще одна задача walk-forward - убедиться в том, что прибыльность робота падает незначительно с течением времени или, иными словами, нет проблемы переобучения.

Процесс описывается следующими шагами:

1. Встроить библиотеку WFL в эксперт;
2. Запустить оптимизацию эксперта как обычно и сохранить результаты с помощью стандартных команд МетаТрейдера;

3. Скопировать данные, собранные библиотекой из папки tester/Files в папку MQL4/Files и запустить скрипт построения отчета (это актуально только в МетаТрейдер 4, т.к. версия для МетаТрейдер 5 делает это автоматически).

Основное различие между упрощенным и классическим подходом walk-forward заключается в том, что упрощенный запускает встроенный тестер в режиме оптимизации (фактически, это просто перебор параметров) на полном периоде, а не шаг за шагом. При использовании генетического метода оптимизации это вносит некоторую предвзятость из-за того, что проверяемые наборы параметров являются оптимальными в глобальном смысле. Это можно расценивать как заглядывание в будущее. Однако, с другой стороны, наилучшие в глобальном смысле параметры, скорее всего, будут давать меньшие прибыли, чем параметры, которые могли бы быть найдены при локальной оптимизации на конкретном окне (меньшем временном отрезке).

Данная проблема отсутствует при медленном полном переборе параметров, поскольку тогда в любом случае перебираются все сочетания параметров.

 

Встраивание библиотеки в советник

Чтобы встроить библиотеку в советник используйте следующий заголовочный файл wfL.mqh, который должен находиться в папке MQL4/Includes:

#import "WalkForwardLight.ex4"
  int wfl_OnInit(const int cleanUpTimeout);
  void wfl_OnTick();
#import

Сама библиотека - WalkForwardLight.ex4 (в случае МетаТрейдер 4) - размещается в папке MQL4/Libraries (или MQL4/Libraries/Market, в последнем случае директива импорта должна быть #import "Market/WalkForwardLight.ex4").

Если после скачивания библиотеки из Маркета она расположена в папке MQL4/Experts/Market или MQL4/Scripts/Market, переместите её в папку MQL4/Libraries для того, чтобы заработали импорты из экспертов. К сожалению, этот нюанс с папками связан с тем, как Маркет "раздает" библиотеки.

Добавьте следующий код в советник:

#include <wfL.mqh>

int OnInit()
{
  // ... ваш код
  wfl_OnInit(60);
}

void OnTick()
{
  // ... ваш код
  wfl_OnTick();
}

Функция wfl_OnInit должна вызываться из обработчика события OnInit. Параметр cleanUpTimeout задает количество секунд, по истечении которых библиотеке разрешено автоматически удалять специальные глобальные переменные с префиксом WFL_, созданные библиотекой во время предыдущей оптимизации. Наличие старых глобальных переменных может приводить к неверным результатам следующей оптимизации. Таймаут должен быть больше, чем время одиночного прогона тестера. Например, 60 секунд обычно достаточно. С такой установкой автоматическое удаление переменных сработает в том случае, если между запусками библиотеки прошла как минимум 1 минута. В любом случае, Вы можете удалить переменные с префиксом WFL_ вручную.

Функцию wfl_OnTick следует вызывать из обработчика события OnTick.


Внимание! Имя файла советника не должно содержать пробелы или спецсимволы, так как оно используется при генерации папки с мета-данными и служебной глобальной переменной.

Также проверьте, что название рабочего символа не содержит спецсимволы (такие как, например, £ или ¥). В этом случае вам потребуется вручную убрать такой символ из названия папки, и затем ввести её отредактированное название во входной параметр CSVFolder скрипта (см. далее) для построения отчета. К сожалению, МТ имеет некоторые ограничения по работе с unicode.



Оптимизация

Прежде чем начать оптимизацию, выполните подготовительные действия. Выключите опцию Пропустить бесполезные результаты в контекстном меню Результатов оптимизации. Это делается единожды. Очистите папку Tester/caches. Это рекомендуется делать перед каждой новой оптимизацией с библиотекой. Установите флаг Использовать дату и заполните поля От / До на закладке настроек тестера. Все флаги с ограничениями на закладке Оптимизация диалога свойств эксперта должны быть сняты.

Запустите оптимизацию как обычно. Период оптимизации должен содержать минимум 200 баров, но рекомендуется иметь 1000 и более.

По завершении оптимизации откройте папку Tester/Files и убедитесь в наличии папки с именем вида:

<EA name>-<Symbol>-<Timeframe>-<Date>-<Time>

Папка должна содержать csv-файлы с мета-данными библиотеки. Количество файлов равно количеству выполненных прогонов тестера. Каждая запись в файле соответствует одному бару и содержит дату и время, баланс, плавающую прибыль, количество ордеров. Эта информация затем используется скриптом для вычисления прибылей и убытков на частных периодах внутри общего периода оптимизации. Информация об отдельных ордерах не собирается и не анализируется.

Скопируйте папку в MQL4/Files (версия для МетаТрейдер 5 делает это автоматически).

Сохраните результаты оптимизации используя стандартную команду контекстного меню МетаТрейдера Сохранить как отчет. Этот файл используется как справочник соответствия наборов параметров и номеров проходов тестера. Библиотека для МетаТрейдера 4 не хранит параметры.



Построение отчетов

Убедитесь, что папка с мета-данными (csv-файлами) находится в MQL4/Files (в случае МетаТрейдера 5, мета-данные сразу генерируются в MQL5/Files).

Запустите скрипт wfLBuilder.

Укажите название папки с мета-данными во входном параметре CSVFolder. Этот параметр можно оставить пустым, если оптимизация была выполнена только что, и соответствующее название указано в глобальной переменной WFL_FILE_.

Задайте критерий поиска оптимальных параметров с помощью входного параметра Estimator. Он может быть одним из следующих значений: 

wfo_profit - прибыль,
wfo_sharpe - коэффициент Шарпа,
wfo_pf - профит-фактор,
wfo_drawdown - величина, обратная просадке (100 - DD), рассчитанная по кривой баланса,
wfo_profit_by_drawdown - прибыль, деленная на просадку,
wfo_profit_trades_by_drawdown - прибыль, умноженная на количество сделок и деленная на просадку,
wfo_average - средняя прибыль на сделку

 

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

Walk-Forward Cluster Report with overall performance indicators

HTML-отчет содержит таблицы с обобщенными показателями walk-forward анализа - Annualized profit/loss (Годовая прибыль)Effeciency (Эффективность) и Consistency (Стабильность) - для всех комбинаций размеров окна с in-sample данными и размера шага с данными out-of-sample. Данные таблицы известны также как Кластерный отчет. Размеры окон in-sample данных варьируются от 10% до 50% от общего периода тестирования, с шагом 10%. Размеры forward-тестов с данными out-of-sample варьируются от 5% до 30% от размера окна, с шагом 5%. Например, если общий период содержит 1000 баров, то окно in-sample оптимизации будет меняться от 100 до 500 баров с шагом 100, а размер forward-теста - от 5 до 30 баров для окна 100, и от 25 до 150 баров для окна 500.

В обобщенных таблицах наиболее успешные конфигурации подсвечиваются различными градациями зеленого цвета.

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

Walk-Forward Detailed Report with cumulative performance


Таблица с детализацией содержит в каждой строке диапазоны дат in-sample и out-of-sample периодов вместе с соответствующими показателями торговли. Кроме того, показывается общая эффективность торговли на "склеенных" форвард-периодах - профит-фактор, прибыль, просадка.

Каждая строка в таблице - это отдельный прогон тестера, выполненный во время оптимизации. Номер прохода выводится в правой колонке. Пользователь может использовать заранее сохраненный отчет оптимизации, чтобы узнать параметры конкретного прохода (в версии для МетаТрейдера 5 параметры выводятся рядом с номером прохода). Пока закладка с Результатами оптимизации остается открытой в тестере, Вы можете выбрать конкретный набор параметров (по его номеру) с помощью двойного щелчка мыши.

Наилучший номер прохода (т.е. набор параметров) ищется скриптом для каждого окна in-sample следующим образом. Он вычисляет показатель, заданный с помощью входного параметра Estimator и сохраняет наибольший результат. Допустим, общий диапазон оптимизации 500 баров, размер окна - 100 баров, размер форвард-теста - 20 баров. Тогда скрипт рассчитает прибыли и убытки на первых 100 барах для каждого прохода тестера (он имеет соответствующий csv-файл и характеризуется набором параметров эксперта), найдет лучшие параметры и рассчитает прибыли и убытки на следующих 20 барах (для того же самого номера прохода). Таким образом сформируется 1-я строка таблицы детализации. Затем скрипт сместит окно на 20 баров вперед и рассчитает прибыли/убытки на диапазоне баров с 20 по 120, найдет лучший проход (набор параметров) для него и проверит прибыли/убытки на следующих 20 барах. Это даст 2-ую строку в таблице детализации. Этот процесс продолжится для всех возможных форвард-тестов.

Внимание! Построение отчета на основе нескольких тысяч csv-файлов может потребовать заметное время. Рекомендуемые таймфреймы - не ниже H1.


Показатели эффективности

Годовая прибыль (annualized profit/loss) - гипотетическая прибыль советника за год при пересчете заработанного пропорционально периодам оптимизации и тестирования.

Эффективность (efficiency) - соотношение годовой прибыли на тестовом периоде и периоде оптимизации одного и того же прогона.

Стабильность (consistency) - процент прибыльных проходов среди всех тестовых проходов "склеенного" форварда.



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