Всем привет,
Не смотря на то, что многие люди довольно скептически отнеслись к китайской идее напрямую оптимизировать значение шарпа и подберать веса для активов используя 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
В ноутбуках еще можно посмотреть как распределяются активы в течении периода тестирования для различных методов, тоже довольно интересная информация на мой взгляд.
В целом есть шанс получить неплохую натренированную модель, однако стоит поиграться с фичами и данными. Но как обычно, возможно все результаты просто случайность :). А еще все очень сильно зависит от тех активов которые вы выбираете.
Зы. Может кто определит топив в раздел алготрейдинга. Спасибо.
И да, полностью согласен что разные типы активов должны быть. Но не так много етф было в 2008 году.
[SPY, TLT, GLD, IYR]
Benchmark везде SPY
Поэтому я не практикую подобные вещи.
1. Вы учитываете при тестировании портфеля регулярные пополнения/изъятия, в том числе на случайные величины в приделах диапазона?
2. Что если сравнить модели, скажем, на 3х случайных наборах акций, будет ли стабильный лидер?
3. Будет ли разные лидеры в зависимости от стартовой точки теста?
Если вы все это проверите, и явного лидера не будет наблюдаться в различных вариантах тестов, то это повод серьезно задуматься:)
2. Тут уже из разных периодов видно, что лидера явного нет, потому как у всех методов есть некоторые ограничения. По правде говоря, мне кажется применять это все к одному типу активов, не совсем честно. Интересно, что автор HRP в своей книге приводил вроде как некоторые доказательства, что вот этот то медот дает более стабильные результаты, и он более близок к наилучшему распределению, в отличии от CLA где результаты довольно не стабильны.
3. Как раз таки пост про это, все предыдущие распределения работают так себе. В целом, мы же можем запустить бесконечное число рандомных симуляций и найти тот самый наилучший портфель, и он тоже не даст нам лучшего результата в будущем. Тут масса вопросов, когда перебалансировать портфель, может 22 дня это слишком мало, или много… Сколько истории считать достаточной для выводов о будущем… :)
Конечно всегда можно сказать, что мы как обычно ничего не знаем и весь этот портфельный менеджмент сводится к угадайке.
Цель эксперемента, на показать, что смотрите какой я молодец, вот это грааль. Эксперемент всегда ставится, что бы получить какие-то результаты, и сделать выводы. Правильные или не правильные, в нашем мире покажет только будущее.
Что же касается модели которая предсказывает распределение, если вы гляните код, то там используется только цена закрытия, а уже миллион раз говорилось, что только на этом будущего не узнать. С моделью на самом деле масса проблем, скажем перестановка местами активов для нее является совершенно новыми данными, которые она никак не в состоянии переварить и результат получается так себе. Кроме всего этого, там масса нюансев.
Однако, что мне тут приглянулось, так это динамика. Можно видеть, что натренированная модель улучшает результат своего эталона, метода по которому считались лейблы.
Натренированная модель предсказывает непосредственно веса активов в портфеле. Никакой магии.
на вход подаем данные, на выходе получаем веса активов. Эталонные веса считаются любым методом. Представте, есть гипотиза, есть зависимость между ценовым рядом и распределением средств по активам, вот ее и проверяем. Конечно модель сломается, нет ничего идеального, как вариант можно хоть через день перетренировывать на новые данные. Опять же, я непытаюсь убедить, что она будет отменно работать. Но и не совсем понимаю, зачем нам промежуточные шаги?
Вон сколько физиков и математиков тут у нас водится, все уверены что их подход не чушь, но как мы видим никто не показывает достойные ожиданиям смартлаба результаты ;)
Модель не прогнозирует все и сразу, модель прогнозирует распределение весов. Зачем предсказывать волатильность, если нам нужно распределение весов? Вы подменяете постановку задачи.
Я уверен вы останетесь при своем мнении :), я лишь хочу сказать, что возможно стоит иногда пробовать нестандартные идеи, раз уж стандартные не работают.
«Но как и почему — загадка» тут я с вами полностью согласен, но как говорится «нам шашечки или ехать» :).
Для акций тоже посчитал, в период с 2008 по 2010, неожиданно, портфель с равными весами совпал точь в точь с spy, но только для этого периода, для других отличается чутка.
смысл этого я не уловил… но то что делали такое это точно...
возможно пользовали для арбитража или опционной конструкции...
Шарп я просто для интереса посчитал, уж очень тут все были скептически настроены против придуманного китайцами метода. :) Вот дай думаю проверю.
Возьмите золото, хороший фонд облигаций и хороший фонд акций, или просто спай. И на 3-х компонентах постойте оптимальный портфель. А перед этим подумайте, какой критерий оптимизации и, постройте для нескольких разных.
Узнаете много нового.
Так а чем такой набор то плох? -> SPY, TLT, GLD, IYR
Все что заказывали, акции, бонды, золото, недвижимость. Да и оптимизация по Шарпу выглядит на мой взгляд вполне себе здраво, можно конечно и по доходности и по волатильности отимизировать, да по чему угодно можно. Правда тут есть один момент, что не все методы из готовых пакетов поддерживают разные методы оптимизации, а свои писать это уже лишнее.
Зы. Может просто поделитесь, что нового узнаю? (пишу без всякого сарказма). Может быть действительно я упускаю какие то важные моменты.
Выиграть у рынка (пусть будет по максимуму Шарпа) можно только тогда, когда есть динамическое перераспределение весов в портфеле. Раз в год, раз в квартал, раз в месяц или по событиям. Вот схема перераспределения должна содержать какую-то изюминку. Когда актива 3, можно вручную, буквально в Экселе, отследить, что какая схема перераспределения делает. Тогда придет не формальное использование «китайских» формул, а личное понимание, где сидит альфа.
Если посмотреть на распределение активов, то нейросеть наиболее близка к CLA, остальные методы довольно похожи между собой.
«Китайская» формула, это не формула :), это оптимизация шарпа как минимизация функции ошибки для нейросети (инвертированный шарп).
По поводу динамического перераспределения, то тут уж очень важен период, и как мне кажется его возможно не стоит привязывать к фиксированным периодам, ну или сперва попытаться найти тот который бы всем устраивал. Я взял 22 дня просто как ориентир. Если брать 5 дней, резултат получался хуже, и это все без учета комиссий.
Моя цель пока выглядит как обучить RL агента это делать. Но для этого нужна правильная енвайромент и что еще более важно определение вознаграждений… но это другая тема :)
Приведу пример. Фонд акция vs фонд облигаций. Берем 50 на 50.
Переоценка каждый день.
Если пакет акций на ХХХ % дороже или дешевле пакета облиг, продаем того, кого больше, покупаем того, кого меньше так, чтобы пакеты сравнялись.
Для реализации такого алгоритма достаточно 6 столбцов в Экселе. Или 20 строк на бэйсике или питоне, пофиг. Хоть на си++. И никаких агентов!
Учет транзакционных издержек тривиален. А XXX в диапазоне 10-20% попробуйте. ВСЕ!
А с агентами Вам экскаватор потребуется, хотя всего-то и нужно накопать с десяток червяков на рыбалку.
вот SPY,TLT с 2007 по текущий день
Обратите внимание, что шарп почки как у самого SPY, а вот прибыль то поменьше будет.
Зы. что то не нашел я у мэдкванта полезностей, он там сигналы постит от некоторой системы перераспределения активов в которую лучше не вмешиваться, как он сам написал в первом посте о ней. Но хз может надо было еще искать :).