bascomo
bascomo личный блог
07 августа 2023, 16:28

Overfitting в алготрейдинге

Когда я только начинал писать код, самостоятельно совершающий сделки на рынке, я столкнулся с тем, что стратегии со временем переставали работать. Впрочем, куда чаще было то, что разработанные и оптимизированные стратегии показывали доход только на данных для обучения. И это нормально.

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

И «вечные» алгоритмы были-таки найдены. Только вот доходность по ним оказалась меньше, чем по депозитам, да и просадки не радовали глаз. Зато они стабильно, год от года зарабатывали свои жалкие 5-7% годовых.

Я вижу в этом две крайности: подгонка на максималках сделает так, что на новых, незнакомых данных алгоритм будет сливать. А тем, кто чрезмерно увлекается WFO, много не заработать. Зато тут не нужно плавить мозг. Прогнал алгоритм через годы рынка — получил то, что, скорее всего, будет работать, по крайней мере, до очередного 24 февраля или его аналогов.

Говорить про переобучение в отрыве от контекста и критериев оценки бессмысленно. Да, есть общее правило, что на тестовом периоде алгоритм не должен сливать. Но только очень общо оно сформулировано. Нужно всегда конкретизировать критерии длительности периодов обучения / оценки, чтобы разговор имел смысл. Как я писал ранее, я давно сделал выводы, что чем длиннее периоды обучения и тестирования, тем ниже доходность.

Как я поставил себе задачу?
Во-первых, я отказался от поиска «вечных» алгоритмов.
Во-вторых, поскольку ценовой ряд — это, в сущности, довольно примитивный и скудный набор данных, то представляется довольно очевидным, что рыночные ситуации с большим приближением, тут или там, рано или поздно повторяются. Если не на инструменте А, то на инструменте Б. Если не на TF M10, то на TF M5. Тут же родилась идея, что алгоритмы для торговли на А можно искать и на Б, только потом проверить на А. Особенно, если данных мало — классическая ситуация с лимитированными фьючерсными контрактами. Задача, которую следовало для этого решить — не привязываться к абсолютным значениям вроде цены, волатильности и, если угодно, объёмов. И это было реализовано. Среди «идей на полке» оказалась идея про максимальное нормирование ценового ряда — условно свести его по всем инструментам к заданному интервалу — от 0 до 1, например. Но вообще это нужно человеку, человеческому мозгу и привычному для нас образу мышления, чтобы нам было проще сравнивать. Алгоритмам, в сущности, на это плевать.
В-третьих, уже несколько лет назад я ввёл для себя понятие «жизненный цикл закономерности на рынке». Это срок, в течение которого тот или иной алгоритм будет успешным. Мне было важно понять, как долго они живут, чтобы исходя из срока их жизни и определить длину периодов, на которых я ищу и затем проверяю эффективность алгоритма. Ранее я писал о том, что чем короче эти периоды, тем эффективнее с точки зрения доходности алгоритм. Но тем и больше рисков, касающихся стабильности его работы. Как и в прочих задачах, тут следовало найти золотую середину.

Я часто слышал, как люди, не вникая в вопрос, говорили что-то про переобучение, степени свободы и много других умных и красивых слов. По факту, большинство из них плавает в этих понятиях — представление о том, что это — они, может, и имеют. Но вот с прикладным использованием у них большие проблемы и практически полное отсутствие опыта. Я не теоретик, я практик. Мне никогда особо не было интересно рассуждать на философские темы из серии «что, если». Меня всегда куда больше увлекало строить реальные, работающие решения. И, говоря откровенно, мне не нравятся люди, которые много говорят, но у которых слова остаются словами. Я считаю, что у нас есть некий фиксированный запас энергии, и если мы её выплеснем всю на «базар-вокзал», то на какой-то реальный продукт сил уже не остаётся. Когда я не пишу посты, я эффективно пишу код.

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

Это сложный подход, и, как оказалось, мало кто может критически на него взглянуть. Но куда меньше тех, кто сможет его правильно реализовать и протестировать, как он будет работать. При том, что сложность его состоит не в высшей математике, тут, скорее, арифметика 4-го класса. С другой стороны, на поверку он куда доходнее, чем классические подходы, поскольку он не требует, чтобы найденный алгоритм одинаково эффективно работал на всей дистанции. Более того, даже когда я такие алгоритмы находил, их ключевая особенность состояла в том, что они совершали очень мало сделок. А потому и демонстрировали невысокую доходность. Кажется, что тут важнее стабильность, но если посмотреть на список сделок внимательно и сравнить его с быстрыми алгоритмами, которые заработали столько же или куда больше, но не за годы, а за недели или месяцы, то увидим примерно одни и те же относительные показатели. Так что получается, что мы просто за счёт дополнительных фильтров размажем сделки во времени, потеряв в прибыли и не получив даже стабильности — она в данном случае иллюзорна. А тогда какой смысл заниматься этим упражнением?

Завершая, подытожу. Не все корректно понимают, что такое переобучение. Обращать внимание нужно на тот срок, который модель должна работать после обучения. Если принять его за бесконечность, то любое обучение будет переобучением. У всего в этой вселенной есть своё время жизни и свой срок существования, и цель спекулянта состоит, по моему мнению, не в том, чтобы его стратегия жила как можно дольше, но чтобы её жизнь была как можно эффективнее, в данном случае — с точки зрения дохода. В противном же случае ваш алгоритм будет выглядеть как Дэвид Рокфеллер, которому пересаживали сердце 6 раз. Картинка, как по мне, прямо таки скажем, унылая.
49 Комментариев
  • realuse algo
    07 августа 2023, 16:39

    Грааля нет?

  • Андрей &
    07 августа 2023, 17:06
    Покуда самостоятельно не торгуешь стабильно в плюс, то о каких алгоритмах можно вообще вести разговор? Лично моё мнение если подходить к алгометрической торговле, то лучше отказаться от привычных схем и патернов. Нужно мыслить несколько в другом не стандартном русле. К примеру взять в расчёт инерционность. Рынок, как и физическое тело, при разгоне и последующем торможении, имеет некий инерционный запас. К примеру, алгоритм считает сколько прошла цена от нового минимума, для различных инструментов цифра будет разной. Сейчас не существует проблем, на истории, измерить ход цены в процентах после которого рынок будет некоторое время продолжать движение. Скажем прошла цена 2% от нового сформированного мин/макс, открываем сделку по направлению цены т.к. знаем, что рынок после такого движения, гарантировано даст +. Далее другой алгоритм уже тянет сделку до выполнения других условий закрытия. Данный подход очень хорошо подходит для роботов, но весьма муторен в ручной торговле. Подобный метод куда более эффективен нежели алгоритм, который будет искать некие патерны и закономерности, рисуя в своих микросхемах виртуальные фигуры. Существуют и другие нестандартные торговые подходы в корне отличающиеся от всем привычных систем. Иногда возникает мысль, заняться роботизацией, но по мне привычней торговать руками т.к. в наборе имеется куда более шикарный набор торговых техник, которые весьма сложно объяснить железному истукану чего от него требуется. Куда проще иметь робота который тянет сделку до финала. Да и торговать руками это ни с чем не сравнимое удовольствие. 

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн