Оцените конкретное количество оптимальных портфелей на границе эффективности
[
оценивает конкретное количество оптимальных портфелей на границе эффективности для 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.14301 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.16981 0.29588 0.42214 0.49999 0.5
{'HPQ' } 0 0 0 0 0
{'IBM' } 0.49592 0.43629 0.37308 0.35699 0
{'INTC'} 0 0 0 0 0
{'MSFT'} 0.33426 0.26783 0.20478 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
объект, цель оптимизации портфеля содержит термин с абсолютным значением. Для получения дополнительной информации о том, как Financial Toolbox™ обрабатывает такие случаи алгоритмически, смотрите Ссылки.
[1] Cornuejols, G. и Р. Тутанку. Методы оптимизации в финансах. Издательство Кембриджского университета, 2007.
estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierLimits
| setBounds
| setMinMaxNumAssets
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.