Walk Forwards – один из способов избежать переобучения алгоритма, путём проверки его способности адаптироваться к новым периодам данных.
Визуализация Walk-Forward тестирования.
В процессе «Walk-Forward» оптимизации:
- Делим историю на этапы оптимизации.
- Оптимизируем стратегию на In Sample периоде, выбирая лучшие параметры на этом участке.
- Проводим контрольные тесты на Out Of Sample периоде. Смотрим, как лучшие параметры робота из прошлого In Sample ведут себя на ранее неизвестных данных.
- Анализируем результаты Out Of Sample.
Чем больше прибыльных Out of Sample периодов, тем робастнее стратегия.
Настройка этапов оптимизации в OsEngine.
Рекомендации по настройке этапов Walk-Forwards.
- Период In Sample – от 700 до 1000 дней.
- Период Out Of Sample – от 90 до 180 дней.
Мы пользуемся именно Walk-Forward тестированием для своего трендового портфеля роботов.
Одна из возможных схем оптимизации:
- Провести оптимизацию в начале квартала (полугодия).
- Включить роботов в торговлю и не трогать их 3 (6) месяца.
- Провести оптимизацию в начале следующего периода (квартала или полугодия).
И т.д.
Запускаем OsEngine.
Из главного меню запускаем «Оптимизатор»:
Открывается окно Оптимизатора, в котором нам предстоит работать:
Нажимаем на кнопку «Data Server Settings» и попадаем в окно сервера данных:
- Выбираем тип источника. В данном случае это сет данных, который был ранее скачен через OsData.
- Выбираем тип трансляции. В данном случае это свечи.
- Выбираем сет данных.
- Настраиваем время трансляции данных.
Выбираем робота для оптимизации.
В главном окне оптимизатора жмём на кнопку Select:
Выбираем торгового робота, которого хотим оптимизировать:
Выбираем бумагу, на которой будет происходить оптимизация.
Выставляем комиссии для сделок.
1. Выбираем тип комиссии.
- None – выключено.
- OneLotFix – на один контракт.
- Percent – в процентах от суммы сделки.
2. Устанавливаем значение комиссии.
Настраиваем в роботе «Сопровождение позиций».
Ссылка на объяснение настроек в окне.
Настраиваем оптимизируемые параметры.
- Колонка, включающая и отключающая параметры для оптимизации.
- Название параметра.
- Тип оптимизируемого параметра.
- Значение по умолчанию. Используется, если параметр не включен в список оптимизируемых.
- Стартовое значение для оптимизации.
- Шаг приращения значения.
- Итоговое значение параметра.
- Количество проходов оптимизатора для обхода всех возможных значений параметров.
- Кнопка сброса значений параметров к начальному, как записано в исходном коде робота.
Настраиваем схему оптимизации для Walk Forwards.
- Время трансляции данных.
- Если включено, последний этап будет InSample. Тот, из которого можно брать настройки для реала. Если выключено, последний этап будет OutOfSample.
- Количество пар InSample – OutOfSample.
- Время на OutOfSample относительно InSample периодов.
- Кнопка создать схему. Нажимаем после предварительных настроек.
- Таблица с периодами оптимизации.
- Визуальное представление периодов оптимизации.
Настраиваем фильтры для результатов.
- Показывать проход в итоговой выборке, только если итоговый профит на депозит в процентах больше заданной цифры.
- Показывать проход в итоговой выборке, только если итоговая максимальная просадка не превысила указанную цифру.
- Показывать проход в итоговой выборке, только если средний профит на одну сделку выше указанной цифры.
- Показывать проход в итоговой выборке, только если профит фактор выше указанной цифры.
- Показывать проход в итоговой выборке, только если количество сделок больше указанной цифры.
ВАЖНО!!! Для Walk-Forwards лучше здесь ничего не включать!!!
Запускаем оптимизатор.
- Количество потоков, которое будет задействовано во время работы.
- Кнопка запустить.
После чего Вы увидите процесс оптимизации:
ВАЖНО!!! НЕ надо ставить потоков больше, чем есть у Вас на ПК. Если данных много и робот сложный, это может закончиться крашем. ПК может зависнуть и начнутся ошибки.
12. Просмотр результатов. Series and Results.
Здесь мы видим все варианты робота, запущенного с разными параметрами на одном временном участке.
- Выбор участка оптимизации для отображения.
- Номер запуска робота.
- Параметры робота. Если навести на этом поле указатель мыши, то Вы увидите список параметров у робота.
- Количество позиций. ЛКМ – сортировка по столбцу.
- Итоговый профит абсолютный. ЛКМ – сортировка по столбцу.
- Максимальная просадка. ЛКМ – сортировка по столбцу.
- Средний профит на 1 контракт в абсолюте. ЛКМ – сортировка по столбцу.
- Средний профит на 1 контракт в процентах. ЛКМ – сортировка по столбцу.
- Профит фактор. ЛКМ – сортировка по столбцу.
- Pay Off Ratio. ЛКМ – сортировка по столбцу.
- Recovery. ЛКМ – сортировка по столбцу.
- Sharp Ratio. ЛКМ – сортировка по столбцу.
- Chart – открыть Чарт данного робота, с текущими параметрами. ВНИМАНИЕ. Чтобы это произошло, нужно будет подождать, ибо для открытия чарта нужно провести операцию тестирования.
- Params – открыть окно настроек параметров робота.
Просмотррезультатов. Out of sample statistic.
- Способ выбора лучших параметров в Out Of Sample периоде. Меняя эту настройку, робот пересчитывает все графики ниже, исходя из нового лучшего.
- Какой результат из In Sample мы будем брать для сверки его результатов в Out Of Sample. 0 — первый. 1 — в одном проценте от первого. 5 — в пяти процентах от первого. И т.д.
- Показатель робастности (Robustness metric) – показывает устойчивость нашей стратегии к новым данным. Чем больше, тем лучше. Про это будет отдельная статья.
- Профит общий и отдельный по разным Out Of Sample Периодам.
- Профит фактор по периодам Out of Sample.
- Профит на 1 контракт по периодам Out of Sample.
Просмотр результатов. Как выглядит ХОРОШИЙ отчёт.
Это одна из стратегий, которые торгует наша команда:
Удачных алгоритмов!
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php