Оптимизация инвестиционных портфелей
“Количественные финансы”

Салихов Марсель ()

2020-02-04

Цели лекции

Риск и доходность

Гарри Марковиц (Harry Markowitz) – основатель современной портфельной теории

Корреляция и ковариация двух активов – пример

Пусть у нас есть акции компаний - А и Б. Доходность акций компании А имеет проциклический характер, то есть растет, когда экономика на подъеме.

Доходность Б носит антициклический характер – уменьшается, когда экономика на подъеме, но растет, когда наступает спад.

Предположим, что у нас есть следующее распределение доходностей в зависимости от состояния экономики:

Таблица. Предполагаемая доходность для акций компаний А и Б

Состояние экономики Вероятность Доходность А Доходность Б
Подъем 0,33 0,385 -0,225
Нормальное 0,33 0,140 0,02
Спад 0,33 -0,105 0,265

Таблица. Расчет ожидаемой доходности для акций А

Доходность Отклонение от ожид. доходности Отклонение в квадрате
Подъем 0,385 0,245 0,060
Нормальное 0,140 0,000 0,000
Спад -0,105 -0,245 0,060

Ожидаемая доходность = 1/3 (0,385 - 0,14 - 0,105) = 0,14

Дисперсия = 1/3 (0,060 + 0 + 0,060) = 0,04

Стандартное отклонение = 0,20

Таблица. Расчет ожидаемой доходности для акций Б

Доходность Отклонение от ожид. доходности Отклонение в квадрате
Подъем -0,225 -0,245 0,060
Нормальное 0,020 0,000 0,000
Спад 0,265 0,245 0,060

Ожидаемая доходность = 1/3 (-0,225 + 0,2 + 0,265) = 0,02

Дисперсия = 1/3 (0,060 + 0 + 0,060) = 0,04

Стандартное отклонение = 0,20

Доходность портфеля из двух акций А и Б

Пусть у нас есть 100 тыс. рублей, который мы поровну распределили между акциями А и Б (по 50 тыс. рублей).

Какова ожидаемая доходность и стандартное отклонение этого портфеля?

Таблица. Доходность портфеля из акций А и Б

Состояние экономики Доходность А Доходность Б Доход от 50 тыс. рублей вложенных в А Доход от 50 тыс. рублей вложенных в Б Доход портфеля (50% А и 50% Б)
Подъем 0,385 -0,225 69,25 38,75 108,00
Нормальное 0,140 0,020 57,00 51,00 108,00
Спад -0,105 0,265 44,75 63,25 108,00

Результат – независимо от состояния экономики доходность портфеля составляет 8%, стандартное отклонение = 0.

Любой риск исключен!

Ковариация и корреляция А и Б

Этот результат – полное исключение риска - связан с тем, что активы А и Б имеют абсолютную отрицательную корреляцию =-1.

Таблица. Ковариация и корреляция А и Б

Состояние экономики Отклонение от ожид. доходности А Отклонение от ожид. доходности Б Произведение отклонений доходности
Подъем 0,245 -0,245 -0,060025
Нормальное 0,000 0,000 0
Спад -0,245 0,245 -0,060025

Ковариация = 1/3(-0,060025 + 0 + 0,060025) = -0,04

Корреляция = -0,04/(0,20 * 0,20) = -1

Ковариация и корреляция доходностей

\[\sigma_{1,2} = \sum p_i (X_1 - E(X_1))(X_2 - E(X_2)) \]

Корреляция – нормированная на произведение стандартных доходностей ковариация.

\[\rho = \frac{\sigma_{1,2}}{\sigma_1 \sigma_2} \]

Безрисковый актив

Портфель безрискового актива и единственного рискового актива

Какую часть от 100 тыс. рублей вам следует вложить в рисковый актив?

Пример расчета соотношений доходности и риска при разных долях в рисковом активе:

Таблица. Комбинация риск/доходность для портфеля из рискового и безрискового актива

Вариант портфеля Доля портфеля в рисковом активе Доля портфеля в безрисковом активе Ожидаемая доходность Ст. отклонение
А 0% 100% 8% 0%
Б 25% 75% 10% 5%
С 50% 50% 11% 10%
E 75% 25% 13% 15%
D 100% 0% 14% 20%

Формула для расчета ожидаемой доходности портфеля:

\[ E(r) = w E(r_s) + (1-w)r_f = r_f + w[E(r_s) - r_f] \] где \(w\) – доля портфеля в рисковом активе.

Если вы выразим \(w\), тогда получим

\[w = \frac{E(r) - r_f}{E(r_s) - r_f}\] Стандартное отклонение портфеля, состоящего из безрискового актива и рискового актива, равно произведению стандартного отклонения рискового актива на его долю в портфеле.

