Оценка указанного количества оптимальных портфелей на эффективной границе
[ оценивает указанное количество оптимальных портфелей на эффективной границе для pwgt,pbuy,psell] = estimateFrontier(obj)Portfolio, PortfolioCVaR, или PortfolioMAD объекты. Для получения подробной информации о соответствующих рабочих процессах при использовании этих различных объектов см. Workflow-процесс объекта портфеля, Workflow-процесс объекта Portfolio CVaR и Workflow-процесс объекта Portfolio MAD.
Portfolio Объект и определение эффективных портфелейСоздание эффективных портфелей:
load CAPMuniverse p = Portfolio('AssetList',Assets(1:12)); p = estimateAssetMoments(p, Data(:,1:12),'missingdata',true); p = setDefaultConstraints(p); plotFrontier(p);

pwgt = estimateFrontier(p, 5); pnames = cell(1,5); for i = 1:5 pnames{i} = sprintf('Port%d',i); end Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList); disp(Blotter);
Port1 Port2 Port3 Port4 Port5
AAPL 0.017926 0.058247 0.097816 0.12955 0
AMZN 0 0 0 0 0
CSCO 0 0 0 0 0
DELL 0.0041906 0 0 0 0
EBAY 0 0 0 0 0
GOOG 0.16144 0.35678 0.55228 0.75116 1
HPQ 0.052566 0.032302 0.011186 0 0
IBM 0.46422 0.36045 0.25577 0.11928 0
INTC 0 0 0 0 0
MSFT 0.29966 0.19222 0.082949 0 0
ORCL 0 0 0 0 0
YHOO 0 0 0 0 0
Portfolio Объект с BoundType и MaxNumAssets Ограничения и определение эффективных портфелейСоздать Portfolio объект для 12 акций на основе CAPMuniverse.mat.
load CAPMuniverse p0 = Portfolio('AssetList',Assets(1:12)); p0 = estimateAssetMoments(p0, Data(:,1:12),'missingdata',true); p0 = setDefaultConstraints(p0);
Использовать setMinMaxNumAssets для определения максимального количества 3 основных средств.
p1 = setMinMaxNumAssets(p0, [], 3);
Использовать setBounds для определения нижней и верхней границы и BoundType из 'Conditional'.
p1 = setBounds(p1, 0.1, 0.5,'BoundType', 'Conditional'); pwgt = estimateFrontier(p1, 5);
В следующей таблице показано, что оптимизированные распределения имеют только 3 инвестированных актива, и небольшие позиции менее 0,1 исключаются.
result = table(p0.AssetList', pwgt)
result=12×2 table
Var1 pwgt
________ ___________________________________________________
{'AAPL'} 0 0 0 0.14308 0
{'AMZN'} 0 0 0 0 0
{'CSCO'} 0 0 0 0 0
{'DELL'} 0 0 0 0 0
{'EBAY'} 0 0 0 0 0.5
{'GOOG'} 0.16979 0.29587 0.42213 0.49998 0.5
{'HPQ' } 0 0 0 0 0
{'IBM' } 0.49602 0.4363 0.37309 0.35694 0
{'INTC'} 0 0 0 0 0
{'MSFT'} 0.33419 0.26783 0.20479 0 0
{'ORCL'} 0 0 0 0 0
{'YHOO'} 0 0 0 0 0
estimateFrontier для решения этой проблемы функция использует решатель MINLP. Используйте setSolverMINLP для конфигурирования SolverType и варианты.
p1.solverTypeMINLP
ans = 'OuterApproximation'
p1.solverOptionsMINLP
ans = struct with fields:
MaxIterations: 1000
AbsoluteGapTolerance: 1.0000e-07
RelativeGapTolerance: 1.0000e-05
NonlinearScalingFactor: 1000
ObjectiveScalingFactor: 1000
Display: 'off'
CutGeneration: 'basic'
MaxIterationsInactiveCut: 30
ActiveCutTolerance: 1.0000e-07
IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
NumIterationsEarlyIntegerConvergence: 30
Создание эффективных портфелей:
load CAPMuniverse p = PortfolioCVaR('AssetList',Assets(1:12)); p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.95); plotFrontier(p);

