Блог им. AleksandrBaryshnikov

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

    • 07 августа 2023, 16:28
    • |
    • bascomo
  • Еще
Когда я только начинал писать код, самостоятельно совершающий сделки на рынке, я столкнулся с тем, что стратегии со временем переставали работать. Впрочем, куда чаще было то, что разработанные и оптимизированные стратегии показывали доход только на данных для обучения. И это нормально.

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

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

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

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

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

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

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

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

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

Грааля нет?

avatar
realuse algo, если довольствоваться 7% годовых — то есть :)
avatar
bascomo, это с плечами?
avatar
BeyG, это на акциях без плечей у меня было
avatar
bascomo, так включите третье плечо и уже 21% — маловато конечно, но уже можно жить
avatar
BeyG, я уже года два как отказался от этого подхода и возвращаться к нему не планирую, что с плечами, что без :) есть куда более перспективное направление, о чём и был пост
avatar
Покуда самостоятельно не торгуешь стабильно в плюс, то о каких алгоритмах можно вообще вести разговор? Лично моё мнение если подходить к алгометрической торговле, то лучше отказаться от привычных схем и патернов. Нужно мыслить несколько в другом не стандартном русле. К примеру взять в расчёт инерционность. Рынок, как и физическое тело, при разгоне и последующем торможении, имеет некий инерционный запас. К примеру, алгоритм считает сколько прошла цена от нового минимума, для различных инструментов цифра будет разной. Сейчас не существует проблем, на истории, измерить ход цены в процентах после которого рынок будет некоторое время продолжать движение. Скажем прошла цена 2% от нового сформированного мин/макс, открываем сделку по направлению цены т.к. знаем, что рынок после такого движения, гарантировано даст +. Далее другой алгоритм уже тянет сделку до выполнения других условий закрытия. Данный подход очень хорошо подходит для роботов, но весьма муторен в ручной торговле. Подобный метод куда более эффективен нежели алгоритм, который будет искать некие патерны и закономерности, рисуя в своих микросхемах виртуальные фигуры. Существуют и другие нестандартные торговые подходы в корне отличающиеся от всем привычных систем. Иногда возникает мысль, заняться роботизацией, но по мне привычней торговать руками т.к. в наборе имеется куда более шикарный набор торговых техник, которые весьма сложно объяснить железному истукану чего от него требуется. Куда проще иметь робота который тянет сделку до финала. Да и торговать руками это ни с чем не сравнимое удовольствие. 
avatar
Андрей &, не приходила в голову идея, что код может найти более успешную стратегию сам, без помощи человека и лучше, чем человек? Я вот так сделал и вполне себе успешно. Идея про инерционность — она не нова и тоже придумана человеком. Я тут доверюсь алгоритмам, которые сами найдут закономерность, постоят стратегию. Просто в силу того, что им перелопатить кучу данных ничего не стоит, а мне всё это глазами смотреть, а потом всё равно писать код, чтобы протестировать. Для торговли руками нужно иметь железную дисциплину и простую стратегию. В сложной стратегии и на мелких таймфреймах — это заведомо провальное мероприятие. А для удовольствия ничего не мешает торговать на отдельном брокерском счёте. Я думаю, это две параллельные вселенные — классические трейдеры и алгоритмические. И смею утверждать, что успешный алготрейдер не обязательно должен успешно торговать руками.
avatar
bascomo, в таком случае речь идёт про ИИ Да и то по вашим словам покуда ваша доходность 7% годовых. По моему этот тип торговли весьма приближен к нулю.
avatar
Андрей &, я писал, что это те алгоритмы и подход в целом, от которых я отказался.
avatar
Андрей &, насчёт гарантированности плюса после отхода на 2% от локального минимума.
Возникает ряд вопросов, влияющих на результат. А сколько он этот плюс в %? Где стоп стоит при этом? Какой инструмент? И именно 2 ли %?
Я вот это исследовал в десятые годы. И в общем случае этот эффект 'продолжения движения' — мизерный. В лучшем случае полкомиссии. Соответственно, итог торговли — минус полкомиссии от всех совершённых сделок (в среднем).
avatar
svgr, немножечко вы не правы. Два процента это условно. Для каждого инструмента свой ход цены, подбирается индивидуально. Для акций на сколько помню у меня выходило около 4%. Прибыль там, как минимум 1%. Много это или мало другой вопрос т.к. стратегия больше подходит для робота. И процесс закрытия сделки так же должен быть записан в алгоритм. Это всё просчитывается и даёт положительный результат. Только оно надо? Я более склоняюсь к полу автоматической торговле где сделки открываются человеком, а тянет их уже робот. Преимуществ и (вычислительных) процессов у человека, как ни крути на много больше нежели у железяки. А вот тянуть сделку фактически до полного выбора хода, хватит мозгов и ресурсов самому простому железу.
avatar
Андрей &, так в чём же неправота? Из ответа не видно. 
Все случаи проверены, что 2, что 4. 
Вы потому и пишете, что оно не надо, что нет там никаких как минимум 1% сколько-нибудь надёжно. Повторите ваши тесты на нынешнем рынке, посмотрите на результаты.
avatar
svgr, в чем собственно проблема? Взять нефть 1%, акция Алросы — 2%. Считаем новыми макс/мин любой пик после коррекции, либо в противоположную сторону движения цены. Остаётся вопрос, а сколько вы ожидаете после этого, движение в вашу сторону? Это алго метод и приведён для примера. В таком подходе лучше брать небольшие движения. А не нужен мне такой метод потому, как я торгую руками более успешно нежели может дать подобный метод альтернативной торговли. А мысли о нестандартных методах подхода торговли, возникают попутно из за регулярного наблюдения за рынком. Можно сказать побочный эффект. По сути, можно фактически любой индикатор приклеить к роботу и он будет торговать боле менее сносно и давать куда больший процент в годовых нежели 7 кк заявлено у автора топика. Единственное автор отрицает, что не нужно уметь торговать самостоятельно, что бы сделать успешный алгоритм. От того и не выходит у него взять с рынка более тех самых 7% в год.
avatar
Андрей &, вы прочитали что-то своё :) я не писал тут о своей текущей доходности. Перечитайте ещё раз. Вдумайтесь в смысл. 
avatar
Андрей &, схему эксперимента я описал сразу. Можно лишь повториться: разгон ваш 1 или 2%, в зависимости от инструмента, затем типа вход в продолжение. В этот момент задайте тейк и стоп, соберите статистику достижений того и другого на годовом хотя бы отрезке, сосчитайте результаты с учётом комиссии.
Вы пишете о новом пике после коррекции. Так вот статистика исполнений показывает, что коррекции будут чаще и глубже, чем Вы подразумеваете на берегу. И будут достигаться раньше новых пиков более чем в половине случаев. Ситуацию чуть исправляет, что эти пики в среднем больше по размеру, чем коррекции. В итоге получите (при удачном выборе размера разгона) чуть больше нуля по сумме всех таких входов за год, если нулевая комиссия. А с учётом вашей комиссии будет уже чуть меньше нуля.
avatar
svgr, на первый взгляд, много идей кажутся интересными и вроде как содержат рациональное зерно. Прока не протестируешь :)
avatar
bascomo, рациональное зерно в идее никуда не девается глобально, но текущий характер изменения цен может идею ломать достаточно долго. Лет за десять, думаю, толковая идея всё равно даст неплохо.
Вот все и ищут как динамически подстраиваться, я пока не особо верю в успешность этого в прочитанных топиках. Пока сам не найду зацепку, что-то дающую систематически.

