Салихов Марсель (marcel.salikhov@gmail.com)
2017-01-30
Пусть у нас есть акции компаний - А и Б. Доходность акций компании А имеет проциклический характер, то есть растет, когда экономика на подъеме.
Доходность Б носит антициклический характер – уменьшается, когда экономика на подъеме, но растет, когда наступает спад.
Предположим, что у нас есть следующее распределение доходностей в зависимости от состояния экономики:
Таблица. Предполагаемая доходность для акций компаний А и Б
Состояние экономики | Вероятность | Доходность А | Доходность Б |
---|---|---|---|
Подъем | 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).