WeCore
Алгоритмическая торговля

Переоптимизация торговых стратегий: как её распознать

Переоптимизация и подгонка под историю: слишком много параметров, data snooping, in-sample и out-of-sample, walk-forward, проверки на устойчивость и тревожные признаки.

WeCore·Опубликовано ·4 мин чтения

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

Что такое переоптимизация

Переоптимизация (в трейдинге её часто называют подгонкой под историю, curve fitting) - это ситуация, когда стратегия выучивает шум в исторических данных вместо повторяющейся закономерности. Итог: отличные результаты на данных, на которых она построена, и слабые - на новых.

В ценовых данных немного «сигнала» и очень много случайного шума. В каждом историческом периоде есть разовые события: день с неожиданным заявлением центробанка, неделя необычной волатильности, особенно длинный тренд. Стратегия, настроенная ровно на эти события, задним числом выглядит идеально, но такие события не повторятся точно так же.

Слишком много параметров

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

Гипотетический пример: стратегия со скользящей средней на 37 баров, стопом 23 тика, входами только с 09:47 до 11:12 и только когда RSI ниже 41. Каждое из этих чисел выбрано потому, что давало лучший исторический результат. Ключевой вопрос: почему 37, а не 35 или 40? Если разумного ответа, кроме «так лучше всего работало», нет - это тревожный знак.

Правило: чем меньше параметров и чем больше сделок в тесте, тем надёжнее результат.

Data snooping

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

Причём это происходит и непреднамеренно: вы проверяете идею, она не работает, вы немного что-то меняете, тестируете снова и так далее. После пятидесяти итераций данные уже «просочились» в стратегию, даже если вы ни разу не запускали автоматическую оптимизацию. Записывайте, сколько вариаций вы проверили. Это число почти так же важно, как сам результат.

In-sample и out-of-sample

Базовый инструмент против переоптимизации - разделение данных:

  • In-sample: данные, на которых вы разрабатываете и настраиваете стратегию.
  • Out-of-sample: данные, которые вы отложили и вообще не трогали во время разработки.

Только когда стратегия «заморожена», вы прогоняете её на out-of-sample. Если результаты обваливаются, вероятна переоптимизация. Важно: если после этого вы возвращаетесь, меняете стратегию и снова тестируете на тех же данных, они уже не являются настоящим out-of-sample.

Walk-forward тестирование

Walk-forward развивает эту идею. Историю делят на последовательные окна. На каждом шаге вы настраиваете стратегию на одном окне и тестируете на следующем, затем сдвигаете оба окна вперёд и повторяете.

  1. Настройка на первом году, тест на следующем квартале.
  2. Сдвиг вперёд: настройка на новом периоде, тест на квартале после него.
  3. Склейка всех тестовых периодов в одну кривую.

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

Проверки на устойчивость

Помимо разделения данных, есть несколько простых проверок, доступных любому трейдеру:

  • Окрестность параметров: немного сдвиньте каждый параметр вверх и вниз. Устойчивая стратегия показывает похожие результаты в широком диапазоне. Если работает только одно значение, а «соседи» убыточны, вы нашли случайный пик.
  • Смежные рынки: если стратегия работает на NQ, как она ведёт себя на ES? Совпадать не обязано, но полный провал вызывает вопросы.
  • Другие таймфреймы: небольшое изменение таймфрейма не должно превращать прибыльную стратегию в убыточную.
  • Другие периоды: проверьте каждый год отдельно. Не приходится ли вся прибыль на один короткий отрезок?
  • Жёстче издержки: добавьте проскальзывания и повысьте комиссии. Реальное преимущество должно это пережить. Подробнее - в статье бэктест и реальная торговля.
  • Уберите лучшие сделки: исключите пять самых прибыльных сделок. Если вся прибыль исчезла, стратегия держится на удаче.

Признаки переоптимизированной стратегии

  • Почти идеально гладкая кривая доходности без трудных периодов.
  • Много параметров со странно точными значениями.
  • Мало сделок относительно числа параметров.
  • Хорошие результаты только в очень узком диапазоне настроек.
  • Результаты сильно меняются каждый раз, когда вы добавляете немного истории.
  • Особые правила, добавленные, чтобы «исправить» конкретные прошлые убытки.
  • Большой разрыв между in-sample и out-of-sample.

Главное

  • Переоптимизация - это выучивание шума вместо закономерности; отлично она выглядит только задним числом.
  • Меньше параметров и больше сделок - базовая защита.
  • Держите out-of-sample данные нетронутыми, пока стратегия не заморожена.
  • Walk-forward и проверка окрестности параметров выявляют случайные пики.
  • Даже стратегии, прошедшей все проверки, нужен форвард-тест и аккуратный расчёт размера позиции.

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

Источники и дополнительное чтение