Когда я только начинал писать код, самостоятельно совершающий сделки на рынке, я столкнулся с тем, что стратегии со временем переставали работать. Впрочем, куда чаще было то, что разработанные и оптимизированные стратегии показывали доход только на данных для обучения. И это нормально.
Однако, тогда я тешил себя иллюзиями, что где-то на рынке зарыт глобальный секрет, найдя который, можно отыскать алгоритм «на века». Было проведено много разных исследований, для поиска использовалась группа промышленных серверов, поиск работал днями и ночами.
И «вечные» алгоритмы были-таки найдены. Только вот доходность по ним оказалась меньше, чем по депозитам, да и просадки не радовали глаз. Зато они стабильно, год от года зарабатывали свои жалкие 5-7% годовых.
Я вижу в этом две крайности: подгонка на максималках сделает так, что на новых, незнакомых данных алгоритм будет сливать. А тем, кто чрезмерно увлекается WFO, много не заработать. Зато тут не нужно плавить мозг. Прогнал алгоритм через годы рынка — получил то, что, скорее всего, будет работать, по крайней мере, до очередного 24 февраля или его аналогов.
Говорить про переобучение в отрыве от контекста и критериев оценки бессмысленно. Да, есть общее правило, что на тестовом периоде алгоритм не должен сливать. Но только очень общо оно сформулировано. Нужно всегда конкретизировать критерии длительности периодов обучения / оценки, чтобы разговор имел смысл. Как я писал ранее, я давно сделал выводы, что чем длиннее периоды обучения и тестирования, тем ниже доходность.
Как я поставил себе задачу?
Во-первых, я отказался от поиска «вечных» алгоритмов.
Во-вторых, поскольку ценовой ряд — это, в сущности, довольно примитивный и скудный набор данных, то представляется довольно очевидным, что рыночные ситуации с большим приближением, тут или там, рано или поздно повторяются. Если не на инструменте А, то на инструменте Б. Если не на TF M10, то на TF M5. Тут же родилась идея, что алгоритмы для торговли на А можно искать и на Б, только потом проверить на А. Особенно, если данных мало — классическая ситуация с лимитированными фьючерсными контрактами. Задача, которую следовало для этого решить — не привязываться к абсолютным значениям вроде цены, волатильности и, если угодно, объёмов. И это было реализовано. Среди «идей на полке» оказалась идея про максимальное нормирование ценового ряда — условно свести его по всем инструментам к заданному интервалу — от 0 до 1, например. Но вообще это нужно человеку, человеческому мозгу и привычному для нас образу мышления, чтобы нам было проще сравнивать. Алгоритмам, в сущности, на это плевать.
В-третьих, уже несколько лет назад я ввёл для себя понятие «жизненный цикл закономерности на рынке». Это срок, в течение которого тот или иной алгоритм будет успешным. Мне было важно понять, как долго они живут, чтобы исходя из срока их жизни и определить длину периодов, на которых я ищу и затем проверяю эффективность алгоритма. Ранее я писал о том, что чем короче эти периоды, тем эффективнее с точки зрения доходности алгоритм. Но тем и больше рисков, касающихся стабильности его работы. Как и в прочих задачах, тут следовало найти золотую середину.
Я часто слышал, как люди, не вникая в вопрос, говорили что-то про переобучение, степени свободы и много других умных и красивых слов. По факту, большинство из них плавает в этих понятиях — представление о том, что это — они, может, и имеют. Но вот с прикладным использованием у них большие проблемы и практически полное отсутствие опыта. Я не теоретик, я практик. Мне никогда особо не было интересно рассуждать на философские темы из серии «что, если». Меня всегда куда больше увлекало строить реальные, работающие решения. И, говоря откровенно, мне не нравятся люди, которые много говорят, но у которых слова остаются словами. Я считаю, что у нас есть некий фиксированный запас энергии, и если мы её выплеснем всю на «базар-вокзал», то на какой-то реальный продукт сил уже не остаётся. Когда я не пишу посты, я эффективно пишу код.
Смысл этого поста в том, что алготрейдеры в своём большинстве сильно, но необоснованно, боятся переобучения. В то время, как нужно сфокусироваться на дистанции обучения и проверки. То, что для нескольких лет будет переобучением, на коротких дистанциях будет нужной и желанной специализацией алгоритма под конкретную фазу или ситуацию на рынке. По этой же причине я со скепсисом отношусь к идее существования трейдеров, которые чётко и неукоснительно следуют одной и той же стратегии лет 20 и продолжают зарабатывать. Покажите мне таких, а ещё их доходы за 20 лет и докажите, что они торговали по одним и тем же принципам и правилам всё это время.
Это сложный подход, и, как оказалось, мало кто может критически на него взглянуть. Но куда меньше тех, кто сможет его правильно реализовать и протестировать, как он будет работать. При том, что сложность его состоит не в высшей математике, тут, скорее, арифметика 4-го класса. С другой стороны, на поверку он куда доходнее, чем классические подходы, поскольку он не требует, чтобы найденный алгоритм одинаково эффективно работал на всей дистанции. Более того, даже когда я такие алгоритмы находил, их ключевая особенность состояла в том, что они совершали очень мало сделок. А потому и демонстрировали невысокую доходность. Кажется, что тут важнее стабильность, но если посмотреть на список сделок внимательно и сравнить его с быстрыми алгоритмами, которые заработали столько же или куда больше, но не за годы, а за недели или месяцы, то увидим примерно одни и те же относительные показатели. Так что получается, что мы просто за счёт дополнительных фильтров размажем сделки во времени, потеряв в прибыли и не получив даже стабильности — она в данном случае иллюзорна. А тогда какой смысл заниматься этим упражнением?
Завершая, подытожу. Не все корректно понимают, что такое переобучение. Обращать внимание нужно на тот срок, который модель должна работать после обучения. Если принять его за бесконечность, то любое обучение будет переобучением. У всего в этой вселенной есть своё время жизни и свой срок существования, и цель спекулянта состоит, по моему мнению, не в том, чтобы его стратегия жила как можно дольше, но чтобы её жизнь была как можно эффективнее, в данном случае — с точки зрения дохода. В противном же случае ваш алгоритм будет выглядеть как Дэвид Рокфеллер, которому пересаживали сердце 6 раз. Картинка, как по мне, прямо таки скажем, унылая.
Грааля нет?
Возникает ряд вопросов, влияющих на результат. А сколько он этот плюс в %? Где стоп стоит при этом? Какой инструмент? И именно 2 ли %?
Я вот это исследовал в десятые годы. И в общем случае этот эффект 'продолжения движения' — мизерный. В лучшем случае полкомиссии. Соответственно, итог торговли — минус полкомиссии от всех совершённых сделок (в среднем).
Все случаи проверены, что 2, что 4.
Вы потому и пишете, что оно не надо, что нет там никаких как минимум 1% сколько-нибудь надёжно. Повторите ваши тесты на нынешнем рынке, посмотрите на результаты.
Вы пишете о новом пике после коррекции. Так вот статистика исполнений показывает, что коррекции будут чаще и глубже, чем Вы подразумеваете на берегу. И будут достигаться раньше новых пиков более чем в половине случаев. Ситуацию чуть исправляет, что эти пики в среднем больше по размеру, чем коррекции. В итоге получите (при удачном выборе размера разгона) чуть больше нуля по сумме всех таких входов за год, если нулевая комиссия. А с учётом вашей комиссии будет уже чуть меньше нуля.
Вот все и ищут как динамически подстраиваться, я пока не особо верю в успешность этого в прочитанных топиках. Пока сам не найду зацепку, что-то дающую систематически.
Последующие прогоны снимут все вопросы и заблуждения тоже.
А руками… всегда есть соблазн пропустить стоп, пересидеть просадку больше ожидаемой, а потом забыть об этом. И считать по итогу, что руками стратегия работает лучше.
Три-четыре раза пережидание прокатит при удаче, а затем ополовинит депозит.
У меня сейчас есть два алгоритма первого типа. В первом из них повышенная доходность зависит от того, были ли в периоде ралли вверх или вниз. Без таких ралли он имеет по параметру устойчивую 'условно плюсующую' область значений. То есть результат за любой период либо медленно минусует, либо умеренно плюсует. Итак имеем: хорошая алгоритмическая идея для спокойного умеренно волатильного рынка.
Соответственно, тут нужно угадывать когда крупняк сменит параметры своих торгующих роботов и характер волатильности изменится.
Параметры инструмента не меняются 3-6 месяцев обычно.
У японцев это 3 атаки 3х белых солдат или 8-10 новых перемен .
Классная сказка? А чем же япы торгуют как не солдатами? Тренд — это солдат. Это не я сказал, япы… уж 300 лет торгуют. А мы тут программы, алгоритмы придумываем.?? Лучше вжариммм!!! по 2м воронам 3мя солдатамиии!!!
20% от них… я это них… я, а 20% от дох… я это дох… я!
мы все поняли:
речь про 1%… 3%
2. Проверить на изменчивость рынок можно тестом через месяц/день — четный месяц тренировочная выборка, нечетный — тест. Сразу будет видно.
3. Выбор системы из 100000+ — тоже сильная подгонка(ошибка выжившего и т.п.). Опять нужен форвард.
4. Чтобы понять, что «ломается», и работало ли оно вообще гугли «t-stat student», «доверительный интервал бутстрап».