avatar
svgr, ну да, верить можно только себе. И то, с оговорками.
avatar
svgr, быть можетмы с вами по разному мыслим и считаем оттуда и недопонимание. Да ладно не в этом суть. Стратегия полностью рабочая, но при желании можно до чего угодно докопаться. Тейк и профит здесь так же рассчитывается не до абстрактного уровня, а по длине хода после чего позиция переводится в БУ, а так же кроется частями по определённому алгоритму либо попросту включается трейлинг. Ладно, проехали.
avatar
Андрей &, о при желании можно до чего угодно докопаться
О, да. В массе люди этим и занимаются, обычно
avatar
Андрей &, когда-нибудь запрограммируйте вашу стратегию с нужным набором параметров. По написанному, это алгоритм средней сложности. За несколько месяцев можно сделать и самостоятельно, не будучи программистом.
Последующие прогоны снимут все вопросы и заблуждения тоже.
А руками… всегда есть соблазн пропустить стоп, пересидеть просадку больше ожидаемой, а потом забыть об этом. И считать по итогу, что руками стратегия работает лучше.
Три-четыре раза пережидание прокатит при удаче, а затем ополовинит депозит.
avatar
Сергей Сергаев, делал я так, это довольно бессмысленно, потому что интересует не сам по себе вход или сам по себе выход, а сделка целиком.
avatar
Нетрейдер, для чего?
avatar
Нетрейдер, 7% — это чистая среднегодовая доходность за минусом торговых издержек, но до налогообложения, а референс для меня — ставка по депозиту какого-нибудь ВТБ или Сбера. Поэтому тут всё прозрачно, зачем усложнять? Можно и налоги отнять, но и без этого всё понятно.
avatar
семь процентов «в лоб» в твёрдой валюте это мало, но намного лучше, чем орёл и решка. если к этим семи процентам  подойдёт человек с деликатными руками, то на этом очень неплохо можно жить.
avatar
Tуземец, Я считаю, что если хочешь заработать 100 млн, целью нужно ставить млрд :)
avatar
Сергей Сергаев, идеальная подгонка на тестовом периоде — это как раз то, что великолепно у меня работает. И то, к чему я стремлюсь.
avatar
А чем описанное в первом предложении отличается от описанного во втором? Сразу или 'со временем'?
avatar
svgr, ну да. В первом случае на них можно заработать, во втором — только слить. 
avatar
bascomo, тогда несколько высказываний по тексту. С парой мыслей ближе к концу смог согласиться. Начальные возможно не понял. Например,  у меня не получается, что на длинных периодах (годы) сильно падает доходность при подобранном параметре.
У меня сейчас есть два алгоритма первого типа. В первом из них повышенная доходность зависит от того, были ли в периоде ралли вверх или вниз. Без таких ралли он имеет по параметру устойчивую 'условно  плюсующую' область значений. То есть результат за любой период либо  медленно минусует, либо умеренно плюсует. Итак имеем: хорошая алгоритмическая идея для спокойного умеренно волатильного рынка.
Соответственно, тут нужно угадывать когда крупняк сменит параметры своих торгующих роботов и характер волатильности изменится.
Параметры инструмента не меняются 3-6 месяцев обычно.
avatar
svgr, я проверял на акциях это в 21 году. Тогда у меня в основе алгоритмов был комплекс подстраиваемых параметрами индикаторов с типовыми сигналами. Ряд таких алгоритмов по отдельным инструментам и таймфреймам работал и по 4 месяца, стабильно и надёжно, но были и те, которые ломались уже через месяц. Поскольку я точно не знаю, когда алгоритм перестанет работать, я меняю его на новый превентивно, не дожидаясь убытков. Но, понятное дело, это только один из возможных подходов. Я решил это не запускать, несмотря на отличные результаты — чистая доходность без плеч составляла от 3 до 15% за месяц на акцию, но случился февраль 22, что меня несколько подкосило. И потом, я хотел уйти от привязки к значениям параметров индикаторов, от цен, от типа инструмента, от рынка. Мне нужно было создать программу для автоматического поиска и проверки стратегий на любых рынках и любых инструментах. Так что я в эту активность ушёл. Гадать же тоже не хочется — когда там чего на рынке изменится.
avatar
bascomo, 20% в год это супер результат.Но годы разные.В один год 0%, а в другой 40%. Но законы рисования графика постоянны всегда. Это как волны на море.Они такие же как ценографики.Малые волны складываются по 4 и рождается большая в 2 раза большая по амплитуде.Так происходит до 9й волны и далее коррекция.Закон роста 3-2 .
У японцев это 3 атаки 3х белых солдат или 8-10 новых перемен .
Классная сказка? А чем же япы торгуют как не солдатами? Тренд — это солдат. Это не я сказал, япы… уж 300 лет  торгуют. А мы тут программы, алгоритмы придумываем.?? Лучше вжариммм!!! по 2м воронам 3мя солдатамиии!!!
avatar
ezomm, 20% годовых — это очень, очень мало.
avatar
bascomo, 
20% годовых — это очень, очень мало.
Не могу удержаться и не привести мою любимую цитату из трейдера всех времен и народов Герчика А:

