Для получения эффективных портфелей, имеющих целевые портфельные риски, 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 ];
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
pwgt = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]);
display(pwgt)pwgt =
0.2102 0.0621 0
0.3957 0.4723 0.4305
0.1051 0.1204 0.1291
0.2889 0.3452 0.4404Иногда можно запросить риск, для которого нет эффективного портфеля. Основываясь на предыдущем примере, предположим, что вы хотите портфель с 6% риском (отдельные активы в этой вселенной имеют риски в диапазоне от 7% до 42,5%). Получается, что портфель с 6% -ным риском не может быть сформирован с этими четырьмя активами. estimateFrontierByRisk предупреждает, находятся ли ваши целевые риски вне области значений эффективных портфельных рисков, и заменяет его конечной точкой наиболее близкой к вашему целевому риску эффективной границы:
pwgt = estimateFrontierByRisk(p, 0.06)
Warning: One or more target risk values are outside the feasible range [
0.0610574, 0.278711 ].
Will return portfolios associated with endpoints of the range for these values.
> In PortfolioMAD.estimateFrontierByRisk at 82
pwgt =
0.8867
0.0396
0.0404
0.0332estimateFrontierLimits и estimatePortRisk (см. Получение конечных точек эффективной границы и оценка эффективных границ для объекта PortfolioMAD).prsk = estimatePortRisk(p, p.estimateFrontierLimits); display(prsk)
prsk =
0.0611
0.2787Начиная с начального портфеля, 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.2102 0.0621 0
0.3957 0.4723 0.4305
0.1051 0.1204 0.1291
0.2889 0.3452 0.4404
pbuy =
0 0 0
0.0957 0.1723 0.1305
0 0 0
0.1889 0.2452 0.3404
psell =
0.0898 0.2379 0.3000
0 0 0
0.0949 0.0796 0.0709
0 0 00.
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | PortfolioMAD | setSolver