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

    Грааля нет?

      • BeyG
        07 августа 2023, 16:58
        bascomo, это с плечами?
          • BeyG
            07 августа 2023, 19:10
            bascomo, так включите третье плечо и уже 21% — маловато конечно, но уже можно жить
  • Андрей &
    07 августа 2023, 17:06
    Покуда самостоятельно не торгуешь стабильно в плюс, то о каких алгоритмах можно вообще вести разговор? Лично моё мнение если подходить к алгометрической торговле, то лучше отказаться от привычных схем и патернов. Нужно мыслить несколько в другом не стандартном русле. К примеру взять в расчёт инерционность. Рынок, как и физическое тело, при разгоне и последующем торможении, имеет некий инерционный запас. К примеру, алгоритм считает сколько прошла цена от нового минимума, для различных инструментов цифра будет разной. Сейчас не существует проблем, на истории, измерить ход цены в процентах после которого рынок будет некоторое время продолжать движение. Скажем прошла цена 2% от нового сформированного мин/макс, открываем сделку по направлению цены т.к. знаем, что рынок после такого движения, гарантировано даст +. Далее другой алгоритм уже тянет сделку до выполнения других условий закрытия. Данный подход очень хорошо подходит для роботов, но весьма муторен в ручной торговле. Подобный метод куда более эффективен нежели алгоритм, который будет искать некие патерны и закономерности, рисуя в своих микросхемах виртуальные фигуры. Существуют и другие нестандартные торговые подходы в корне отличающиеся от всем привычных систем. Иногда возникает мысль, заняться роботизацией, но по мне привычней торговать руками т.к. в наборе имеется куда более шикарный набор торговых техник, которые весьма сложно объяснить железному истукану чего от него требуется. Куда проще иметь робота который тянет сделку до финала. Да и торговать руками это ни с чем не сравнимое удовольствие. 
      • Андрей &
        07 августа 2023, 17:40
        bascomo, в таком случае речь идёт про ИИ Да и то по вашим словам покуда ваша доходность 7% годовых. По моему этот тип торговли весьма приближен к нулю.
    • svgr
      07 августа 2023, 20:55
      Андрей &, насчёт гарантированности плюса после отхода на 2% от локального минимума.
      Возникает ряд вопросов, влияющих на результат. А сколько он этот плюс в %? Где стоп стоит при этом? Какой инструмент? И именно 2 ли %?
      Я вот это исследовал в десятые годы. И в общем случае этот эффект 'продолжения движения' — мизерный. В лучшем случае полкомиссии. Соответственно, итог торговли — минус полкомиссии от всех совершённых сделок (в среднем).
      • Андрей &
        08 августа 2023, 03:24
        svgr, немножечко вы не правы. Два процента это условно. Для каждого инструмента свой ход цены, подбирается индивидуально. Для акций на сколько помню у меня выходило около 4%. Прибыль там, как минимум 1%. Много это или мало другой вопрос т.к. стратегия больше подходит для робота. И процесс закрытия сделки так же должен быть записан в алгоритм. Это всё просчитывается и даёт положительный результат. Только оно надо? Я более склоняюсь к полу автоматической торговле где сделки открываются человеком, а тянет их уже робот. Преимуществ и (вычислительных) процессов у человека, как ни крути на много больше нежели у железяки. А вот тянуть сделку фактически до полного выбора хода, хватит мозгов и ресурсов самому простому железу.
        • svgr
          08 августа 2023, 10:11
          Андрей &, так в чём же неправота? Из ответа не видно. 
          Все случаи проверены, что 2, что 4. 
          Вы потому и пишете, что оно не надо, что нет там никаких как минимум 1% сколько-нибудь надёжно. Повторите ваши тесты на нынешнем рынке, посмотрите на результаты.
          • Андрей &
            08 августа 2023, 11:10
            svgr, в чем собственно проблема? Взять нефть 1%, акция Алросы — 2%. Считаем новыми макс/мин любой пик после коррекции, либо в противоположную сторону движения цены. Остаётся вопрос, а сколько вы ожидаете после этого, движение в вашу сторону? Это алго метод и приведён для примера. В таком подходе лучше брать небольшие движения. А не нужен мне такой метод потому, как я торгую руками более успешно нежели может дать подобный метод альтернативной торговли. А мысли о нестандартных методах подхода торговли, возникают попутно из за регулярного наблюдения за рынком. Можно сказать побочный эффект. По сути, можно фактически любой индикатор приклеить к роботу и он будет торговать боле менее сносно и давать куда больший процент в годовых нежели 7 кк заявлено у автора топика. Единственное автор отрицает, что не нужно уметь торговать самостоятельно, что бы сделать успешный алгоритм. От того и не выходит у него взять с рынка более тех самых 7% в год.
            • svgr
              08 августа 2023, 11:54
              Андрей &, схему эксперимента я описал сразу. Можно лишь повториться: разгон ваш 1 или 2%, в зависимости от инструмента, затем типа вход в продолжение. В этот момент задайте тейк и стоп, соберите статистику достижений того и другого на годовом хотя бы отрезке, сосчитайте результаты с учётом комиссии.
              Вы пишете о новом пике после коррекции. Так вот статистика исполнений показывает, что коррекции будут чаще и глубже, чем Вы подразумеваете на берегу. И будут достигаться раньше новых пиков более чем в половине случаев. Ситуацию чуть исправляет, что эти пики в среднем больше по размеру, чем коррекции. В итоге получите (при удачном выборе размера разгона) чуть больше нуля по сумме всех таких входов за год, если нулевая комиссия. А с учётом вашей комиссии будет уже чуть меньше нуля.
                • svgr
                  08 августа 2023, 12:31
                  bascomo, рациональное зерно в идее никуда не девается глобально, но текущий характер изменения цен может идею ломать достаточно долго. Лет за десять, думаю, толковая идея всё равно даст неплохо.
                  Вот все и ищут как динамически подстраиваться, я пока не особо верю в успешность этого в прочитанных топиках. Пока сам не найду зацепку, что-то дающую систематически.

              • Андрей &
                08 августа 2023, 12:18
                svgr, быть можетмы с вами по разному мыслим и считаем оттуда и недопонимание. Да ладно не в этом суть. Стратегия полностью рабочая, но при желании можно до чего угодно докопаться. Тейк и профит здесь так же рассчитывается не до абстрактного уровня, а по длине хода после чего позиция переводится в БУ, а так же кроется частями по определённому алгоритму либо попросту включается трейлинг. Ладно, проехали.
                • svgr
                  08 августа 2023, 12:39
                  Андрей &, когда-нибудь запрограммируйте вашу стратегию с нужным набором параметров. По написанному, это алгоритм средней сложности. За несколько месяцев можно сделать и самостоятельно, не будучи программистом.
                  Последующие прогоны снимут все вопросы и заблуждения тоже.
                  А руками… всегда есть соблазн пропустить стоп, пересидеть просадку больше ожидаемой, а потом забыть об этом. И считать по итогу, что руками стратегия работает лучше.
                  Три-четыре раза пережидание прокатит при удаче, а затем ополовинит депозит.
  • Tуземец
    07 августа 2023, 17:35
    семь процентов «в лоб» в твёрдой валюте это мало, но намного лучше, чем орёл и решка. если к этим семи процентам  подойдёт человек с деликатными руками, то на этом очень неплохо можно жить.
  • svgr
    07 августа 2023, 20:27
    А чем описанное в первом предложении отличается от описанного во втором? Сразу или 'со временем'?
      • svgr
        07 августа 2023, 21:16
        bascomo, тогда несколько высказываний по тексту. С парой мыслей ближе к концу смог согласиться. Начальные возможно не понял. Например,  у меня не получается, что на длинных периодах (годы) сильно падает доходность при подобранном параметре.
        У меня сейчас есть два алгоритма первого типа. В первом из них повышенная доходность зависит от того, были ли в периоде ралли вверх или вниз. Без таких ралли он имеет по параметру устойчивую 'условно  плюсующую' область значений. То есть результат за любой период либо  медленно минусует, либо умеренно плюсует. Итак имеем: хорошая алгоритмическая идея для спокойного умеренно волатильного рынка.
        Соответственно, тут нужно угадывать когда крупняк сменит параметры своих торгующих роботов и характер волатильности изменится.
        Параметры инструмента не меняются 3-6 месяцев обычно.
          • ezomm
            08 августа 2023, 01:51
            bascomo, 20% в год это супер результат.Но годы разные.В один год 0%, а в другой 40%. Но законы рисования графика постоянны всегда. Это как волны на море.Они такие же как ценографики.Малые волны складываются по 4 и рождается большая в 2 раза большая по амплитуде.Так происходит до 9й волны и далее коррекция.Закон роста 3-2 .
            У японцев это 3 атаки 3х белых солдат или 8-10 новых перемен .
            Классная сказка? А чем же япы торгуют как не солдатами? Тренд — это солдат. Это не я сказал, япы… уж 300 лет  торгуют. А мы тут программы, алгоритмы придумываем.?? Лучше вжариммм!!! по 2м воронам 3мя солдатамиии!!!
              • Дмитрий Овчинников
                08 августа 2023, 12:23
                bascomo, 
                20% годовых — это очень, очень мало.
                Не могу удержаться и не привести мою любимую цитату из трейдера всех времен и народов Герчика А:

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

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

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