在有效边界上估计指定数量的最优投资组合
投资组合
目标和确定有效的投资组合创建有效的投资组合:
负载CAPMuniversep =投资组合(“AssetList”、资产(1:12));p = estimateAssetMoments(p, Data(:,1:12),“missingdata”,真正的);p = setDefaultConstraints(p);plotFrontier (p);
pwgt = estimateFrontier(p, 5);Pnames = cell(1,5);为I = 1:5 pnames{I} = sprintf(的端口% d ',我);结束Blotter = dataset([{pwgt},pnames],“obsnames”, p.AssetList);disp(流水帐);
端口1端口2端口3端口4 Port5 apple 0.017926 0.058247 0.097816 0.12955 0 amazon 0 0 0 0 0 cisco戴尔0.0041906 0 0 0 0 0 0 0 0 0 EBAY 0 0 0 0 0 google 0.16144 0.35678 0.55228 0.75116 1 hp IBM 0.46422 0.36045 0.25577 0.11928 0.052566 0.032302 0.011186 0 0 0 intel 0 0 0 0 0 microsoft 0.29966 0.19222 0.082949 0 0 ORCL 0 0 0 0 0 yahoo 0 0 0 0 0
投资组合
对象与BoundType
而且MaxNumAssets
约束和确定有效的投资组合创建一个投资组合
对象为12只个股基础CAPMuniverse.mat
.
负载CAPMuniversep0 =投资组合(“AssetList”、资产(1:12));p0 = estimateAssetMoments(p0, Data(:,1:12),“missingdata”,真正的);p0 = setDefaultConstraints(p0);
使用setMinMaxNumAssets
定义3个资产的最大数目。
p1 = setMinMaxNumAssets(p0, [], 3);
使用setBounds
定义一个上下限和一个BoundType
的“条件”
.
p1 = setBounds(p1, 0.1, 0.5,“BoundType”,“条件”);pwgt = estimateFrontier(p1, 5);
从下表可以看出,优化后的配置最多只投资3个资产,避免了小于0.1的小仓位。
Result = table(p0. 0)AssetList ', pwgt)
结果=12×2表Var1 pwgt ________ ___________________________________________________ {' apple '} 0 0 0 0.14308 0 {amazon的}0 0 0 0 0 {cisco的}0 0 0 0 0{“戴尔”}0 0 0 0 0{“易趣”}0 0 0 0 0.5 0.16979 0.29587 0.42213 0.49998 0.5{“google”}{“hp”}0 0 0 0 0{“IBM”}0.49602 0.4363 0.37309 0.35694 0 {intel的}0 0 0 0 0{“微软”}0.33419 0.26783 0.20479 0 0{‘ORCL} 0 0 0 0 0{“yahoo”}0 0 0 0 0
的estimateFrontier
函数使用MINLP求解器来解决这个问题。使用setSolverMINLP
函数配置SolverType
和选项。
p1.solverTypeMINLP
ans = 'OuterApproximation'
p1.solverOptionsMINLP
ans =带字段的结构:MaxIterations: 1000 AbsoluteGapTolerance: 1.0000 -07 RelativeGapTolerance: 1.0000 -05 NonlinearScalingFactor: 1000 ObjectiveScalingFactor: 1000 Display: 'off' CutGeneration: 'basic' MaxIterationsInactiveCut: 30 activecutttolerance: 1.0000 -07 IntMasterSolverOptions: [1x1 optimal .options. 07。Intlinprog] NumIterationsEarlyIntegerConvergence: 30
创建有效的投资组合:
负载CAPMuniversep = PortfolioCVaR(“AssetList”、资产(1:12));p = simulateNormalScenariosByData(p, Data(:,1:12), 20000,“missingdata”,真正的);p = setDefaultConstraints(p);p = setProbabilityLevel(p, 0.95);plotFrontier (p);
pwgt = estimateFrontier(p, 5);Pnames = cell(1,5);为I = 1:5 pnames{I} = sprintf(的端口% d ',我);结束Blotter = dataset([{pwgt},pnames],“obsnames”, p.AssetList);disp(流水帐);
端口1端口2端口3端口4 Port5 apple 0.010562 0.07364 0.11931 0.13073 0 amazon 0 0 0 0 0 cisco戴尔0.022649 0 0 0 0 0 0 0 0 0 EBAY 0 0 0 0 0 google 0.203 0.38011 0.56202 0.75919 1 hp IBM 0.44444 0.36456 0.26305 0.11009 0.042772 - 0.0094711 0 0 0 0 intel 0 0 0 0 0 microsoft 0.27658 0.17222 0.055624 0 0 ORCL 0 0 0 0 0 yahoo 0 0 0 0 0
PortfolioMAD
目标和确定有效的投资组合创建有效的投资组合:
负载CAPMuniversep = portfolio omad (“AssetList”、资产(1:12));p = simulateNormalScenariosByData(p, Data(:,1:12), 20000,“missingdata”,真正的);p = setDefaultConstraints(p);plotFrontier (p);
pwgt = estimateFrontier(p, 5);Pnames = cell(1,5);为I = 1:5 pnames{I} = sprintf(的端口% d ',我);结束Blotter = dataset([{pwgt},pnames],“obsnames”, p.AssetList);disp(流水帐);
端口1端口2端口3端口4 Port5 apple 0.029787 0.076199 0.11265 0.13397 0 amazon 0 0 0 0 0 cisco戴尔0.0089177 0 0 0 0 0 0 0 0 0 EBAY 0 0 0 0 0 google 0.16094 0.3516 0.54479 0.74898 1 hp IBM 0.46074 0.37919 0.29379 0.11705 0.056856 - 0.023073 0 0 0 0 intel 0 0 0 0 0 microsoft 0.28277 0.16994 0.048762 0 0 ORCL 0 0 0 0 0 yahoo 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 =投资组合;p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); pwgt = estimateFrontier(p); disp(pwgt);
1 ~ 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 8 ~ 10列0000 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 =投资组合;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×100.8891 0.7215 0.5540 0.3865 0.2190 0.0515 0000 00 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.292 0.7953 1.0000
显示(pbuy);
pbuy =4×100.5891 0.4215 0.2540 0.0865 000 000 000 00 0.0129 0.1049 0.1969 0.1049 000 000 000 000 000 000 000 0.0521 0.1113 0.1705 0.2297 0.3630 0.5292 0.6953 0.9000
显示(psell);
psell =4×10000 00 0.0810 0.2485 0.3000 0.3000 0.3000 0.3000 0.2631 0.1711 0.0791 000 00 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 000 000 000 000 000 000
在有效边界的整个范围内获得有效投资组合的默认数量。
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);
1 ~ 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 8 ~ 10列000 0.1804 00 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×100.8451 0.6849 0.5159 0.3541 0.1903 0.0323 0000 0 0.0613 0.1429 0.2291 0.3165 0.3983 0.4721 0.3528 0.1804 00 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
显示(pbuy);
pbuy =4×100.5451 0.3849 0.2159 0.0541 000 000 000 000 000 0165 0.0983 0.1721 0.0528 000 000 000 000 000 000 000 000 000 000 0089 0.0606 0.1213 0.1775 0.2376 0.3736 0.5277 0.6788 0.9000
显示(psell);
psell =4×10000 00 0.1097 0.2677 0.3000 0.3000 0.3000 0.3000 0.2387 0.1571 0.0709 000 00 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 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
这个函数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);
1 ~ 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.354 0.0826 0.1047 0.1237 0.1499 0.0366 0.0961 0.1559 0.2148 0.2763 0.3348 0.4601 8 ~ 10列000 0.1758 00 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×100.8817 0.7150 0.5488 0.3812 0.2167 0.0494 0000 00 0.0431 0.1285 0.2127 0.2993 0.3832 0.4679 0.3599 0.1758 00 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
显示(pbuy);
pbuy =4×100.5817 0.4150 0.2488 0.0812 000 000 000 000 000 000 832 0.1679 0.0599 000 000 000 000 000 0 0.0091 0.0266 000 0 0.0559 0.1148 0.1763 0.2348 0.3601 0.5151 0.6734 0.9000
显示(psell);
psell =4×100 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
- - - - - -投资组合的对象对象的投资组合,指定使用投资组合
,PortfolioCVaR
,或PortfolioMAD
对象。有关创建投资组合对象的更多信息,请参见
数据类型:对象
NumPorts
- - - - - -在有效边界上获得的点数defaultNumPorts
(默认值为10
)(默认)|标量整数有效边界上要获得的点数,指定为标量整数。
请注意
如果没有指定NumPorts
,则从hidden属性中获取默认值defaultNumPorts
(默认值为10
).如果NumPorts
=1
,此函数返回由hidden属性指定的投资组合defaultFrontierLimit
(当前默认值为“最小值”
).
数据类型:双
pwgt
-在有效边界上的最优投资组合,具有指定数量的投资组合,从最小到最大的投资组合收益相等在有效边界上的最优投资组合,具有指定数量的投资组合,从最小到最大的投资组合收益相等,返回为aNumAssets
——- - - - - -NumPorts
矩阵。pwgt
返回。投资组合
,PortfolioCVaR
,或PortfolioMAD
输入对象(obj
).
pbuy
-购买相对于初始投资组合在有效边界上的最优投资组合对于有效边界上的最优投资组合,相对于初始投资组合的购买,返回为NumAssets
——- - - - - -NumPorts
矩阵。
请注意
中未指定初始投资组合obj。InitPort
,则假定该值为0
这样Pbuy = max(0, pwgt)
而且Psell = max(0, -pwgt)
.
pbuy
返回。投资组合
,PortfolioCVaR
,或PortfolioMAD
输入对象(obj
).
psell
-相对于初始投资组合的销售在有效边界上的最优投资组合对于有效边界上的最优投资组合,相对于初始投资组合的销售额,作为a返回NumAssets
——- - - - - -NumPorts
矩阵。
请注意
中未指定初始投资组合obj。InitPort
,则假定该值为0
这样Pbuy = max(0, pwgt)
而且Psell = max(0, -pwgt)
.
psell
返回为投资组合
,PortfolioCVaR
,或PortfolioMAD
输入对象(obj
).
您还可以使用点符号来估计整个有效边界上的最优投资组合的指定数量。
[pwgt, pbuy, psell] = obj.estimateFrontier(NumPorts);
当引入交易成本和周转约束时投资组合
,PortfolioCVaR
,或PortfolioMAD
对象时,投资组合优化目标包含一个具有绝对值的项。有关财务工具箱™如何以算法处理此类情况的详细信息,请参见参考文献.
[1] Cornuejols, G., R. Tutuncu。财务优化方法。剑桥大学出版社,2007年。
estimateFrontierByReturn
|estimateFrontierByRisk
|estimateFrontierLimits
|setBounds
|setMinMaxNumAssets
次のmatlabコマンドに対応するリンクがクリックされました。
コマンドをmatlabコマンドウィンドウに入力して実行してください。Webブラウザ,はMATLABコマンドをサポ,トしていません。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。