Блог им. DenisVo

Битва методов оптимизации портфеля!

Всем привет, 

Не смотря на то, что многие люди довольно скептически отнеслись к китайской идее напрямую оптимизировать значение шарпа и подберать веса для активов используя LSTM сеть (А что так можно было?), я решил все же этот метод протестировать. 

Я не люблю всякого рода сложные подходы, поэтому я пошел в лоб, написал простую стратегию для динамической ребалансировки портфеля (только лонг) и протестировал на ней различные методы.

Для тестов были взяты следующие методы оптимизации финасового портфеля:

Классические:
  • Mean-Variance
  • Hierarchical Risk Parity (созданный Маркусом Лопезом де Прадо)
  • Critical Line Algorithm (говаривают метод специально для оптимизации портфелей придуман)
  • Efficient Frontier with nonconvex optimizer (нашел в примерах питоновского пакета, добавил для кучи)
Экзотические:
  • LSTM (модель предложенная китайцами, из предыдущего поста)
  • Trained LSTM (обученная модель на истории, предсказывает распределение на следующие 22 дня)


Но прежде чем начинать тестирование стратегии, решил я глянуть как вообще работают методы на истории. 
  • Я взял период с 2008 по 2020 годы.
  • Особо не задумываясь о качестве активов выбрал 10 акций: ['MSFT', 'AMD', 'C', 'BA', 'AMZN', 'AAPL','MO', 'AEE', 'AIG', 'WY']
  • Случайным обрзом выбрал 10 стартовых дат и взяли историю из 125 дней.
На этих данных были посчтитаны значения Шарпа для всех методов кроме трениорванной модели и вот такой результат получился:
Битва методов оптимизации портфеля!
Интересно, что LSTM модель на самом деле показывает результаты не хуже остальных методов, а иногда даже лучше. Однако CLA и MeanVariance выглядят более уверенно.

Что ж, убедившись, что с большего у нас есть методы которые опережают случайное распределение активов, я протестировал эти модели на подготовленной стратегии.

Результаты получились следующими:

2008-2010

Битва методов оптимизации портфеля!

Ах да, для классических методов присутствуют 2 теста, один это всегда расчет весов на 125 дня, второй (_cd) это для наколпленных данных, т.е. веча расчитываются на всем прошлом временном периоде. 

Удивительно, но просто LSTM показала просто ужастный результат, а вот тренированная модель опередила всех. 

2011-2017 

Битва методов оптимизации портфеля!

На этом периоде все модели опередили случайное распределение весов активов в портфеле, однака наша натренированная модель, хоть и опередила LSTM, несмогла обойти другин методы. На самом деле тут все методы не слишком уж сильно и опередили рандом. 

ну и еще тест за 2018 по 2021

Битва методов оптимизации портфеля!
Я провел немного больше тестов, так же на других активах, кому интересно возможно посмотрит видео, и мне просмотры на ютубе и вам информация к размышлению



Кому лень смотреть видео, но все же интересно весь код как обычно на гитхабе, даже ссылку вам дам
github.com/CloseToAlgoTrading/CodeFromVideo/tree/master/Episode_20_Battle_Of_Optimization_Methods

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

В целом есть шанс получить неплохую натренированную модель, однако стоит поиграться с фичами и данными. Но как обычно, возможно все результаты просто случайность :). А еще все очень сильно зависит от тех активов которые вы выбираете.

Зы. Может кто определит топив в раздел алготрейдинга. Спасибо. 
★9
43 комментария
Интересно посмотреть сравнение моделей на классах активов — акции, облигации, золото. В качестве активов взять любые 3 дешевых от ETF от Вангарда или Блекрок.
avatar
Sir Dasfig, посмотрите в конце видио, там как раз 4 etfa. С разными активами… Или гляньте results_graphs.ipynb на гитхаб… Последний график. Тест с 2016 по 2021.
И да, полностью согласен что разные типы активов должны быть. Но не так много етф было в 2008 году.
avatar
Интересно когда все в низ политики какая оптимизация будит
avatar
Capital Man, 2008-2010 все вниз было, все продавать надо будет :))
avatar
Понимаю, никто не пойдет видео смотреть %) вот сравнение по ETF.
[SPY, TLT, GLD, IYR]

Benchmark везде SPY






