Краткое описание портфельной теории Марковица: при известных доходностях, волатильностях и корреляциях набора активов, есть формула, по которой можно собрать портфель с минимальным риском. В качестве риска можно выбрать любую желаемую функцию: шарп, волатильность или что угодно. Марковиц получил за эту работу Нобелевскую премию в 1990 году.
Недостатки: поскольку модель строится на исторических данных, она может давать плохие результаты в будущем в резко меняющихся рынках.
Из любопытства, а не как инструкция к применению, попробую рассчитать на Питоне весы для портфеля из SPX, MOEX, золота и биткоина, с помощью теории Марковица. Цены всех активов перевожу в доллары. Для расчета весов в портфеле по Марковицу использую готовый пакет PyPortfolioOpt.
Вот код:
gist.github.com/IgorKuch/5d177109b4fcd2a9b0cca0e9870d5e93
Результат зависит от интервала lookback, за который берутся исторические данные. ChatGPT порекомендовал 3 года. Буду использовать скользящее окно и шаг 1 месяц, чтобы показать динамику расчетных весов портфеля во времени.

С параметром lookback=3 года, на февраль 2025 модель рекомендует вложить 70% в золото, 25% в SPX и 5% в биткоин. В MOEX за последние два года не рекомендовала вкладываться вообще.
Посчитаю матрицу корреляции между активами за последние 3 года:

Интересна высокая корреляция между BTC и SPY, целых 42%; поэтому модель отводит меньшую долю в BTC в портфеле, предпочитая SPY.
Попробую lookback=2 года.

На настоящий момент рекомендует 20% биткоин, 20% золото и 60% SPY. По сравнению с lookback = 3 года поменялись местами золото и SPY. Очень интересно, что на начало 2024 модель рекомендовала закупиться золотом на 100%. MOEX опять по нулям. Корреляция:

… я подумал, что вкралась какая-то ошибка в расчет для MOEX, но нет, если взять lookback=1 год, рекомендуемая доля MOEX будет ненулевая, но всё равно незначительная.

Интересно посчитать историческую доходность, когда портфель перекладывается каждый месяц по Марковицу, для разных параметров lookback. Ваши ставки, какой параметр даст большую доходность? Мне lookback = 2 нравится больше.
Очень странные результаты для lookback=3 года. Золото и Биток берутся с большим весом после диапазона/даунтренда, затем их доля доводится до 0 перед ралли того и другого.
2 года выглядит более адекватным. Такая разновидность моментума.
Именно так, в расчетах для Моех ошибка из-за того, что значение курса usd_try на 16 марта 2023 вместо 75 равно 5. После добавления в строку 38:
Модель начинает иногда (очень мало) назначать часть аллокации в МОЕХ (с лукбеком 2 года):
Если убрать МОЕХ из тикеров (везде станет по 500 баров) результат будет такой:
Eth_algotrader, спасибо за комментарий!
Подход рабочий, я его сейчас применяю для своих долгосрочных инвестиций, но оптимизирую не по Шарпу, а по волатильности. То есть, активы выбираю по другим соображениям (макроэкономическим), а вот доли между ними распределяю по Марковицу.
За 2025 у меня годовая волатильность портфеля 10%, а Шарп около 3 (это в турецких лирах и с безрисковой ставкой, равной турецкому депозиту) — считаю, отличный результат.
А портфель собираете в том же пакете, только вместо ef.max_sharpe() выбираете ef.min_volatility()?
Вообще миллион же есть способов измерять волатильность… отдельная тема для исследования.
Eth_algotrader, да, формально это ef.min_volatility(), но я в итоге отказался от пакета pypfopt, и реализую вычисления с нуля. Плюс в том, что я не связан функциями пакета, и могу запрограммировать любую логику. Выглядит это как-то так:
gist.github.com/IgorKuch/2c053644dafd0f6676380ab78a4ecf6aEth_algotrader, я тоже полюбил волатильность.
В том же Марковице есть несколько модификаций, которые позволяют учитывать ожидаемую, а не историческую, доходность (например, есть сложный подход Black–Litterman, использующий байесовскую модель для ожидаемых доходностей — этот подход реализован в pypfopt, если я правильно помню).
Но есть серия статей, показыващих, что на практике простой подход с минимизацией волатильности часто бьёт сложные подходы с доходностью — в том числе бьёт по индикаторам, учитывающим доходность (например, по Шарпу).
Я уже не говорю про то, что чем меньше волатильность, тем меньше ожидаемая просадка, и психологически легче не запаниковать и не закрыть в самый неподходящий момент.
Там же основано на субъективных оценках. А они почти всегда будут скакать вверх-вниз следом за последними доходностями (т.е. это не более чем лин.рег за последние год-два, грубо говоря). Такое себе. Любой субъективизм рано или поздно сводится к повторению общего сантимента.
>Но есть серия статей, показыващих, что на практике простой подход с минимизацией волатильности часто бьёт сложные подходы с доходностью — в том числе бьёт по индикаторам, учитывающим доходность (например, по Шарпу).
Покидаете ссылок?