Для получения эффективных портфелей, которые имеют целевую доходность портфеля, 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.3022estimateFrontierLimits и 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 00.
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimateMaxSharpeRatio | estimatePortMoments | estimatePortReturn | estimatePortRisk | Portfolio | setSolver