Оцените конкретное количество оптимальных портфелей на границе эффективности
[pwgt,pbuy,psell]
= estimateFrontier(obj)
[pwgt,pbuy,psell]
= estimateFrontier(obj,NumPorts)
[
оценивает конкретное количество оптимальных портфелей на границе эффективности для 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.010984 0.073247 0.11937 0.13068 0 AMZN 1.7632e-38 0 0 4.4451e-23 0 CSCO 0 0 -1.7632e-38 2.2226e-23 0 DELL 0.022454 0 0 8.8625e-22 0 EBAY 0 0 0 2.6671e-22 0 GOOG 0.20335 0.38055 0.56241 0.75932 1 HPQ 0.041725 0.0099217 0 5.0008e-23 0 IBM 0.44482 0.36453 0.2628 0.11 0 INTC 7.3468e-40 2.351e-38 0 1.7781e-22 0 MSFT 0.27667 0.17175 0.055424 4.4451e-23 0 ORCL 0 1.4106e-37 0 1.1113e-23 0 YHOO 0 0 0 4.8691e-22 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.030223 0.075387 0.11279 0.13456 0 AMZN 1.7513e-21 0 0 2.9507e-23 0 CSCO 4.7098e-22 0 2.7217e-21 2.2868e-22 0 DELL 0.0088968 0 0 3.6883e-24 0 EBAY 0 6.375e-23 1.6312e-23 2.9507e-23 0 GOOG 0.16119 0.35202 0.54487 0.74888 1 HPQ 0.056534 0.02405 0 3.0567e-22 0 IBM 0.45909 0.37889 0.29384 0.11656 0 INTC -1.8808e-37 0 6.5246e-24 0 0 MSFT 0.28406 0.16965 0.048509 3.6883e-23 0 ORCL 1.9575e-22 2.2491e-23 7.2782e-22 0 0 YHOO 6.0477e-22 0 3.7185e-22 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.8454 0.6847 0.5154 0.3541 0.1901 0.0314 0 0.0599 0.1427 0.2302 0.3165 0.3980 0.4733 0.3513 0.0463 0.0639 0.0938 0.1079 0.1345 0.1583 0.1756 0.0485 0.1087 0.1606 0.2215 0.2773 0.3371 0.4731 Columns 8 through 10 0.0000 0.0000 0 0.1806 0 0 0.1916 0.2212 0 0.6278 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.8454 0.6847 0.5154 0.3541 0.1901 0.0314 0 0.0000 0.0000 0
0.0599 0.1427 0.2302 0.3165 0.3980 0.4733 0.3513 0.1806 0 0
0.0463 0.0639 0.0938 0.1079 0.1345 0.1583 0.1756 0.1916 0.2212 0
0.0485 0.1087 0.1606 0.2215 0.2773 0.3371 0.4731 0.6278 0.7788 1.0000
display(pbuy);
pbuy = 4×10
0.5454 0.3847 0.2154 0.0541 0 0 0 0 0 0
0 0 0 0.0165 0.0980 0.1733 0.0513 0 0 0
0 0 0 0 0 0 0 0 0.0212 0
0 0.0087 0.0606 0.1215 0.1773 0.2371 0.3731 0.5278 0.6788 0.9000
display(psell);
psell = 4×10
0 0 0 0 0.1099 0.2686 0.3000 0.3000 0.3000 0.3000
0.2401 0.1573 0.0698 0 0 0 0 0.1194 0.3000 0.3000
0.1537 0.1361 0.1062 0.0921 0.0655 0.0417 0.0244 0.0084 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.8816 0.7151 0.5488 0.3817 0.2170 0.0499 0.0000 0.0430 0.1282 0.2128 0.2981 0.3824 0.4662 0.3609 0.0389 0.0604 0.0826 0.1053 0.1241 0.1492 0.1786 0.0365 0.0963 0.1559 0.2149 0.2764 0.3348 0.4605 Columns 8 through 10 0.0000 0.0000 0 0.1755 0 0 0.2095 0.2266 0 0.6150 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.8816 0.7151 0.5488 0.3817 0.2170 0.0499 0.0000 0.0000 0.0000 0
0.0430 0.1282 0.2128 0.2981 0.3824 0.4662 0.3609 0.1755 0 0
0.0389 0.0604 0.0826 0.1053 0.1241 0.1492 0.1786 0.2095 0.2266 0
0.0365 0.0963 0.1559 0.2149 0.2764 0.3348 0.4605 0.6150 0.7734 1.0000
display(pbuy);
pbuy = 4×10
0.5816 0.4151 0.2488 0.0817 0 0 0 0 0 0
0 0 0 0 0.0824 0.1662 0.0609 0 0 0
0 0 0 0 0 0 0 0.0095 0.0266 0
0 0 0.0559 0.1149 0.1764 0.2348 0.3605 0.5150 0.6734 0.9000
display(psell);
psell = 4×10
0 0 0 0 0.0830 0.2501 0.3000 0.3000 0.3000 0.3000
0.2570 0.1718 0.0872 0.0019 0 0 0 0.1245 0.3000 0.3000
0.1611 0.1396 0.1174 0.0947 0.0759 0.0508 0.0214 0 0 0.2000
0.0635 0.0037 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. и Р. Тутанку. Методы оптимизации в финансах. Издательство Кембриджского университета, 2007.
estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierLimits
| setBounds
| setMinMaxNumAssets
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.