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

Салихов Марсель (marcel.salikhov@gmail.com)

2017-01-30

Цели лекции

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

Гарри Марковиц (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 российских компаний из разных отраслей.

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

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

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

library(PerformanceAnalytics)
Return.annualized(rtns, geometric = FALSE)
                       GAZP      SBER      GMKN      MGNT       MTSS
Annualized Return -0.035557 0.1488761 0.1239381 0.2493263 0.06276878

Максимальная доходность (% в год) у Магнита (24,9%), у Газпрома – средняя отрицательная доходность за период (-3,56%).

StdDev.annualized(rtns, geometric = FALSE)
                                   GAZP      SBER    GMKN     MGNT
Annualized Standard Deviation 0.3852141 0.4705597 0.43746 0.405139
                                   MTSS
Annualized Standard Deviation 0.3826478

Показатели риска максимальны у акций Сбербанка (47,1%), минимальны – у акций МТС.

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

Отобразим полученные сочетания риск-доходность для 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)

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.0005888488 0.0005362251 0.0004293117 0.0001960058 0.0003921397
SBER 0.0005362251 0.0008786762 0.0004694840 0.0002636085 0.0004666510
GMKN 0.0004293117 0.0004694840 0.0007594098 0.0001878189 0.0003555880
MGNT 0.0001960058 0.0002636085 0.0001878189 0.0006513398 0.0002056891
MTSS 0.0003921397 0.0004666510 0.0003555880 0.0002056891 0.0005810292

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

cor(rtns)
          GAZP      SBER      GMKN      MGNT      MTSS
GAZP 1.0000000 0.7454712 0.6419966 0.3164924 0.6704092
SBER 0.7454712 1.0000000 0.5747359 0.3484505 0.6530986
GMKN 0.6419966 0.5747359 1.0000000 0.2670530 0.5353158
MGNT 0.3164924 0.3484505 0.2670530 1.0000000 0.3343555
MTSS 0.6704092 0.6530986 0.5353158 0.3343555 1.0000000

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

+Мы используем функция eff.frontier, которая позволяет находить веса бумаг, максмизирующая показатель Шарпа портфеля. + Она также позволяет задавать ограничения на значения весов. Если не допускается существование коротких позиций в портфеле, то каждый из весов должен быть больше или равен 0. + Мы также можем задать максимальную долю одной бумаги в портфеле (аргумент max.allocation), с тем, чтобы уменьшить концентрацию портфеля.

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
1 0.2183478 -1.387779e-17 0.1440682 0.3730937 0.2644904 0.3042235
2 0.1967043 -1.387779e-17 0.1531857 0.3845301 0.2655799 0.3043027
3 0.1750609  0.000000e+00 0.1623033 0.3959665 0.2666694 0.3045402
4 0.1534174  0.000000e+00 0.1714209 0.4074028 0.2677589 0.3049356
5 0.1317740 -6.938894e-18 0.1805384 0.4188392 0.2688484 0.3054882
6 0.1101305  0.000000e+00 0.1896560 0.4302756 0.2699379 0.3061973
  Exp.Return    sharpe
1  0.1197155 0.3935118
2  0.1245349 0.4092468
3  0.1293543 0.4247527
4  0.1341737 0.4400066
5  0.1389930 0.4549865
6  0.1438124 0.4696723
# 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
58    0 0.23 0.27  0.5    0    0.33       0.19   0.58

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

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

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

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
57 -0.98  0.5  0.5  0.5 0.48    0.43       0.33   0.77

Оптимальный портфель с короткими позициями предлагает нам занять короткую позицию по Газпром в размере всего портфеля (-98%), все остальные бумаги имеют примерно в равных долях.

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

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

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

  1. Все оценки доходности и риска, которые мы делали, основывались на исторических данных. Мы знаем, что подобная оптимизация сработала бы в прошлом, но не факт, что она сработает в будущем.
  2. В классическом варианте оптимизации по Марковицу, мы предполагаем, что доходности имеют нормальное распределение – полностью описываются средним и стандартным отклонением. Однако мы знаем, что доходности не распределены нормально. Есть методы, которые позволяют обойти эти ограничения.
  3. Оценки ковариаций могут быть не устойчивы во времени (в зависимости от выбора периода анализа и проч.). Можно использовать более сложные методы оценки ковариации, которые будут более устойчивыми.

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)