\[\sigma = \sigma_s w \]

Кривая риск/доходность - портфель из безрискового и рискового активов

Построим в R график риск/доходность портфеля для разных вариантов w:

rf = 0.08 # безрисковая доходность 
r1 <- 0.14 # доходность рискового актива
sd1 <- 0.20 # ст. отклонение рискового актива
w <- seq(0,1, length.out = 200)

r_p <- w*r1 + (1-w)*rf
sd_p <- w*sd1

plot(sd_p, r_p, type = 'l', ylim = c(0,0.14), xlim = c(0,0.20),  xaxs="i", col = 'red',lwd = 2,
     main = 'Кривая риск/доходность - портфель из безрискового и рискового активов',
     xlab = 'Стандартное отклонение портфеля', ylab = 'Доходность портфеля')

Соотношение риск/доходность для портфеля из безрискового актива и рискового актива предоставляет собой прямую линию.

Пересечение линии с нулем по оси х – безрисковая ставка.

Наклон линии – \(\frac{E(r_s)-r_f}{\sigma_s}\).

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

Портфель из двух рисковых активов

Рассмотрим ситуацию, когда в портфеле есть два вида рисковых активов.

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

Ожидаемая доходность портфеля будет равна:

\[ E(r) = w E(r_1) + (1-w) E(r_2) \] формула дисперсии будет выглядеть следующим образом:

\[\sigma^2 = w^2\sigma_1^2 + (1-w)^2\sigma_2^2 + 2w(1-w)\rho \sigma_1 \sigma_2 \] (её можно вывести из обычного определения дисперсии).

Преимущества диверсификации

Важно: дисперсия портфеля зависит от корреляции между активами, в то время как ожидаемая доходность не зависит от нее.

Если мы предположим, что \(\rho = 1\), тогда

\[\sigma = w \sigma_1 + (1-w) \sigma_2 \] То есть, риск портфеля является взвешенной комбинацией рисков актива 1 и актива 2.

Однако в реальности \(\rho < 1\). Это означает, что риск портфеля будет меньше средневзвешенной комбинации рисков отдельных активов в портфеле. Это и есть преимущества диверсификации – возможность уменьшить риск без снижения ожидаемой доходности.

Распределение ожидаемых доходностей для рисковых активов двух видов

Пусть у нас имеется два рисковых актива (1 и 2). Параметры распределения их доходностей представлены в таблице:

Таблица. Распределение ожидаемых доходностей для рисковых активов двух видов

Актив 1 Актив 2
Cреднее 0,14 0,08
Стандартное отклонение 0,20 0,15
Корреляция 0,00 0,00

Рассмотрим соотношение риск/доходность для портфеля, который состоит из активов 1 и 2 в разных соотношениях.

** Таблица. Риск-доходость портфеля при разных соотношениях рисковых активов в портфеле**

Портфель Доля в активе 1 Доля в активе 2 Ожидаемая доходность Ст. отклонение
А 0 100% 0,0800 0,1500
Б 25% 75% 0,0950 0,1231
min variance 36% 64% 0,1016 0,1200
С 50% 50% 0,1100 0,1250
D 100% 0% 0,1400 0,2000

Кривая риск/доходность для портфеля из двух рисковых активов

Построим кривую риск-доходность для такого портфеля в R:

r1 <- 0.14
r2 <- 0.08
sd1 <- 0.20
sd2 <- 0.15
rho <- 0

w <- seq(0,1,length.out = 500)
r_p2 <- w*r1 +(1-w)*r2
sd_p2 <- sqrt(w^2*sd1^2 + (1-w)^2*sd2^2 + 2*w*(1-w)*rho*sd1*sd2)

plot(sd_p2, r_p2,type = 'l', xlim = c(0, 0.21), ylim = c(0.0575, 0.145),  xaxs="i", col = 'black',lwd = 2,
     main = 'Кривая риск/доходность - портфель из двух рисковых активов',
     xlab = 'Стандартное отклонение портфеля', ylab = 'Доходность портфеля')
points(x = 0.12, y = 0.1016, pch = 19)
text(x = 0.12, y = 0.1016, labels = 'Портфель с минимальной дисперсией', adj = -0.1)

Оптимальная комбинация рискованных активов

Теперь рассмотрим комбинации риск/доходность в ситуации, когда мы можем объединить безрисковый актив и активы 1 и 2.

В нашем случае это точка, которой соответствует w = 69,23% (доля рискованного актива 1) в портфеле. Это означает, что для такого портфеля: \(E(r_p) = 0,122\), а \(\sigma = 0,146\).

