Чтобы получить эффективные портфели, которые имеют целевые возвраты портфеля, estimateFrontierByReturn
функция принимает один или несколько целевых возвратов портфелей и получает эффективные портфели с заданными возвратами. Например, предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми возвратами портфеля 6%, 9% и 12%:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); pwgt = estimateFrontierByReturn(p, [0.06, 0.09, 0.12]); display(pwgt)
pwgt = 0.8772 0.5032 0.1293 0.0434 0.2488 0.4541 0.0416 0.0780 0.1143 0.0378 0.1700 0.3022
Иногда можно запросить возврат, для которого не существует эффективного портфеля. На основе предыдущего примера предположим, что требуется портфель с доходностью 5% (что является возвратом первого актива). Портфель, который полностью вложен в первый актив, однако, неэффективен. estimateFrontierByReturn
предупреждает, если ваша целевая доходность находится вне области значений эффективных портфельных возвратов, и заменяет ее на портфель конечных точек наиболее близкого к вашей целевой доходности эффективного рубежа:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); pwgt = estimateFrontierByReturn(p, [0.05, 0.09, 0.12]); display(pwgt)
Warning: One or more target return values are outside the feasible range [ 0.0590468, 0.18 ]. Will return portfolios associated with endpoints of the range for these values. > In Portfolio.estimateFrontierByReturn at 70 pwgt = 0.8891 0.5032 0.1293 0.0369 0.2488 0.4541 0.0404 0.0780 0.1143 0.0336 0.1700 0.3022
estimateFrontierLimits
и estimatePortReturn
(см. «Получение конечных точек эффективной границы и получение портфельных рисков и возвратов»).pret = estimatePortReturn(p, p.estimateFrontierLimits); display(pret)
pret = 0.0590 0.1800
Если у вас есть начальный портфель, estimateFrontierByReturn
также возвращает покупки и продажи, чтобы получить от вашего начального портфеля к целевым портфелям на эффективной границе. Для примера, учитывая начальный портфель в pwgt0
, для получения покупок и продаж с целевыми возвратами 6%, 9% и 12%:
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = setInitPort(p, pwgt0); [pwgt, pbuy, psell] = estimateFrontierByReturn(p, [0.06, 0.09, 0.12]); display(pwgt) display(pbuy) display(psell)
pwgt = 0.8772 0.5032 0.1293 0.0434 0.2488 0.4541 0.0416 0.0780 0.1143 0.0378 0.1700 0.3022 pbuy = 0.5772 0.2032 0 0 0 0.1541 0 0 0 0 0.0700 0.2022 psell = 0 0 0.1707 0.2566 0.0512 0 0.1584 0.1220 0.0857 0.0622 0 0
0
.
estimateFrontier
| estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierByRisk
| estimateFrontierLimits
| estimateMaxSharpeRatio
| estimatePortMoments
| estimatePortReturn
| estimatePortRisk
| Portfolio
| setSolver