avatar
ничего не  понятно но жутко интересно -))))
Алексей Никитин, как раз все понятно — все методы просрали бенчмарку (индексу широкого рынка ) по всем параметрам. Вот это и должно быть в выводах
avatar
wrmngr, и ни одного пристойного Шарпа. Все — ни о чем. 
avatar
SergeyJu, так а какой вы ожидаете шарп при обычном инвестировании? 
avatar
CloseToAlgoTrading, при «обычном инвестировании» мы получим индекс с дивами за вычетом налогов. А Шарп будет какой Бог пошлет. 
Поэтому я не практикую подобные вещи.
avatar
SergeyJu, ну как раз вывод можно сделать вполне содержательный: все модные распиаренные методы в основном добавляют индекс цитируемости автору, а не реальный value на практике
avatar
wrmngr, это не совсем верно, особенно если смотреть все параметры. 
avatar
CloseToAlgoTrading, не занимайтесь самообманом
avatar
Вопрос:
1. Вы учитываете при тестировании портфеля регулярные пополнения/изъятия, в том числе на случайные величины в приделах диапазона?
2. Что если сравнить модели, скажем, на 3х случайных наборах акций, будет ли стабильный лидер?
3. Будет ли разные лидеры в зависимости от стартовой точки теста?

Если вы все это проверите, и явного лидера не будет наблюдаться в различных вариантах тестов, то это повод серьезно задуматься:)
avatar
Владимир, 1. Нет, не учитывал, мне кажется это лишь усложнит интерпретацию результатов. 
2. Тут уже из разных периодов видно, что лидера явного нет, потому как у всех методов есть некоторые ограничения. По правде говоря, мне кажется применять это все к одному типу активов, не совсем честно. Интересно, что автор HRP в своей книге приводил вроде как некоторые доказательства, что вот этот то медот дает более стабильные результаты, и он более близок к наилучшему распределению, в отличии от CLA где результаты довольно не стабильны. 
3. Как раз таки пост про это, все предыдущие распределения работают так себе. В целом, мы же можем запустить бесконечное число рандомных симуляций и найти тот самый наилучший портфель, и он тоже не даст нам лучшего результата в будущем. Тут масса вопросов, когда перебалансировать портфель, может 22 дня это слишком мало, или много… Сколько истории считать достаточной для выводов о будущем… :)
Конечно всегда можно сказать, что мы как обычно ничего не знаем и весь этот портфельный менеджмент сводится к угадайке.

Цель эксперемента, на показать, что смотрите какой я молодец, вот это грааль. Эксперемент всегда ставится, что бы получить какие-то результаты, и сделать выводы. Правильные или не правильные, в нашем мире покажет только будущее.

Что же касается модели которая предсказывает распределение, если вы гляните код, то там используется только цена закрытия, а уже миллион раз говорилось, что только на этом будущего не узнать. С моделью на самом деле масса проблем, скажем перестановка местами активов для нее является совершенно новыми данными, которые она никак не в состоянии переварить и результат получается так себе. Кроме всего этого, там масса нюансев.
Однако, что мне тут приглянулось, так это динамика. Можно видеть, что натренированная модель улучшает результат своего эталона, метода по которому считались лейблы. 
avatar
CloseToAlgoTrading, что предсказывает эта ваша натренированная модель? Логретурны? Волатильность? Кросс-корреляцию? Все вместе? Это не праздные вопросы, это суть.к тому же демон Шеннона диктует нам первый главный бенчмарк, относительно которого нужно считать excess return модели, и это fixmix портфель с равными весами
avatar
wrmngr, «это fixmix портфель с равными весами» за это кстати спасибо, имеет смысл.
Натренированная модель предсказывает непосредственно веса активов в портфеле. Никакой магии.
avatar
CloseToAlgoTrading, понятно, что веса, но это уже конечный результат, вопрос что перед этим? Если всё смешано, то модель бесполезна, она не имеет интерпретации, и достоверно сломается
avatar
wrmngr, Отчего что то должно быть перед этим? 
на вход подаем данные, на выходе получаем веса активов. Эталонные веса считаются любым методом. Представте, есть гипотиза, есть зависимость между ценовым рядом и распределением средств по активам, вот ее и проверяем. Конечно модель сломается, нет ничего идеального, как вариант можно хоть через день перетренировывать на новые данные. Опять же, я непытаюсь убедить, что она будет отменно работать. Но и не совсем понимаю, зачем нам промежуточные шаги?
avatar
CloseToAlgoTrading, потому что даже один изолированный параметр рынка (любой) чрезвычайно тяжело прогнозировать, а вы замахиваетесь на все сразу. Это полная чушь по факту
avatar
wrmngr, Вы уж меня извините, но с чего вы взяли, что подход по прогнозированию вот этих самых изолировнных параметров не полная чушь по факту?
Вон сколько физиков и математиков тут у нас водится, все уверены что их подход не чушь, но как мы видим никто не показывает достойные ожиданиям смартлаба результаты ;)
avatar
CloseToAlgoTrading, когда делаем прогноз одного параметра, то хотя бы есть теоретическая возможность адекватно оценить прогностическую силу конкретной модели. Если модель прогнозирует все и сразу, то нет бенчмарка в принципе и получаем рафинированный GIGO  
avatar
wrmngr, перефразирую вопрос. Почему вы верите в то, что следует использовать названные вами параметры? 
Модель не прогнозирует все и сразу, модель прогнозирует распределение весов. Зачем предсказывать волатильность, если нам нужно распределение весов? Вы подменяете постановку задачи.
Я уверен вы останетесь при своем мнении :), я лишь хочу сказать, что возможно стоит иногда пробовать нестандартные идеи, раз уж стандартные не работают.


