Существует два способа рассмотрения проблемы оптимизации портфеля, которая зависит от того, что вы пытаетесь сделать. Одна цель заключается в оценке эффективных портфелей, а другая - в оценке эффективных границ. В этом разделе рассматривается первая цель, а в разделе Оценка эффективных границ для объекта CCVaR - вторая цель. Сведения о рабочем процессе при использовании объектов CCVaR см. в разделе Рабочий процесс объектов CCVaR.
Наиболее основным способом получения оптимальных портфелей является получение баллов по всему спектру эффективных границ. Учитывая проблему оптимизации портфеля в PortfolioCVaR объект, estimateFrontier функция вычисляет эффективные портфели, равномерно распределенные в соответствии с прокси возврата от минимального до максимального эффективного возврата портфелей. Количество оцениваемых портфелей контролируется скрытым имуществом defaultNumPorts для которого установлено значение 10. Другое значение для количества оцененных портфелей указывается в качестве входных данных для estimateFrontier. В этом примере показано количество эффективных портфелей по умолчанию для всего диапазона эффективных границ:
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 ];
m = m/12;
C = C/12;
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);
pwgt = estimateFrontier(p);
disp(pwgt)Columns 1 through 8
0.8670 0.7046 0.5421 0.3825 0.2236 0.0570 0.0000 0.0000
0.0413 0.1193 0.1963 0.2667 0.3392 0.4159 0.3392 0.1753
0.0488 0.0640 0.0811 0.1012 0.1169 0.1427 0.1568 0.1754
0.0429 0.1120 0.1806 0.2496 0.3203 0.3844 0.5040 0.6493
Columns 9 through 10
0.0000 0.0000
0.0230 0.0000
0.1777 0.0000
0.7993 1.0000 pwgt = estimateFrontier(p, 4); disp(pwgt)
0.8670 0.3825 0.0000 0.0000 0.0413 0.2667 0.3392 0.0000 0.0488 0.1012 0.1568 0.0000 0.0429 0.2496 0.5040 1.0000
Начиная с первоначального портфеля, estimateFrontier также возвращает покупки и продажи, чтобы получить от вашего первоначального портфеля к каждому эффективному портфелю на эффективной границе. Например, с учетом первоначального портфеля в pwgt0, вы можете получить покупки и продажи:
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = setInitPort(p, pwgt0); [pwgt, pbuy, psell] = estimateFrontier(p); display(pwgt) display(pbuy) display(psell)
pwgt =
Columns 1 through 8
0.8670 0.7046 0.5421 0.3825 0.2236 0.0570 0.0000 0.0000
0.0413 0.1193 0.1963 0.2667 0.3392 0.4159 0.3392 0.1753
0.0488 0.0640 0.0811 0.1012 0.1169 0.1427 0.1568 0.1754
0.0429 0.1120 0.1806 0.2496 0.3203 0.3844 0.5040 0.6493
Columns 9 through 10
0.0000 0.0000
0.0230 0.0000
0.1777 0.0000
0.7993 1.0000
pbuy =
Columns 1 through 8
0.5670 0.4046 0.2421 0.0825 0 0 0 0
0 0 0 0 0.0392 0.1159 0.0392 0
0 0 0 0 0 0 0 0
0 0.0120 0.0806 0.1496 0.2203 0.2844 0.4040 0.5493
Columns 9 through 10
0 0
0 0
0 0
0.6993 0.9000
psell =
Columns 1 through 8
0 0 0 0 0.0764 0.2430 0.3000 0.3000
0.2587 0.1807 0.1037 0.0333 0 0 0 0.1247
0.1512 0.1360 0.1189 0.0988 0.0831 0.0573 0.0432 0.0246
0.0571 0 0 0 0 0 0 0
Columns 9 through 10
0.3000 0.3000
0.2770 0.3000
0.0223 0.2000
0 00. estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | PortfolioCVaR | setSolver