pwgt = estimateFrontier(p, 5); pnames = cell(1,5); for i = 1:5 pnames{i} = sprintf('Port%d',i); end Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList); disp(Blotter);
Port1 Port2 Port3 Port4 Port5
AAPL 0.010562 0.07364 0.11931 0.13073 0
AMZN 0 0 0 0 0
CSCO 0 0 0 0 0
DELL 0.022649 0 0 0 0
EBAY 0 0 0 0 0
GOOG 0.203 0.38011 0.56202 0.75919 1
HPQ 0.042772 0.0094711 0 0 0
IBM 0.44444 0.36456 0.26305 0.11009 0
INTC 0 0 0 0 0
MSFT 0.27658 0.17222 0.055624 0 0
ORCL 0 0 0 0 0
YHOO 0 0 0 0 0
PortfolioMAD Объект и определение эффективных портфелейСоздание эффективных портфелей:
load CAPMuniverse p = PortfolioMAD('AssetList',Assets(1:12)); p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true); p = setDefaultConstraints(p); plotFrontier(p);

pwgt = estimateFrontier(p, 5); pnames = cell(1,5); for i = 1:5 pnames{i} = sprintf('Port%d',i); end Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList); disp(Blotter);
Port1 Port2 Port3 Port4 Port5
AAPL 0.029787 0.076199 0.11265 0.13397 0
AMZN 0 0 0 0 0
CSCO 0 0 0 0 0
DELL 0.0089177 0 0 0 0
EBAY 0 0 0 0 0
GOOG 0.16094 0.3516 0.54479 0.74898 1
HPQ 0.056856 0.023073 0 0 0
IBM 0.46074 0.37919 0.29379 0.11705 0
INTC 0 0 0 0 0
MSFT 0.28277 0.16994 0.048762 0 0
ORCL 0 0 0 0 0
YHOO 0 0 0 0 0
Получите количество эффективных портфелей по умолчанию для всего диапазона эффективных границ.
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 = estimateFrontier(p);
disp(pwgt); Columns 1 through 7
0.8891 0.7215 0.5540 0.3865 0.2190 0.0515 0
0.0369 0.1289 0.2209 0.3129 0.4049 0.4969 0.4049
0.0404 0.0567 0.0730 0.0893 0.1056 0.1219 0.1320
0.0336 0.0929 0.1521 0.2113 0.2705 0.3297 0.4630
Columns 8 through 10
0 0 0
0.2314 0.0579 0
0.1394 0.1468 0
0.6292 0.7953 1.0000
Начиная с первоначального портфеля, estimateFrontier функция возвращает покупки и продажи, чтобы получить от первоначального портфеля к каждому эффективному портфелю на эффективной границе. Учитывая первоначальный портфель в pwgt0, вы можете получить покупки и продажи.
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);
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ];
p = setInitPort(p, pwgt0);
[pwgt, pbuy, psell] = estimateFrontier(p);
display(pwgt);pwgt = 4×10
0.8891 0.7215 0.5540 0.3865 0.2190 0.0515 0 0 0 0
0.0369 0.1289 0.2209 0.3129 0.4049 0.4969 0.4049 0.2314 0.0579 0
0.0404 0.0567 0.0730 0.0893 0.1056 0.1219 0.1320 0.1394 0.1468 0
0.0336 0.0929 0.1521 0.2113 0.2705 0.3297 0.4630 0.6292 0.7953 1.0000
display(pbuy);
pbuy = 4×10
0.5891 0.4215 0.2540 0.0865 0 0 0 0 0 0
0 0 0 0.0129 0.1049 0.1969 0.1049 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0.0521 0.1113 0.1705 0.2297 0.3630 0.5292 0.6953 0.9000
display(psell);
psell = 4×10
0 0 0 0 0.0810 0.2485 0.3000 0.3000 0.3000 0.3000
0.2631 0.1711 0.0791 0 0 0 0 0.0686 0.2421 0.3000
0.1596 0.1433 0.1270 0.1107 0.0944 0.0781 0.0680 0.0606 0.0532 0.2000
0.0664 0.0071 0 0 0 0 0 0 0 0
Получите количество эффективных портфелей по умолчанию для всего диапазона эффективных границ.
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;
rng(11);
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 7
0.8451 0.6849 0.5159 0.3541 0.1903 0.0323 0
0.0613 0.1429 0.2291 0.3165 0.3983 0.4721 0.3528
0.0451 0.0634 0.0944 0.1082 0.1340 0.1580 0.1736
0.0485 0.1089 0.1606 0.2213 0.2775 0.3376 0.4736
Columns 8 through 10
0 0 0
0.1804 0 0
0.1918 0.2212 0
0.6277 0.7788 1.0000
Функция rng() сбрасывает генератор случайных чисел для получения документированных результатов. Нет необходимости сбрасывать генератор случайных чисел для моделирования сценариев.
Начиная с первоначального портфеля, estimateFrontier функция возвращает покупки и продажи, чтобы получить от первоначального портфеля к каждому эффективному портфелю на эффективной границе. Учитывая первоначальный портфель в pwgt0, вы можете получить покупки и продажи.
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;
rng(11);
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ];
p = setInitPort(p, pwgt0);
[pwgt, pbuy, psell] = estimateFrontier(p);
display(pwgt);pwgt = 4×10
0.8451 0.6849 0.5159 0.3541 0.1903 0.0323 0 0 0 0
0.0613 0.1429 0.2291 0.3165 0.3983 0.4721 0.3528 0.1804 0 0
0.0451 0.0634 0.0944 0.1082 0.1340 0.1580 0.1736 0.1918 0.2212 0
0.0485 0.1089 0.1606 0.2213 0.2775 0.3376 0.4736 0.6277 0.7788 1.0000
display(pbuy);
pbuy = 4×10
0.5451 0.3849 0.2159 0.0541 0 0 0 0 0 0
0 0 0 0.0165 0.0983 0.1721 0.0528 0 0 0
0 0 0 0 0 0 0 0 0.0212 0
0 0.0089 0.0606 0.1213 0.1775 0.2376 0.3736 0.5277 0.6788 0.9000
display(psell);
psell = 4×10
0 0 0 0 0.1097 0.2677 0.3000 0.3000 0.3000 0.3000
0.2387 0.1571 0.0709 0 0 0 0 0.1196 0.3000 0.3000
0.1549 0.1366 0.1056 0.0918 0.0660 0.0420 0.0264 0.0082 0 0.2000
0.0515 0 0 0 0 0 0 0 0 0
Функция rng() сбрасывает генератор случайных чисел для получения документированных результатов. Нет необходимости сбрасывать генератор случайных чисел для моделирования сценариев.
Получите количество эффективных портфелей по умолчанию для всего диапазона эффективных границ.
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;
rng(11);
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
pwgt = estimateFrontier(p);
disp(pwgt); Columns 1 through 7
0.8817 0.7150 0.5488 0.3812 0.2167 0.0494 0
0.0431 0.1285 0.2127 0.2993 0.3832 0.4679 0.3599
0.0387 0.0604 0.0826 0.1047 0.1237 0.1480 0.1799
0.0366 0.0961 0.1559 0.2148 0.2763 0.3348 0.4601
Columns 8 through 10
0 0 0
0.1758 0 0
0.2091 0.2266 0
0.6151 0.7734 1.0000
Функция rng() сбрасывает генератор случайных чисел для получения документированных результатов. Нет необходимости сбрасывать генератор случайных чисел для моделирования сценариев.
Начиная с первоначального портфеля, estimateFrontier функция возвращает покупки и продажи, чтобы получить от первоначального портфеля к каждому эффективному портфелю на эффективной границе. Учитывая первоначальный портфель в pwgt0, вы можете получить покупки и продажи.
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;
rng(11);
AssetScenarios = mvnrnd(m, C, 20000);
p = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ];
p = setInitPort(p, pwgt0);
[pwgt, pbuy, psell] = estimateFrontier(p);
display(pwgt);pwgt = 4×10
0.8817 0.7150 0.5488 0.3812 0.2167 0.0494 0 0 0 0
0.0431 0.1285 0.2127 0.2993 0.3832 0.4679 0.3599 0.1758 0 0
0.0387 0.0604 0.0826 0.1047 0.1237 0.1480 0.1799 0.2091 0.2266 0
0.0366 0.0961 0.1559 0.2148 0.2763 0.3348 0.4601 0.6151 0.7734 1.0000
display(pbuy);
pbuy = 4×10
0.5817 0.4150 0.2488 0.0812 0 0 0 0 0 0
0 0 0 0 0.0832 0.1679 0.0599 0 0 0
0 0 0 0 0 0 0 0.0091 0.0266 0
0 0 0.0559 0.1148 0.1763 0.2348 0.3601 0.5151 0.6734 0.9000
display(psell);
psell = 4×10
0 0 0 0 0.0833 0.2506 0.3000 0.3000 0.3000 0.3000
0.2569 0.1715 0.0873 0.0007 0 0 0 0.1242 0.3000 0.3000
0.1613 0.1396 0.1174 0.0953 0.0763 0.0520 0.0201 0 0 0.2000
0.0634 0.0039 0 0 0 0 0 0 0 0
Функция rng() сбрасывает генератор случайных чисел для получения документированных результатов. Нет необходимости сбрасывать генератор случайных чисел для моделирования сценариев.
obj - Объект для портфеляОбъект для портфеля, указанный с помощью Portfolio, PortfolioCVaR, или PortfolioMAD объект. Дополнительные сведения о создании объекта портфеля см. в разделе
Типы данных: object
NumPorts - Количество точек для получения на эффективной границе defaultNumPorts (значение по умолчанию: 10) (по умолчанию) | скалярное целое числоЧисло точек для получения на эффективной границе, указанное как скалярное целое число.
Примечание
Если значение не указано для NumPorts, значение по умолчанию получается из скрытого свойства defaultNumPorts (значение по умолчанию: 10). Если NumPorts = 1, эта функция возвращает портфель, указанный скрытым свойством defaultFrontierLimit (текущее значение по умолчанию - 'min').
Типы данных: double
pwgt - Оптимальные портфели на эффективной границе с заданным количеством портфелей, распределенных поровну от минимальной до максимальной доходности портфеляОптимальные портфели на эффективной границе с определенным количеством портфелей, распределенных поровну от минимальной до максимальной доходности портфеля, возвращаемых в виде NumAssetsоколо-NumPorts матрица. pwgt возвращается для Portfolio, PortfolioCVaR, или PortfolioMAD входной объект (obj).
pbuy - Закупки по отношению к первоначальному портфелю для оптимальных портфелей на эффективной границе Закупки по отношению к первоначальному портфелю для оптимальных портфелей на эффективной границе, возвращенные как NumAssetsоколо-NumPorts матрица.
Примечание
Если исходный портфель не указан в obj.InitPort, это значение принимается равным 0 такой, что pbuy = max(0, pwgt) и psell = max(0, -pwgt).
pbuy возвращается для Portfolio, PortfolioCVaR, или PortfolioMAD входной объект (obj).
psell - Продажи по отношению к первоначальному портфелю для оптимального портфеля на эффективной границе Продажи по отношению к первоначальному портфелю для оптимальных портфелей на эффективной границе, возвращаемые как NumAssetsоколо-NumPorts матрица.
Примечание
Если исходный портфель не указан в obj.InitPort, это значение принимается равным 0 такой, что pbuy = max(0, pwgt) и psell = max(0, -pwgt).
psell возвращается для Portfolio, PortfolioCVaR, или PortfolioMAD входной объект (obj).
Можно также использовать точечную нотацию для оценки указанного количества оптимальных портфелей по всей эффективной границе.
[pwgt, pbuy, psell] = obj.estimateFrontier(NumPorts);
При введении операционных издержек и ограничений оборота для Portfolio, PortfolioCVaR, или PortfolioMAD объект, цель оптимизации портфеля содержит член с абсолютным значением. Дополнительные сведения о том, как Финансовый Toolbox™ обрабатывает такие случаи алгоритмически, см. в разделе Ссылки.
[1] Корнеджолс, Г. и Р. Тутунку. Методы оптимизации в Финансах. Издательство Кембриджского университета, 2007 год.
estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierLimits | setBounds | setMinMaxNumAssets
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.