Метод walk-forward оптимизации пользуются популярностью у трейдеров благодаря своей эффективности в анализе и настройке EA. Некоторое время назад в Маркете стали доступны два продукта для проведения такой оптимизации в МетаТрейдере - библиотека WalkForwardOptimizer (WFO) и скрипт WalkForwardReporter. Они поддерживают несколько режимов работы и предоставляют гибкие настройки, но из-за этого могут показаться сложными для простых пользователей. Для решения этой проблемы имеются упрощенные версии библиотеки и скрипта. Это совершенно отличные продукты. Ниже представлено руководство пользователя для новых продуктов. Если Вы не знакомы с технологией walk-forward, ознакомьтесь с вводной информацией в руководстве пользователя WFO.
Введение
Библиотека WalkForwardLight (wfL) и скрипт WalkForwardbuilder (wfLbuilder) представляют собой набор инструментов для простого и быстрого исследования стабильности торговых роботов.
Когда библиотека встроена в эксперт, процесс оптимизации, выполняемый тестером, используется как средство перебора различных наборов параметров и связанных с ними торговых операций. Непосредственно оптимизация - как выбор набора лучших параметров из множества прогонов - выполняется самим скриптом для каждого "плавающего" окна дат, выделяемых последовательно из общего периода тестера. Критерий оптимизации указывается скрипту во входных параметрах.
Набор инструментов WalkForwardLight реализует walk-forward необычным способом. Он не воспроизводит стандартный цикл пошаговой оптимизации на in-sample данных и последующее тестирование на данных out-of-sample. Изменение процесса направлено на существенное уменьшение вычислительной нагрузки и упрощение настройки (подробности - далее). Если Вы считаете, что должны использовать walk-forward в точном соответствии с каноническим подходом, используйте продукты WalkForwardOptimizer и WalkForwardReporter. Они потребуют вдумчивого подбора настроек и длительного процесса оптимизации, включая несколько вспомогательных мета-параметров, добавляемых библиотекой WFO (это может существенно увеличить пространство поиска). Если это представляет для Вас сложности, используйте wfL. Она предоставляет основные возможности walk-forward анализа на раз-два-три. Несмотря на модификацию walk-forward тестирования, эта версия дает хорошую оценку устойчивости EA.
Цель walk-forward методологии не столько в поиске оптимальных параметров EA, сколько в определении подходящей глубины истории для оптимизации и периода, через который нужно проводить переоптимизацию советника. Еще одна задача walk-forward - убедиться в том, что прибыльность робота падает незначительно с течением времени или, иными словами, нет проблемы переобучения.
Процесс описывается следующими шагами:
3. Скопировать данные, собранные библиотекой из папки tester/Files в папку MQL4/Files и запустить скрипт построения отчета (это актуально только в МетаТрейдер 4, т.к. версия для МетаТрейдер 5 делает это автоматически).
Основное различие между упрощенным и классическим подходом walk-forward заключается в том, что упрощенный запускает встроенный тестер в режиме оптимизации (фактически, это просто перебор параметров) на полном периоде, а не шаг за шагом. При использовании генетического метода оптимизации это вносит некоторую предвзятость из-за того, что проверяемые наборы параметров являются оптимальными в глобальном смысле. Это можно расценивать как заглядывание в будущее. Однако, с другой стороны, наилучшие в глобальном смысле параметры, скорее всего, будут давать меньшие прибыли, чем параметры, которые могли бы быть найдены при локальной оптимизации на конкретном окне (меньшем временном отрезке).
Встраивание библиотеки в советник
Чтобы встроить библиотеку в советник используйте следующий заголовочный файл wfL.mqh, который должен находиться в папке MQL4/Includes:
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 для того, чтобы заработали импорты из экспертов. К сожалению, этот нюанс с папками связан с тем, как Маркет "раздает" библиотеки.
Добавьте следующий код в советник:
int OnInit()
{
// ... ваш код
wfl_OnInit(60);
}
void OnTick()
{
// ... ваш код
wfl_OnTick();
}
Функция wfl_OnInit должна вызываться из обработчика события OnInit. Параметр cleanUpTimeout задает количество секунд, по истечении которых библиотеке разрешено автоматически удалять специальные глобальные переменные с префиксом WFL_, созданные библиотекой во время предыдущей оптимизации. Наличие старых глобальных переменных может приводить к неверным результатам следующей оптимизации. Таймаут должен быть больше, чем время одиночного прогона тестера. Например, 60 секунд обычно достаточно. С такой установкой автоматическое удаление переменных сработает в том случае, если между запусками библиотеки прошла как минимум 1 минута. В любом случае, Вы можете удалить переменные с префиксом WFL_ вручную.
Внимание! Имя файла советника не должно содержать пробелы или спецсимволы, так как оно используется при генерации папки с мета-данными и служебной глобальной переменной.
Также проверьте, что название рабочего символа не содержит спецсимволы (такие как, например, £ или ¥). В этом случае вам потребуется вручную убрать такой символ из названия папки, и затем ввести её отредактированное название во входной параметр CSVFolder скрипта (см. далее) для построения отчета. К сожалению, МТ имеет некоторые ограничения по работе с unicode.
Оптимизация
Прежде чем начать оптимизацию, выполните подготовительные действия. Выключите опцию Пропустить бесполезные результаты в контекстном меню Результатов оптимизации. Это делается единожды. Очистите папку Tester/caches. Это рекомендуется делать перед каждой новой оптимизацией с библиотекой. Установите флаг Использовать дату и заполните поля От / До на закладке настроек тестера. Все флаги с ограничениями на закладке Оптимизация диалога свойств эксперта должны быть сняты.
По завершении оптимизации откройте папку Tester/Files и убедитесь в наличии папки с именем вида:
Папка должна содержать csv-файлы с мета-данными библиотеки. Количество файлов равно количеству выполненных прогонов тестера. Каждая запись в файле соответствует одному бару и содержит дату и время, баланс, плавающую прибыль, количество ордеров. Эта информация затем используется скриптом для вычисления прибылей и убытков на частных периодах внутри общего периода оптимизации. Информация об отдельных ордерах не собирается и не анализируется.
Сохраните результаты оптимизации используя стандартную команду контекстного меню МетаТрейдера Сохранить как отчет. Этот файл используется как справочник соответствия наборов параметров и номеров проходов тестера. Библиотека для МетаТрейдера 4 не хранит параметры.
Построение отчетов
Убедитесь, что папка с мета-данными (csv-файлами) находится в MQL4/Files (в случае МетаТрейдера 5, мета-данные сразу генерируются в MQL5/Files).
Укажите название папки с мета-данными во входном параметре CSVFolder. Этот параметр можно оставить пустым, если оптимизация была выполнена только что, и соответствующее название указано в глобальной переменной WFL_FILE_.
В результате будет сгенерирован HTML-отчет с тем же именем, что и папка с мета-данными.
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.
Под обобщенными таблицами идут подробные таблицы торговых показателей для каждой комбинации размеров окна и форвард-теста. Каждая ячейка в обобщенной таблице - это ссылка, по нажатию на которую можно быстро перейти на соответствующий детальный отчет.
Таблица с детализацией содержит в каждой строке диапазоны дат in-sample и out-of-sample периодов вместе с соответствующими показателями торговли. Кроме того, показывается общая эффективность торговли на "склеенных" форвард-периодах - профит-фактор, прибыль, просадка.
Наилучший номер прохода (т.е. набор параметров) ищется скриптом для каждого окна in-sample следующим образом. Он вычисляет показатель, заданный с помощью входного параметра Estimator и сохраняет наибольший результат. Допустим, общий диапазон оптимизации 500 баров, размер окна - 100 баров, размер форвард-теста - 20 баров. Тогда скрипт рассчитает прибыли и убытки на первых 100 барах для каждого прохода тестера (он имеет соответствующий csv-файл и характеризуется набором параметров эксперта), найдет лучшие параметры и рассчитает прибыли и убытки на следующих 20 барах (для того же самого номера прохода). Таким образом сформируется 1-я строка таблицы детализации. Затем скрипт сместит окно на 20 баров вперед и рассчитает прибыли/убытки на диапазоне баров с 20 по 120, найдет лучший проход (набор параметров) для него и проверит прибыли/убытки на следующих 20 барах. Это даст 2-ую строку в таблице детализации. Этот процесс продолжится для всех возможных форвард-тестов.
Показатели эффективности
Годовая прибыль (annualized profit/loss) - гипотетическая прибыль советника за год при пересчете заработанного пропорционально периодам оптимизации и тестирования.
Стабильность (consistency) - процент прибыльных проходов среди всех тестовых проходов "склеенного" форварда.