Показатель Шарпа

Показатель Шарпа равен:

\[\frac{E(R_p) - r_f}{\sigma_p} \]

Оптимальный портфель из безрискового и рисковых активов

Влияние корреляции на уровень риска портфеля

Эффективный портфель со множестом рисковых активов

\[w^T \Sigma w - q R^Tw \rightarrow min\] где

Мы можем использовать численные методы, чтобы найти оптимальные значения весов. Обычно используют методы квадратичного программирования, которые позволяют находить экстремумы квадратичных функций при заданных линейных ограничениях. В R можно использовать функцию solve.QP из пакета quadprog.

Портфель – Газпром, Сбербанк и Норникель, Магнит и МТС

Рассмотрим портфель из акций 5 российских компаний из разных отраслей.

Loading required package: xts
Warning: package 'xts' was built under R version 3.6.2
Loading required package: zoo

Attaching package: 'zoo'
The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

Attaching package: 'PerformanceAnalytics'
The following object is masked from 'package:graphics':

    legend
Loading required package: data.table

Attaching package: 'data.table'
The following objects are masked from 'package:xts':

    first, last

Примечание: в данном случае мы не учитываем выплаченне дивиденды в доходностях.

Доходность и риск

Рассчитаем показатели доходности и риска (стандартного отклонения) с помощью функций из пакета PerformanceAnalytics.

library(PerformanceAnalytics)
Return.annualized(rtns, geometric = FALSE)
                        GAZP      SBER      GMKN         MGNT       MTSS
Annualized Return 0.02057122 0.1228863 0.1350664 -0.002274552 0.04355345

Максимальная доходность (% в год) у Сбербанка (12,3%), у Магнита - минимальная доходность (около 0% за период в год).

StdDev.annualized(rtns, geometric = FALSE)
                                   GAZP      SBER      GMKN      MGNT      MTSS
Annualized Standard Deviation 0.2578339 0.3192436 0.2830405 0.3207232 0.2821095

Показатели риска максимальны у акций Сбербанка (32,0%), минимальны – у акций Газпрома.

График риск/доходность

Отобразим полученные сочетания риск-доходность для 5 бумаг на графике:

r <- Return.annualized(rtns, geometric = FALSE)
sd <- StdDev.annualized(rtns, geometric = FALSE)
tab <- cbind(round(as.numeric(r),2),round(as.numeric(sd),2), names(rtns))
tab <- as.data.frame(tab)
tab[,1] <- as.numeric(as.character((tab[,1])))
tab[,2] <- as.numeric(as.character((tab[,2])))
names(tab) <- c('Доходность' ,'Волатильность', 'Тикер')

require(ggplot2)
Loading required package: ggplot2
p <- ggplot(tab, aes(x = Волатильность, y = Доходность, label = Тикер))
p + geom_point()+geom_text(check_overlap = TRUE, vjust  = -1)+
   theme_bw()+
   ggtitle('Cоотношение риск/доходность для 5 бумаг')

Матрица ковариаций

cov(rtns)
             GAZP         SBER         GMKN         MGNT         MTSS
GAZP 0.0002638029 0.0001885060 1.129597e-04 0.0001102452 1.329534e-04
SBER 0.0001885060 0.0004044304 1.264577e-04 0.0001426970 1.682525e-04
GMKN 0.0001129597 0.0001264577 3.179044e-04 0.0000969705 9.763143e-05
MGNT 0.0001102452 0.0001426970 9.697050e-05 0.0004081879 1.217378e-04
MTSS 0.0001329534 0.0001682525 9.763143e-05 0.0001217378 3.158166e-04

Матрица корреляций

cor(rtns)
          GAZP      SBER      GMKN      MGNT      MTSS
GAZP 1.0000000 0.5771165 0.3900634 0.3359616 0.4606194
SBER 0.5771165 1.0000000 0.3526754 0.3512069 0.4707846
GMKN 0.3900634 0.3526754 1.0000000 0.2691915 0.3081229
MGNT 0.3359616 0.3512069 0.2691915 1.0000000 0.3390610
MTSS 0.4606194 0.4707846 0.3081229 0.3390610 1.0000000

Расчет эффективной границы портфеля

eff <- eff.frontier(returns=rtns, short="no", max.allocation=.50,
                    risk.premium.up=10, risk.increment=.01)

head(eff)
       GAZP       SBER      GMKN      MGNT      MTSS   Std.Dev Exp.Return
