Термин «робастность» означает способность торговой стратегии повторять результаты своего тестирования в прошлом на новых данных.
И было бы здорово измерять эту способность в цифрах. В этом тексте я познакомлю Вас с одной из метрик робастности стратегии, которая есть у нас в OsEngine — «Walk-Forward Robustness Metric».
Вспоминаем о сути робастности
Вы оттестировали какую-то стратегию в тестере и видите результат в красном квадрате. Супер! Вы включили стратегию в торги, и в реальном времени за следующие два месяца стратегия вам дала примерно такой же результат по прибыльности, как и в тестере:
Рис. 1. Стратегия с высокой робастностью. Повторяет результаты тестов в реальной торговле
Пример 2.
Вы оттестировали какую-то стратегию в тестере и видите результат в красном квадрате. Вы включили стратегию в торги, и в реальном времени за следующие два месяца (зелёный квадрат) стратегия вам дала убытки:
Рис. 2. Стратегия с низкой робастностью. Не повторяет результаты тестов в реальной торговле
Где смотреть робастность в цифрах??
В рамках Walk-Forward оптимизатора OsEngine есть его метрика:
Рис. 3. Окно результатов оптимизации WF Оптимизатора в OsEngine
Рассчитывается от 0 до 100 %. Чем ближе к 100, тем робастнее стратегия.
Лучший результат в таком случае выглядит так:
Рис. 4. Максимально хороший результат это 100 %
При этом я вовсе не случайно оставил столбцовую диаграмму в кадре. Она отражает успешность выбранного робота из InSample во множестве OutOfSample результатов. Именно от того, что там за столбики, зависит WFRM. Но… Обо всём по порядку.
Этапы WF оптимизации
Обычно, во время формирования этапов для тестирования при Walk-Forward, используется подобного рода визуализация:
Рис. 5. Визуальное и табличное представление этапов WF оптимизации
В данном конкретном случае история разбита на 14 пар InSample / OutOfSample.
Последний InSample без пары, т.к. предполагается, что его OutOfSample будет уже в реале.
Пары InSample – OutOfSample
В каждом из этих периодов тестируются роботы с одними и теми же параметрами! Во всех 29 этапах ОДНИ И ТЕ ЖЕ РОБОТЫ. Это справедливо, если не включены фильтры, и процесс оптимизации ведётся Brut-Force (Т.е. полным обходом всех параметров)
Рис. 6. InSample – OutOfSamle. Всего лишь две таблицы результатов
В каждой паре получается по 40 результатов.
Сортируем обе таблицы по какому-то параметру
В данном случае параметр для сортировки — это П/У %
Рис. 7. Таблицы результатов оптимизации отсортированные по П/У %
Лучшим роботом в InSample периоде является робот с номером 9. Его, как мы предполагаем, мы бы включили в торги.
Смотрим под каким номером он пришёл в OutOfSample периоде:
Рис. 8. Смотрим «Лучшую лошадку» из InSample в «забеге» OutOfSample
На основании результата добавляем его в соответствующий столбец диаграммы распределения:
Рис. 9. Переносим результат в какую-то категорию по успешности
В данном случае вот сюда:
Рис. 10. Наша «лошадка» пришла в предпоследней категории успешности. Между 60 и 80 % других
И таким образом заполняем данную диаграмму. 14 пар InSample / OutOfSample. 14 добавленных единиц в различные столбцы.
Расчёт WFRM
Рис. 11. Формула расчёта WFRM
Засчитываем из разных столбцов вес 1 результата пары с разным коэффициентом.
И получаем в итоге WFRM:
Рис. 12. Итоговый WFRM
Зачем это может быть нужно?
Очевидно это один из важнейших показателей во время WalkForward оптимизации. И нужно включать роботов в торговлю с наиболее большим коэффициентом. WFRM должен обязательно участвовать в фильтрации различных алгоритмов.
Осуществлять выборку лучшего робота для применения в OutOfSample можно совершенно по разному:
Рис. 13. Варианты выбора лучшего робота из InSample в OsEngine
В OsEngineэто параметры:
1) Total Profit
2) Max Drow Dawn
3) Average Profit
4) Average Profit Percent
5) Profit Factor
6) Pay Off Ratio
7) Recovery
8) Sharp Ratio
И разные типы выбора лучшего робота дают разную WFRM.
Соответственно, чтобы выбирать более робастные настройки для торговли, нужно провести соответствующую серию тестов, которую мы сделаем вместе.
Если читаешь не из 2023 года. С.М. Исследования: «Влияние параметра выбора лучшего робота из InSampleв в WF оптимизации на робастность» Дальше по блогу. smart-lab.ru/blog/862087.php
Продолжение следует...
Видео-версия:
P.S.
Напоминаю, что для того, чтобы писать комментарии у меня под постами, нужно добавиться ко мне в друзья. Давайте учиться жить дружно.
P.S.2.
Хотите в алготрейдинг? Читайте мой блог. Сэкономите себе кучу времени. Вот его оглавление: smart-lab.ru/blog/853677.php
P.S.3.
Наш чатик для алготрейдеров: https://t.me/o_s_a_chat
Наш бесплатный терминал для алготрейдеров: https://github.com/AlexWan/OsEngine
Считать робастность только по прибыльности — «путь в никуда».
Во первых, надо учитывать, что значение прибыли вообще случайная величина и то, что мы видим на тесте — это лишь ее выборочное среднее за период.
Во-вторых, робастность торгового алгоритма должна быть для показателя «доходность-риск», а не просто доходность.
В-третьих, максимизация любого показателя в тесте — это путь в переподгонку и ждать от такого теста робастности — бессмысленно.
Абсолютно верно. Считать робастность по прибыльности — путь в никуда. Но во введении главы это обобщение и упрощение казалось уместным, ибо даёт понять в общих чертах о чём пойдёт речь ниже.
И в данном случае робастность считается по итоговому распределению выбранных лучших роботов из InSample в OutOfSample результатах. Что показывает способность стратегии подстраиваться под изменяющийся рынок. И помогает убрать из торгов как раз таки стратегии склонные к «переподгонке».
Остальное про математику управления капиталом. Не тема данного поста. Чуть позже про это будет в блоге.