Блог им. SergeyJu

Два слова об алгопортфеле

Провел поиск весов оптимального портфеля для 36 систем на фьючерсах. Период 10.01.2008 — 30.12 22. Часть систем живут весь период, часть включается по мере  наличия достаточных данных. Например, системы на фьючерсе на юань — с конца весны 2022. При отсутствии части систем в какой-то промежуток времени, производилось умножение весов работающих систем на повышающий к-т так, чтобы сохранялся фиксированная сумма работающих весов. 
Метод оптимизации — МонтеКарло. 50 000 бросков. Критерий оптимизации единственный — отношение доходности к риску. 
Результаты следующие.
Значимое отличие весов от 0 — 25 систем. Причем оставление 18 из них с наибольшими весами практически не ухудшает результат. 
Процентные соотношения по торгуемому активу получились такие. 
Si 30,4%
CNY 25,7%
RTS 19,6%
MXX 11,3%
SBER 10,0%
BR 3,0%

 
★3
50 комментариев
Некоторые коллеги на основе эмпирического опыта утверждают, что выделять средства системам необходимо без оптимизации, да и вообще поровну.
Дмитрий Овчинников, Я сейчас все вмешательства подобного рода верифицирую через, как это лучше назвать, через мета-верификацию. В данном случае я бы, смещая окно на исторических данных, посмотрел как бы этот подход работал — ну то есть берем окно, на части окна мы «оптимизируем» веса, на части смотрим с новыми весами, дальше смещаем окно, снова на части оптимизируем, на части проверяем результат. Дальше склеиваем все куске где на оптимизированных весах все работало. Дальше можно сравнить этот результат с бенчмарком (например, равными весами).
avatar
Replikant_mih, конечно, волкфорвард я исследовал. Результат похуже, но вполне приемлемый. НО!
1. Я всегда беру не скользящее окно, а окно с закрепленным началом, скользит только конец. Много раз проверял, что чем больше данных для анализа, тем лучше. 
2. Отсюда следует, что для сегодняшнего портфеля нужна именно тотальная оптимизация, как я и сделал. 
avatar

SergeyJu, Да, скользящее окно, это скорее для оценки работает ли сам подход. Оценить влияет ли размер обучающей выборки на результаты — отельный этап. Для себя отметил, что если это делаешь так как вы описали (расширяя окно обучения с фиксированным началом), желательно как-то учесть, что если брать в качестве OOS осташийся кусок, то у тебя для каждого размера окна будет разный OOS кусок, другими словами, в данном случае у тебя подмешаны два фактора будут — размер IS окна + какие состояния рынка захватывает OOS кусок (да и для IS это тоже, к слову, справедливо), ну т.е. если у тебя в OOS куске сначала идут неблагоприятные для систем времена, а потом улучшаются постепенно, то, увеличивая размер IS окна, можно по ошибке посчитать что увеличение размера обучающего окна положительно влияет, а по факту положительно влиять будет что в уменьшающемся OOS окне все более благоприятствующие состояния рынка попадают.

Старался понятно написать, не уверен, что получилось)).

 

avatar
Replikant_mih, я эмпирик, хоть и с математическим образованием. Меня формальные штучки типа OOS вообще не парят. Чтобы торговать здесь и сейчас нужна какая-то оценка параметров и систем. Устойчивость к подгонке создается в первую очередь объемом и разнообразием данных. А не шаманством с выбором проверочных блоков OOS. Тем более, что почти все шаманы умудряются  править системы по результатам OOS. Тем самым устраивают хаос в собственных головах. 
avatar

SergeyJu, 

Тем более, что почти все шаманы умудряются  править системы по результатам OOS

 

Ну мне OOS и все что выше описал позволяет оценивать сами подходы к оценке систем. Да, OOS не панацея, если например то, что в цитате. Но вообще это всё хороший инструментарий чтобы «приземлять» (ореалистичивать оценку) системы на этапе ещё до выпуска в бой. Ну т.е. да, это надо использовать как способ оценить, а не как способ улучшить.

avatar
Replikant_mih, волкфорвард, если серьезно, позволяет кое-что исследовать, но это же кухня. Есть и другие инструменты анализа, и третьи. Собственно об этом я не собирался писать ничего. 
avatar
Дмитрий Овчинников, правило большого пальца — веса обратно пропорциональны оценке риска. Таким образом все системы вносят равный вклад в принятый риск. 
Минус, собственно, состоит в том, что никак не учитываются связи между системами. В результате мы можем задась избыточный вес набору систем с одинаковыми профилями риска и недооценить системы с другими рисками.  Условно, тема корреляции эквити систем игнорируется. 
avatar
SergeyJu, 
Условно, тема корреляции эквити систем игнорируется. 
Ильинский в своей книге утверждает, что с ростом количества активов корреляция малоинформативна. 

