Чтобы получить эффективные портфели, которые имеют целевые возвраты портфеля, estimateFrontierByReturn функция принимает один или несколько целевых возвратов портфеля и получает эффективные портфели с заданными возвратами. Например, предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми возвратами портфеля 7%, 10% и 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 ];
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);
pwgt = estimateFrontierByReturn(p, [0.07, 0.10, .12]);
display(pwgt)pwgt =
0.7526 0.3773 0.1306
0.1047 0.3079 0.4348
0.0662 0.1097 0.1426
0.0765 0.2051 0.2920Иногда можно запросить возврат, для которого не существует эффективного портфеля. На основе предыдущего примера предположим, что требуется портфель с доходностью 4% (которая является возвратом первого актива). Портфель, который полностью вложен в первый актив, однако, неэффективен. estimateFrontierByReturn предупреждает, если ваша целевая доходность находится вне области значений эффективных портфельных возвратов, и заменяет ее на портфель конечных точек наиболее близкого к вашей целевой доходности эффективного рубежа:
pwgt = estimateFrontierByReturn(p, [0.04]);
Warning: One or more target return values are outside the feasible range [ 0.066388, 0.178834 ]. Will return portfolios associated with endpoints of the range for these values. > In PortfolioCVaR.estimateFrontierByReturn at 93
estimateFrontierLimits и estimatePortReturn (см. «Получение конечных точек эффективной границы и получение портфельных рисков и возвратов CVaR»).pret = estimatePortReturn(p, p.estimateFrontierLimits); display(pret)
pret =
0.0664
0.1788Если у вас есть начальный портфель, estimateFrontierByReturn также возвращает покупки и продажи, чтобы получить от вашего начального портфеля к целевым портфелям на эффективной границе. Для примера, учитывая начальный портфель в pwgt0, для получения покупок и продаж с целевыми возвратами 7%, 10% и 12%:
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = setInitPort(p, pwgt0); [pwgt, pbuy, psell] = estimateFrontierByReturn(p, [0.07, 0.10, .12]); display(pwgt) display(pbuy) display(psell)
pwgt =
0.7526 0.3773 0.1306
0.1047 0.3079 0.4348
0.0662 0.1097 0.1426
0.0765 0.2051 0.2920
pbuy =
0.4526 0.0773 0
0 0.0079 0.1348
0 0 0
0 0.1051 0.1920
psell =
0 0 0.1694
0.1953 0 0
0.1338 0.0903 0.0574
0.0235 0 00.
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | PortfolioCVaR | setSolver