20% от них… я это них… я, а 20% от дох… я это дох… я!
Дмитрий Овчинников, у меня нет депо 100 млн) подписался на него я, кстати, на месяц хватило меня, и отписался. Опять сплошная продажа курсов и околорынок.
avatar
bascomo, Герчик — это платино-иридиевый эталон инфоцыганства, а не трейдинга, не перепутайте. А еще говорят он таксистом в NYC работал. Брат-2 надеюсь все смотрели.
avatar
Кирилл Гудков, а что делать? Для меня никто бриллианты из кучи говн не отобрал, «всё сама, всё сама»
avatar
Кирилл Гудков, может он и эталон инфоцыганства, но про 20% всё так и есть ) хуже того, даже 100% от них_я — это них_я, такие дела.
Пафос Респектыч, я не спорю, мысль мудрая, хоть и тривиальная. Проценты не принимают в магазине на кассе, даже шарп не принимают.
avatar
Кирилл Гудков, сегодня ещё одну мудрую мысль прочитал — что поднимая с земли найденный четвертак ($0.25) ты в течение этой пары секунд зарабатываешь примерно 450 $/час.
прочитав «зарабатывали свои жалкие 5-7% годовых»
мы все поняли:
речь про 1%… 3%
1. Переобучение не связано с периодом, хоть неделя, хоть 100 лет. Можно подогнатся. Нужен форвард тест.
2. Проверить на изменчивость рынок можно тестом через месяц/день — четный месяц тренировочная выборка, нечетный — тест. Сразу будет видно.
3. Выбор системы из 100000+ — тоже сильная подгонка(ошибка выжившего и т.п.). Опять нужен форвард.
4. Чтобы понять, что «ломается», и работало ли оно вообще гугли «t-stat student», «доверительный интервал бутстрап».
avatar

теги блога bascomo

....все тэги



UPDONW
Новый дизайн