Цитата:
Корреляции, на которые мы тратим столько времени и сил в случае большого количества активов, скорее всего, случайные. Реально сильно на них полагаться нельзя.
Дмитрий Овчинников, если у Вас 2 действующих фактора риска, например, то неважно, 10, 100 у Вас систем или 1000, главное, чтобы факторы правильно взвешивались. 
Но если из 10 систем 9 настроены на один фактор, а 1 на второй, равное взвешивание не самый удачный выбор.
К тому же Ильинский играет на другом поле. Не всегда советы футболиста подойдут волейболисту.
P.S. Мне вообще тема корреляции на биржевых рынках не близка. И я не использую почти ни к-т корреляции, ни ковариационные матрицы. Именно по причине неустойчивости их оценок в условиях высокого уровня шума.
avatar
SergeyJu, А что такое фактор риска? Диверсификация лонг и шорт систем, систем которым нужен тренд и которые рубят во флете — что-то такое?
avatar
Replikant_mih, в этом году акции хорошо снизились. А системы на фьючах заработали. В 2021 году наоборот, сишка лосила, а акции в среднем выросли. Следовательно, эти два компонента портфеля имеют весьма разные факторы риска. Какие это факторы я и не собираюсь разбираться. Достаточно и того, что они существенно разные. 
avatar

SergeyJu, 

Но если из 10 систем 9 настроены на один фактор

...

Какие это факторы я и не собираюсь разбираться.

Как это всё-таки работает? Ну т.е. в данном примере сишка/акции это будет один из, условно, 10 факторов риска (не важно, что какие низкоуровневые причины у этих различий)?

avatar
Replikant_mih, как хотите, так и заработает. Ну, например, максДД портфеля акций 50%, а портфеля фьючей 20%. Значит, желая выровнять ЭТОТ риск, мы выделим на второй портфель в 2,5 раза больше, чем на первый. 
avatar
SergeyJu, Ага, понял. Я пока ничего такого не делаю, но в TODO давно пылится)).
avatar
SergeyJu, 
я, как практик, считаю, что в развешивании систем лучше работают опыт и понимание уникальности систем и инструментов, чем условно «математические» подходы. Но не факт, что я прав :)

Дмитрий Овчинников, ничего не имею против такой эмпирики. Но Вашу эмпирику в мою голову не вложить. У меня с интуицией что в краткосроке, что среднесроке совсем плохо. 
avatar
SergeyJu, 
речь не об интуиции. речь о том, например, что из понимания различия систем, переносящих овернайт по сравнению с не переносящими, я буду выдавать им разные весовые коэффициенты, независимо от цифр, полученных в результате моделирований.
Дмитрий Овчинников, внутри одного инструмента я так и делаю, а вот между инструментами все иначе.
avatar
Дополню. Если быть точным, то равные веса на одну идею. А одна идея из-за разных значений параметров может разбиваться между несколькими системами, но не больше 3-х.
avatar
Дмитрий Овчинников, автор так и сделал практически, уничтожив все корреляции при помощи рандомизации. 
avatar
Kot_Begemot, 
автор так и сделал

так это как?

Дмитрий Овчинников, как это так? Есть, как говорится, ньюансы) 

Что-то загрубляем, что-то игнорируем, что-то работает так, как должно.

avatar
А чего монте-карлилось? Разная последовательность сделок в пределах системы?
avatar
Replikant_mih, веса систем в портфеле.
avatar
SergeyJu, И просто берем, условно, лучшее соотношение? Это ж подгонка, не?
avatar
Replikant_mih, все подгонка. 
avatar
SergeyJu, Чувствуется, что вы достигли алго-дзена)).
avatar
Replikant_mih, а что, марковиц не подгонка? 
Собственно, и системы наши все — подгонка. Другое дело, что и с подгонкой жить можно, если осторожно. А вот без неё алготрейдинга нет. 
avatar
SergeyJu, Ну да, сначала график растёт — это адаптация, учет специфики состояний и т.д., дальше пик и график падает — это уже подгонка.
avatar
Replikant_mih, с переподгонкой надо научиться сосуществовать. Живем же мы среди бактерий, дрожжей и прочих лямблий. Некоторые даже научились брагу ставить.  
avatar
Гэп от 24-го, выбрасываете, или оцениваете, как не разовый выброс в соотношении доход/риск?
avatar
Denis, ничего не выбрасываю. 
avatar
Может стоит попробовать нормальный оптимизатор, DE(дифференциальная эволюция), или GA(генетический алгоритм)? И добавить регуляризации L1 — штраф за не нулевые веса(по эпсилону, относительно самого большого веса), чтобы получить решение с меньшим количеством систем. Также разделить данные на 2 части, чтобы оценить влияние подгонки весов вне выборки.
avatar
kostay_scr, а зачем? Если есть простая задача оптимизации, которая простым бытовым компом обсчитывается 10 минут и которую не нужно считать чаще чем раз в месяц-другой, не нужно придумывать себе проблемы на пустом месте. 
Не надо рубить дрова ни скальпелем, ни паровым молотом, если под рукой есть просто колун. 
avatar
SergeyJu, есть сомнения, что задача простая. 32 параметра это много, бюджет на 50000 вызовов целевой это немного. Нужно проверять на сходимость, смотреть гистограмму результатов повторов оптимизации по целевой(например 64 прохода генетического алгоритма, с разной инициализацией).
По монте карло тоже можете посмотреть 100 лучших решений, и оценить разброс.
Если лучшие результаты близки к друг другу, то наверно есть сходимость, и оптимум близок к глобальному. Выглядит как «край» на гистограмме, в который она упирается. Если же есть лучший результат, а другие сильно хуже него, и в общем большой разброс, то надо думать. Но это всё-таки нужно смотреть по результатам оптимизатора, С монте карло, наверно, будет хуже видно.
А регуляризация это для того, чтобы получить результат из меньшего кол-ва систем, ну и возможно уменьшить подгонку под историю.
avatar

