Честный бэктест: подгонка, заглядывание и выживший
У вас есть кривая капитала, идущая вверх и вправо. Шарп выше 2, максимальная просадка, с которой можно жить, несколько сотен сделок. На настройку ушли выходные, и результат ощущается заслуженным.
Вероятнее всего он ничего не стоит, и по механическим причинам, а не из-за нехватки мастерства. Бэктест не тестирует стратегию. Он измеряет, насколько хорошо правило описывает набор данных, который вы уже видели. Это разные утверждения, и второе не поддерживает никаких выводов о деньгах. Если у вас есть стратегия, которой вы гордитесь, читайте дальше, держа её в уме.
Переоптимизация - это не небрежность, это задача про счёт
Стандартная формулировка гласит, что переоптимизация случается, когда вы добавляете слишком много параметров. Это часть правды. Большая часть - в том, сколько раз вы посмотрели.
Каждый прогон против того же набора данных - это попытка. Изменили период и перезапустили: попытка. Добавили фильтр и перезапустили: попытка. Взяли другой актив, потому что первый разочаровал: попытка. После 200 попыток на одной и той же истории лучший на вид результат - ровно то, чего следует ожидать от одного лишь шума, независимо от наличия преимущества.
При пороге значимости 5 % 200 независимых попыток дают примерно 10 ложно значимых результатов по случайности. Затем вы выбираете лучший, а это в точности та процедура отбора, которая гарантирует выбор ложноположительного.
Число попыток почти никогда не появляется в чужих отчётах, а должно быть первым сообщаемым числом. Записывайте каждую протестированную конфигурацию, включая брошенные, и относитесь к итоговому результату как к одной выборке из всего этого перебора.
И счёт больше, чем ваши собственные эксперименты. Если вы тестируете пересечение скользящих средних на S&P, вы не первый. Тысячи людей проверяли варианты этой идеи на той же истории, а те, что провалились, никогда не публиковались. Вы унаследовали перебор, который сами не запускали.
Заглядывание вперёд прячется в обычном коде
Заглядывание вперёд - это использование в момент t информации, которая в момент t была недоступна. Формулируется легко и нарушается постоянно.
Использование цены закрытия и как сигнала, и как цены исполнения. Ваше правило срабатывает на сегодняшнем закрытии, и исполняетесь вы по сегодняшнему закрытию. В живой торговле вы не можете знать закрытие, пока оно не произошло. На ликвидных дневных барах разрыв мал, а на чём-то внутридневном или тонком он огромен.
Пересмотренные данные. Экономические показатели ревизуют. База, показывающая финальное пересмотренное значение на исходную дату, позволяет вашему правилу использовать число, которого неделями не существовало.
Индикаторы, посчитанные по всему ряду. Любая нормализация, ранжирование или z-оценка, посчитанная поперёк всей истории, впрыскивает будущую информацию в каждый ранний бар.
Симптом - подозрительно гладкая кривая капитала с высоким винрейтом и мелкими просадками. Такая форма обычно означает, что системе выдают ответы, а не что она делает предсказания.
Ошибка выжившего - свойство ваших данных, а не кода
Если ваша вселенная активов - это сегодняшний список, вы уже исключили всё, что умерло. Делистингованные акции, провалившиеся токены, рухнувшие биржи, пары, переставшие торговаться. Каждый из них в своё время входил в инвестируемую вселенную и отсутствует в вашем тесте.
В крипте это особенно тяжело. Множество токенов с полной многолетней ценовой историей - это сильно отобранная выборка, а именно те, кто выжил. Стратегия, протестированная только на выживших, выглядит устойчивой, потому что банкротство из выборки удалено.
Издержки не являются погрешностью округления
Трение добавляют в последнюю очередь, если добавляют вообще, а меняет оно выводы сильнее любого параметра. Учитывайте спред, который вы реально платите, а не котируемую середину, проскальзывание, растущее с волатильностью и размером, и комиссии, фандинг или своп на удерживаемых позициях.
Система, выживающая при нулевых издержках и умирающая при реалистичных, системой никогда не была. Она была описанием средней цены. Удвойте предполагаемое трение и посмотрите, что останется. Если преимущество исчезло, оно было внутри спреда.
Как выглядит честная проверка
Разделите данные до начала работы и не трогайте отложенную часть. Разрабатывайте на одном отрезке, затем прогоните один раз на данных, которых вы никогда не рассматривали. Один раз. Если вы вернётесь и подкрутите после того, как увидели этот результат, отложенная часть загрязнена и её у вас больше нет.
Предпочитайте форвардный прогон. Подгоняете на окне, торгуете следующее окно, катитесь дальше. Это приближает то, как вы реально действовали бы, и вскрывает стратегии, работавшие только в одном режиме.
Сообщайте число попыток, трение и чувствительность к параметрам. Результат, переживающий изменение каждого параметра на 10 %, стоит больше, чем результат получше, который этого не переживает.
А потом всё равно ждите, что живой результат будет хуже. Некоторая деградация нормальна даже при чистой методологии, потому что рынки меняются и потому что собственный отбор полностью не устранить.
Поэтому форвардные записи важнее бэктестов. Indikora хеширует каждый опубликованный сигнал по SHA-256 и связывает его с предыдущим, так что публичный трек-рекорд нельзя отредактировать или задним числом передатировать, и она публикует калибровку вероятностей: когда сказано 60 %, вы можете проверить, как часто это оказывалось верным. Ни то ни другое невозможно с бэктестом, который по определению пишется постфактум.
Стратегия, которую вы настраивали все выходные, может оказаться и нормальной. Но вы этого пока не знаете, и честная позиция - сказать это вслух прежде, чем выделять под неё размер.
Бэктест измеряет, насколько хорошо правило описывает прошлое, и только результат вне выборки, на данных, которых вы не касались, что-то говорит о будущем.
Проверьте себя
Запишите число конфигураций, которые вы протестировали, прежде чем остановиться на текущих правилах, а также принятое трение, и держите эту запись привязанной к стратегии, чтобы будущие результаты оценивались относительно неё.
Дневник сделокВ Indikora есть бесплатный симулятор, повтор баров и поведенческий коуч, который читает ваши собственные сделки.
Открыть приложение