1 0.2964305 0.02216109 0.2755310 0.1794940 0.2263834 0.2029129 0.05548771
2 0.2804189 0.03633911 0.2891005 0.1709855 0.2231560 0.2029898 0.05861219
3 0.2644073 0.05051713 0.3026700 0.1624770 0.2199285 0.2032206 0.06173666
4 0.2483958 0.06469514 0.3162395 0.1539686 0.2167011 0.2036046 0.06486113
5 0.2323842 0.07887316 0.3298089 0.1454601 0.2134736 0.2041410 0.06798560
6 0.2163726 0.09305118 0.3433784 0.1369517 0.2102462 0.2048286 0.07111008
     sharpe
1 0.2734559
2 0.2887444
3 0.3037914
4 0.3185642
5 0.3330326
6 0.3471687
# Find the optimal portfolio
eff.optimal.point <- eff[eff$sharpe==max(eff$sharpe),]
round(eff.optimal.point,2)
    GAZP SBER GMKN MGNT MTSS Std.Dev Exp.Return sharpe
474    0  0.5  0.5    0    0    0.25       0.13   0.52
475    0  0.5  0.5    0    0    0.25       0.13   0.52
478    0  0.5  0.5    0    0    0.25       0.13   0.52
480    0  0.5  0.5    0    0    0.25       0.13   0.52
491    0  0.5  0.5    0    0    0.25       0.13   0.52

Эффективная граница

График эффективной границы

Warning: Ignoring unknown aesthetics: label

Отметим отдельные бумаги на графике:

p + geom_point(data = tab, aes(x= Волатильность, y = Доходность))+
  geom_text(data = tab, aes(x= Волатильность, y = Доходность,label = Тикер), vjust = -1)

Эффективный портфель с короткими позициями

Рассмотрим эффективный портфель, в котором разрешены короткие позиции. Это означает, что некоторые веса могут быть отрицательными.

eff2 <- eff.frontier(returns=rtns, short="yes", max.allocation=.50,
                    risk.premium.up=10, risk.increment=.01)

# Find the optimal portfolio
eff.optimal.point2 <- eff2[eff2$sharpe==max(eff2$sharpe),]
round(eff.optimal.point2,2)
    GAZP SBER GMKN MGNT MTSS Std.Dev Exp.Return sharpe
48 -0.14  0.5  0.5 -0.1 0.24    0.25       0.14   0.54

Оптимальный портфель с короткими позициями предлагает нам занять короткую позицию по Газпрома и Магнита, по другим – длинные позиции.

Риск-доходность портфеля с короткими позициями

Warning: Ignoring unknown aesthetics: label

Разрешение занимать короткие позиции позволило повысить доходность портфеля, но и повысило уровень риска. Однако к-т Шарпа для этого портфеля больше (0,77 вместо 0,63).

Ограничение оптимизации портфелей по риск-доходности

  1. Все оценки доходности и риска, которые мы делали, основывались на исторических данных. Мы использовали выборочные значения доходностей, дисперсий и ковариационной матрицы (корряляции активов) и предполагали, чтоб они хорошо отражают ожидаемые значения. Это достаточно большое количетсво параметров. Как показывает практика, классифические портфели по Марковицу, максимизирующие показатель Шарпа, являются нестабильными. Существуют другие методы, которые позволяют оценивать ковариационную матрицу, к примеру, метод Ледуа-Вульфа ( Ledoit-Wolf, 2003 ). По сути это shrinkage метод, который "стабилизирует ковариационную матрицу – возвращает экстремальные значения корряляций к центральным значениям.
  2. Можно также использовать другие методы для оценок ожидаемых доходностей вместо выборочных исторических доходностей. Одним из таких методов является метод Джеймса-Стайна ( James–Stein estimator, 1961), который также основан на идее shrinkage.
  3. В классическом варианте оптимизации по Марковицу, мы предполагаем, что доходности имеют нормальное распределение – полностью описываются средним и стандартным отклонением. Однако мы знаем, что доходности не распределены нормально. Есть методы, которые позволяют обойти эти ограничения.

Оптимальный портфель из ETF, торгующихся на Московской Бирже

Global Minimum Variance Portfolio (GMVP) – портфель, минимизирующий риск портфеля.

Maximum Sharpe Ratio Portfolio (MSRP) – портфель, максимизирующий доходность портфеля, скорректированную на его риск (по Марковицу).

Cписок использованных источников

  1. “Statistics and Data Analysis for Financial Engineering” (David Ruppert & David Matteson)
  2. Analyzing Financial Data and Implementing Financial Models Using R (Clifford Ang).
  3. “Introduction to Modern Portfolio Theory”
  4. “Computing Efficient Portfolios” (Eric Zivot)
  5. Ledoit, Olivier, and Michael Wolf. “Honey, I shrunk the sample covariance matrix.” (2003).