Оценка заданного количества оптимальных портфелей на эффективной границе
[
оценивает заданное количество оптимальных портфелей на эффективной границе для pwgt
,pbuy
,psell
]
= estimateFrontier(obj
)Portfolio
, PortfolioCVaR
, или PortfolioMAD
объекты. Для получения дополнительной информации о соответствующих рабочих процессах при использовании этих различных объектов смотрите Рабочий процесс объекта портфеля, Рабочий процесс объекта PortfolioCVaR и Рабочий процесс объекта PortfolioMAD.
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
The 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
-by- NumPorts
матрица. pwgt
возвращается на Portfolio
, PortfolioCVaR
, или PortfolioMAD
входной объект (obj
).
pbuy
- Покупки относительно начального портфеля для оптимальных портфелей на эффективной границе Покупки относительно начального портфеля для оптимальных портфелей на эффективной границе, возвращенные как NumAssets
-by- NumPorts
матрица.
Примечание
Если начальный портфель не задан в obj.InitPort
, это значение принято как 0
таким образом pbuy = max(0, pwgt)
и psell = max(0, -pwgt)
.
pbuy
возвращается на Portfolio
, PortfolioCVaR
, или PortfolioMAD
входной объект (obj
).
psell
- Продажи относительно начального портфеля для оптимальных портфелей на эффективной границе Продажи относительно начального портфеля для оптимальных портфелей на эффективной границе, возвращенные как NumAssets
-by- 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
объект, цель оптимизации портфеля содержит член с абсолютным значением. Для получения дополнительной информации о том, как Financial Toolbox™ обрабатывает такие случаи алгоритмически, смотрите Ссылки.
[1] Cornuejols, G., and R. Tutuncu. Методы оптимизации в финансах. Cambridge University Press, 2007.
estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierLimits
| setBounds
| setMinMaxNumAssets
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.