kostay_scr, осмотрите на это с практической точки зрения. Мы не можем решать неустойчивые задачи в условиях высокого уровня шума. Изначально неустойчивые постановки — в топку безжалостно!  У нас нет необходимости искать абсолютный экстремум по той же самой причине. Достаточно попасть в близкую окрестность. Причем не обязательно даже в близкую исходном пространстве параметров. Вы обратили внимание, что можно легко отбросить некоторую часть компонент и практически не получить ухудшения итогового результата? Я могу выбросить несколько систем и получить другую развесовку, но не намного худший по критерию новый оптимум. 
Зачем же я про такую примитивную фигню написал?  Да именно потому, что примитивная работающая фигня выпадает из поля зрения высоко образованных личностей. 
Да, я, конечно, смотрел на разные результаты при различных запусках. В общем и целом — одно и тоже выходит каждый раз. Если бы шел разнобой, я бы, конечно, напрягся.  

 

avatar
Монте-карло не лучший метод для данной задачи. Я бы применил метод роя частиц. Хотя 50тыс хватит и на генетический алгоритм.
avatar
Roman Ivanov, если дойдут руки, попробую алгоритм роя. Какую, по возможности простую реализацию посоветуете? 
avatar
SergeyJu, по мне так рой похуже, чем другие алгоритмы. Вот хороший GA, не прогадаете:
pymoo.org/algorithms/soo/ga.html
Работает из коробки.
Можно просто FunctionalProblem:
pymoo.org/problems/definition.html
avatar
kostay_scr, смотря для какой задачи. В данном случае сможет сэкономить на итерациях раз в 5-10
avatar
Roman Ivanov, про рой уже читаю, руки дойдут — реализую. 
МК я тоже не в лоб использую, есть методы ускорения сходимости, особенно используя особенности задачи. В разы обычно легко. Вот со сверхлинейной сходимостью посложнее, но,  если задача позволяет, можно комбинировать с методом сопряженных градиентов, например. 
avatar
SergeyJu, В этой же библиотеке готовый рой, не надо ничего придумывать:
pymoo.org/algorithms/soo/pso.html
Или питон не подходит?
avatar
SergeyJu, не подскажу, я обычно сам делаю. Матчасть не сложная
avatar
Roman Ivanov, у меня проблемы с Питоном, никогда на нем не писал. В бэкграунде фортран, си, VBA, устаревшие ассемблеры.
Метод МК хорошо ускоряется за счет замены случайных данных специально сконструированными последовательностями. Первым автором по этой теме был Соболь (монография 1973 года). 
avatar
SergeyJu, IMHO вряд ли этот метод перебъет ГА
avatar
Спасибо!
1. Сильно ли идейно различаются 36 систем?
2. Сильно ли они различаются по времени удержания позиции?
Есть ли такое, что монте-карло предлагает скатиться в какую одну группу идей систем и в какое-то (вероятно, быстрое) удержание позиций?
avatar
Sergey Pavlov, идей не так уж много. Но даже близкие идеи на разных активах могут давать весьма разные эквити. 
Время удержания от нескольких часов до пары недель. 
avatar
Делал похожее моделирование, коэф между тикерами примерно такие же. Два замечания: почти то же самое даст метод «риск паритет» и надо снизу доходность подпереть ограничением, иначе больший вес набирают системы с гладкой эквити, но низким доходом.
avatar
yurikon, про выравнивание риска я писал, что это первый выбор. Обсуждаем альтернативу. 
avatar

теги блога SergeyJu

....все тэги



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