Для получения эффективных портфелей, которые имеют целевые портфельные риски, estimateFrontierByRisk функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с указанными рисками. Предположим, что у вас есть набор из четырех активов, где вы хотите получить эффективные портфели с целевым риском портфеля в 12%, 14% и 16%.
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 = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]);
display(pwgt)pwgt =
0.3984 0.2659 0.1416
0.3064 0.3791 0.4474
0.0882 0.1010 0.1131
0.2071 0.2540 0.2979Иногда можно запросить риск, для которого не существует эффективного портфеля. На основании предыдущего примера предположим, что вам нужен портфель с 7% риском (отдельные активы в этой вселенной имеют риски в диапазоне от 8% до 35%). Получается, что портфель с 7% риском не может формироваться с этими четырьмя активами. estimateFrontierByRisk предупреждает, находятся ли ваши целевые риски вне диапазона эффективных портфельных рисков, и заменяет его конечной точкой эффективной границы, ближайшей к вашему целевому риску:
pwgt = estimateFrontierByRisk(p, 0.07)
Warning: One or more target risk values are outside the feasible range [ 0.0769288, 0.35 ].
Will return portfolios associated with endpoints of the range for these values.
> In Portfolio.estimateFrontierByRisk at 82
pwgt =
0.8891
0.0369
0.0404
0.0336estimateFrontierLimits и estimatePortRisk (см. Получение конечных точек эффективной границы и получение портфельных рисков и возвратов).prsk = estimatePortRisk(p, p.estimateFrontierLimits); display(prsk)
prsk =
0.0769
0.3500Начиная с первоначального портфеля, estimateFrontierByRisk также возвращает покупки и продажи, чтобы получить из первоначального портфеля в целевые портфели на эффективной границе. Например, с учетом первоначального портфеля в pwgt0, вы можете получить покупки и продажи из примера с целевыми рисками 12%, 14% и 16%:
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = setInitPort(p, pwgt0); [pwgt, pbuy, psell] = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]); display(pwgt) display(pbuy) display(psell)
pwgt =
0.3984 0.2659 0.1416
0.3064 0.3791 0.4474
0.0882 0.1010 0.1131
0.2071 0.2540 0.2979
pbuy =
0.0984 0 0
0.0064 0.0791 0.1474
0 0 0
0.1071 0.1540 0.1979
psell =
0 0.0341 0.1584
0 0 0
0.1118 0.0990 0.0869
0 0 00.
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierLimits | estimateMaxSharpeRatio | estimatePortMoments | estimatePortReturn | estimatePortRisk | Portfolio | setSolver