avatar
CloseToAlgoTrading, политика взвешивания компонент портфеля напрямую зависит от этих трех главных параметров. Модель, получающая на вход сырые данные о ретурнах и возвращающая целевой вектор весов неизбежно делает эти прогнозы. Но как и почему — загадка
avatar
wrmngr, Честно говоря я сомневаюсь, что модель внутри как то разбирает данные по компонентам и делает прогнозы о той же волатильности, это мы, люди надеемся что оно там так работает. Но по большому счету у нас просто строится некоторый апроксиматор входный данных на выходные, и в данном случае это может играть нам на руку ибо мы можем упускать какие то скрытые закономерности. Поэтому я более чем уверен, что можно пытаться как то разобрать все на компоненты и решать три отдельные задачи, решение которых возможно будет интерпритируемо и намного более стабильно, но так же можно срезать углы выбирая более простой путь. И тут ведь серая зона, нет подтверждения не первому, ни второму подходу. 
«Но как и почему — загадка» тут я с вами полностью согласен, но как говорится «нам шашечки или ехать» :).
avatar
CloseToAlgoTrading, скрытые закономерности, которые якобы выявляет нейросеть в данном случае безусловное зло, и это к вам придет с опытом
avatar
wrmngr, Что ж, понимать причинно следственные связи дело хорошее, и мало какая система пройдет в продакшен без этого. Но это уже явное отклонение от темы, как ни крути, но работающий черный ящик тоже можно использовать. Согласитесь, это ведь лишь дело выбора, а не опыта, каждый рискует своими деньгами… Хотя некоторые и не своими :)
avatar
CloseToAlgoTrading, спасибо за ответ)
avatar
 Вот добавил равные веса,


Для акций тоже посчитал, в период с 2008 по 2010, неожиданно, портфель с равными весами совпал точь в точь с spy, но только для этого периода, для других отличается чутка.
avatar
Я помню… в году так 12..13 пытались оптимизировать портфели реалтайм на считая видеокартах
avatar
ves2010, не получилось?… А что значит реалтайм, что бы внутри дня проводить ребалансировку или?
avatar
CloseToAlgoTrading, реалтайм это по каждому тику... 
смысл этого я не уловил… но то что делали такое это точно...
возможно пользовали для арбитража или опционной конструкции...

