estimateFrontier
在有效边界上估计指定数量的最优投资组合
描述
例子
创建一个投资组合
目标和确定有效的投资组合
创建高效的投资组合:
负载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(流水帐);
Port1 Port2 Port3 Port4 Port5 AAPL 0.017926 0.058247 0.097816 0.12955 0 AMZN 00 00 CSCO 00 00 DELL 0.0041906 00 00 EBAY 00 00 GOOG 0.16144 0.35678 0.55228 0.75116 1 HPQ 0.052566 0.33202 0.011186 00 IBM 0.0.6422 0.36045 0.25577 0.11928 0 INTC 00 00 0 MSFT 0.29966 0.19222 0.082949 00 ORCL 00 00 00 YHOO 00 00
创建一个投资组合
对象与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的小头寸。
结果=表(p0。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 = ' outer逼近'
p1.solverOptionsMINLP
ans =带有字段的结构:maxiteration: 1000 AbsoluteGapTolerance: 1.0000e-07 RelativeGapTolerance: 1.0000e-05 NonlinearScalingFactor: 1000 ObjectiveScalingFactor: 1000 Display: 'off' CutGeneration: 'basic' maxiterationsinactivcut: 30 activecutttolerance: 1.0000e-07 IntMasterSolverOptions: [1x1 optim.options.]Intlinprog] NumIterationsEarlyIntegerConvergence: 30
构造一个PortfolioCVaR对象并确定有效的投资组合
创建高效的投资组合:
负载CAPMuniversep = portfolio var (“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(流水帐);
Port1 Port2 Port3 Port4 Port5 AAPL 0.010562 0.07364 0.11931 0.13073 0 AMZN 00 00 0 CSCO 00 00 0 DELL 0.022649 00 00 EBAY 00 00 0 GOOG 0.203 0.38011 0.56202 0.775919 1 HPQ 0.042772 0.0094711 00 IBM 0.44444 0.36456 0.26305 0.11009 0 INTC 00 00 0 MSFT 0.27658 0.17222 0.055624 00 ORCL 00 00 00 YHOO 00 00 0
创建一个PortfolioMAD
目标和确定有效的投资组合
创建高效的投资组合:
负载CAPMuniversep = PortfolioMAD(“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(流水帐);
Port1 Port2 Port3 Port4 Port5 AAPL 0.029787 0.076199 0.11265 0.13397 0 AMZN 00 00 CSCO 00 00 DELL 0.0089177 00 00 EBAY 00 00 GOOG 0.16094 0.3516 0.4479 0.4898 1 HPQ 0.056856 0.023073 00 IBM 0.46074 0.37919 0.29379 0.11705 0 INTC 00 00 0 MSFT 0.28277 0.16994 0.048762 00 ORCL 00 00 00 YHOO 00 00 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.0893 0.1056 0.1219 0.1320 0.0336 0.0929 0.1521 0.2113 0.2705 0.3297 0.4630 8 ~ 10列000 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.02209 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
显示(pbuy);
pbuy =4×100.5891 0.4215 0.2540 0.0865 000 000 000 0 0.0129 0.1049 0.1969 0.1049 000 000 000 000 000 000 0 0.0521 0.1113 0.1705 0.2297 0.3630 0.5292 0.6953 0.9000
显示(psell);
psell =4×10000 0 0.0810 0.2485 0.3000 0.3000 0.3000 0.3000 0.2631 0.1711 0.0791 000 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 000 000 000
获取一个PortfolioCVaR对象的有效投资组合的默认数量
在整个有效边界范围内获取有效投资组合的默认数量。
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
(
)重置随机数生成器以产生记录的结果。不需要重置随机数生成器来模拟场景。
在PortfolioCVaR对象的有效边界上获取投资组合的购买和销售
从最初的投资组合开始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.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 00 0.0165 0.0983 0.1721 0.0528 000 000 000 0 0.0212 00 0.0089 0.0606 0.1213 0.1775 0.2376 0.3736 0.5277 0.6788 0.9000
显示(psell);
psell =4×10000 0 0.1097 0.2677 0.3000 0.3000 0.3000 0.3000 0.2387 0.1571 0.0709 000 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 000 000 000 0
这个函数rng
(
)重置随机数生成器以产生记录的结果。不需要重置随机数生成器来模拟场景。
获取PortfolioMAD对象的有效投资组合的默认数量
在整个有效边界范围内获取有效投资组合的默认数量。
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.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 8 ~ 10列000 0.1758 00 0.2091 0.2266 0 0.6151 0.7734 1.0000
这个函数rng
(
)重置随机数生成器以产生记录的结果。不需要重置随机数生成器来模拟场景。
在PortfolioMAD对象的有效边界上获取投资组合的购买和销售
从最初的投资组合开始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 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 00 0.0832 0.1679 0.0599 000 000 000 0.0091 0.0266 000 0.0559 0.1148 0.1763 0.2348 0.3601 0.5151 0.6734 0.9000
显示(psell);
psell =4×10000 0 0.0833 0.2506 0.3000 0.3000 0.3000 0.3000 0.2569 0.1715 0.0873 0.0007 000 0.1242 0.3000 0.3000 0.1613 0.1396 0.1174 0.0953 0.0763 0.0520 0.0201 00 0.2000 0.0634 0.0039 000 000 000 000 000 0
这个函数rng
(
)重置随机数生成器以产生记录的结果。不需要重置随机数生成器来模拟场景。
输入参数
obj
- - - - - -作品集对象
对象
对象,指定使用投资组合
,PortfolioCVaR
,或PortfolioMAD
对象。有关创建投资组合对象的更多信息,请参见
数据类型:对象
NumPorts
- - - - - -在有效边界上获得的点数
隐藏属性的价值defaultNumPorts
(默认值为10
)(默认)|标量整数
有效边界上要获得的点数,指定为标量整数。
请注意
如果没有指定值NumPorts
,默认值从hidden属性中获取defaultNumPorts
(默认值为10
).如果NumPorts
=1
,该函数返回由hidden属性指定的投资组合defaultFrontierLimit
(当前默认值为“最小值”
).
数据类型:双
输出参数
pwgt
-有效边界上的最优投资组合,指定数量的投资组合,平均间隔从最小到最大的投资组合收益
矩阵
有效边界上的最优投资组合,其中指定数量的投资组合从最小投资组合收益到最大投资组合收益之间间隔相等,返回为NumAssets
——- - - - - -NumPorts
矩阵。pwgt
返回为投资组合
,PortfolioCVaR
,或PortfolioMAD
输入对象(obj
).
pbuy
-购买相对于初始投资组合在有效边界上的最优投资组合
矩阵
对于有效边界上的最优投资组合,相对于初始投资组合的购买,返回为NumAssets
——- - - - - -NumPorts
矩阵。
请注意
中未指定初始投资组合obj。InitPort
,该值假设为0
这样Pbuy = max(0, pwgt)
而且Psell = max(0, -pwgt)
.
pbuy
返回为投资组合
,PortfolioCVaR
,或PortfolioMAD
输入对象(obj
).
psell
-在有效边界上的最优投资组合相对于初始投资组合的销售额
矩阵
对于有效边界上的最优投资组合,相对于初始投资组合的销售额,返回为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
对象,则投资组合优化目标包含一个带有绝对值的项。有关Financial Toolbox™如何用算法处理此类情况的更多信息,请参见参考文献.
参考文献
[1]科努埃戈尔斯,G.和R.图通古。财务优化方法。剑桥大学出版社,2007。
版本历史
Matlab명령
다음matlab명령에해당하는링크를클릭했습니다。
명령을실행하려면matlab명령창에입력하십시오。웹브라우저는matlab명령을지원하지않습니다。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。