avatar
ves2010, Хм… возможно. 
Шарп я просто для интереса посчитал, уж очень тут все были скептически настроены против придуманного китайцами метода. :) Вот дай думаю проверю. 
avatar
С содержательной точки зрения американские акции весьма однородный набор активов. Кризис 2008 года ударил почти по всем. Пока портфель не умеет проходить кризис на минимуме устойчивых к нему акций, говорить просто не о чем. Поэтому, в портфеле должны присутствовать неоднородные к акциям активы. Например, облигации и золото. 
Возьмите золото, хороший фонд облигаций и хороший фонд акций, или просто спай. И на 3-х компонентах постойте оптимальный портфель. А перед этим подумайте, какой критерий оптимизации и, постройте для нескольких разных.
Узнаете много нового.
avatar
SergeyJu, Да акции в целом все однородны.
Так а чем такой набор то плох? -> SPY, TLT, GLD, IYR
Все что заказывали, акции, бонды, золото, недвижимость. Да и оптимизация по Шарпу выглядит на мой взгляд вполне себе здраво, можно конечно и по доходности и по волатильности отимизировать, да по чему угодно можно. Правда тут есть один момент, что не все методы из готовых пакетов поддерживают разные методы оптимизации, а свои писать это уже лишнее. 

Зы. Может просто поделитесь, что нового узнаю? (пишу без всякого сарказма). Может быть действительно я упускаю какие то важные моменты.
avatar
CloseToAlgoTrading, не люблю фонды недвиги. Но дело не в этом. 
Выиграть у рынка (пусть будет по максимуму Шарпа) можно только тогда, когда есть динамическое перераспределение  весов в портфеле. Раз в год, раз в квартал, раз в месяц или по событиям. Вот схема перераспределения должна содержать какую-то изюминку. Когда актива 3, можно вручную, буквально в Экселе, отследить, что какая схема перераспределения делает. Тогда придет не формальное использование «китайских» формул, а личное понимание, где сидит альфа. 
avatar
SergeyJu, Так эти вот картинки где присутствуют серые, зеленый и красный бары, и есть тест по динамическому перераспределению. В самом коде есть графики, но что то plotly на гитхабе автоматом не отображается, где видно в кой момент какие активы куплены. Для теста я брал распределения раз в месяц. Сравнение скорее делалось между самими методами, нежели попытка обогнать индекс, но это не плохое сравнение, особенно для набора етфов, так как сам индек присутствовал в наборе. 
Если посмотреть на распределение активов, то нейросеть наиболее близка к CLA, остальные методы довольно похожи между собой.
«Китайская» формула, это не формула :), это оптимизация шарпа как минимизация функции ошибки для нейросети (инвертированный шарп).

По поводу динамического перераспределения, то тут уж очень важен период, и как мне кажется его возможно не стоит привязывать к фиксированным периодам, ну или сперва попытаться найти тот который бы всем устраивал. Я взял 22 дня просто как ориентир. Если брать 5 дней, резултат получался хуже, и это все без учета комиссий. 
avatar
CloseToAlgoTrading, прочитайте топики МадКванта про его систему динамического перераспределения весов активов. Вначале он писал более-менее подробно.
avatar
SergeyJu, Спасибо, гляну.
Моя цель пока выглядит как обучить RL агента это делать. Но для этого нужна правильная енвайромент и что еще более важно определение вознаграждений… но это другая тема :)
avatar
CloseToAlgoTrading, не надо все так усложнять. 
Приведу пример. Фонд акция vs фонд облигаций. Берем 50 на 50. 
Переоценка каждый день.
Если пакет акций на ХХХ % дороже или дешевле пакета облиг, продаем того, кого больше, покупаем того, кого меньше так, чтобы пакеты сравнялись. 
Для реализации такого алгоритма достаточно 6 столбцов в Экселе.  Или 20 строк на бэйсике или питоне, пофиг. Хоть на си++. И никаких агентов!
Учет транзакционных издержек тривиален. А XXX в диапазоне 10-20% попробуйте. ВСЕ! 
А с агентами Вам экскаватор потребуется, хотя всего-то и нужно накопать с десяток червяков на рыбалку. 
avatar
SergeyJu, Всегда удивляли такие утвеждения. Вы же так не делаете, зачем советуете?
вот SPY,TLT с 2007 по текущий день

Обратите внимание, что шарп почки как у самого SPY, а вот прибыль то поменьше будет. 

Зы. что то не нашел я у мэдкванта полезностей, он там сигналы постит от некоторой системы перераспределения активов в которую лучше не вмешиваться, как он сам написал в первом посте о ней. Но хз может надо было еще искать :).
avatar
CloseToAlgoTrading, боюсь, что Вы просто невнимательны. 
avatar

теги блога CloseToAlgoTrading

....все тэги



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