这个例子展示了如何使用一个投资组合
对象直接处理半连续和基数约束在执行项目组合优化。投资组合优化找到了资产配置回报最大化或最小化风险,受到一系列的投资限制。的投资组合
类金融工具箱™是设计和实现基于马科维茨的均值-方差优化框架。均值-方差框架优化处理问题回报的投资组合的预期回报率和风险投资组合收益的方差。使用投资组合
类,您可以最小化风险有效边界(EF),最大化回报EF,返回给定风险,最大化和最小化风险对于一个给定的回报。您还可以使用PortfolioCVaR
或PortfolioMAD
类金融工具箱™指定半连续和基数约束。如和整合优化问题的约束条件,如集团线性不等式,营业额和跟踪误差约束。制定本约束非线性规划(NLP)连续变量表示为资产权重的问题
。
半连续和基数约束的组合约束两个其他常见类别制定数学通过添加二进制变量 。
一个断断续续的约束限制资产的分配。例如,您可以使用此约束限制分配资产的分配重量在5%和50%之间。通过使用这种约束,可以避免很小或大量头寸减少生产和运营成本。数学上制定这种类型的约束,一个二进制变量
是必要的,
是0
或1
。的值0
表明资产我不分配和价值1
表明资产我分配。的数学形式
,在那里
是0
或1
。这种类型的约束指定为一个“条件”
BoundType
在投资组合
类使用setBounds
函数。
一个基数约束限制在优化配置资源的数量,例如,对于一个投资组合宇宙100资产,你可以指定一个20和40之间的最优投资组合分配资产。此功能有助于限制头寸的数量,从而降低运营成本。数学上制定这种类型的约束,二进制变量表示为
是必要的,
是0
或1
。的值0
表明资产我不分配和价值1
表明资产我分配。的数学形式
,在那里
是0
或1
。通过设置指定这种类型的限制“MinNumAssets”
和“MaxNumAssets”
约束的投资组合
类使用setMinMaxNumAssets
函数。
半连续和基数约束的更多信息,请参阅算法。
当半连续和基数约束用于组合优化,这导致混合整数非线性规划问题(适应)。的投资组合
类允许您配置这两个限制,具体地说,使用半连续约束setBounds
与“条件”
BoundType
,使用基数约束setMinMaxNumAssets
。的投资组合
类自动制定数学问题并验证指定的约束。的投资组合
类也提供了内置解决适应和灵活解决选项供您使用的优化解算器性能setSolverMINLP
函数。
这个示例演示了一个投资组合
对象与半连续和基数约束和使用BlueChipStockMoments
30资产的数据集,一个宇宙。
负载BlueChipStockMomentsnumAssets =元素个数(AssetList)
numAssets = 30
创建一个完全投资组合只有多头仓位:
。这些都是配置了setDefaultConstraints
。
p =组合(“AssetList”AssetList,“AssetCovar”AssetCovar,“AssetMean”,AssetMean);p = setDefaultConstraints (p);
假设你想避免很小的位置尽量减少生产和运营成本。添加另一个约束限制分配职位不低于5%,通过设置约束
使用setBounds
与一个“条件”
BoundType
。
pWithMinWeight = setBounds (p, 0.05,“BoundType”,“条件”);
情节的有效前沿投资组合
对象。
重量= estimateFrontier (p);wgtWithMinWeight = estimateFrontier (pWithMinWeight);图(1);plotFrontier (p,重量);持有在;plotFrontier (pWithMinWeight wgtWithMinWeight);持有从;传奇(“基线组合”,“与minWeight约束”,“位置”,“最佳”);
图显示了两个投资组合
对象有几乎相同的有效前沿。然而,最低重量的要求是更加实用,因为它阻止了接近于零的位置。
检查默认约束的投资组合的最优权重,看看有多少资产低于5%的限制为每个优化配置。
托勒=每股收益;sum(重量>托勒&重量< 0.05)
ans =1×105 7 5 4 2 3 4 2 0 0
使用estimateFrontierByReturn
调查目标回报的投资组合成分这两种情况下的边界。
targetRetn = 0.011;pwgt = estimateFrontierByReturn (p, targetRetn);pwgtWithMinWeight = estimateFrontierByReturn (pWithMinWeight targetRetn);
情节的构成投资组合
对象为30资产的宇宙。
图(2);barh ([pwgt pwgtWithMinWeight]);网格在包含(投资的比例)yticks (1: p.NumAssets);yticklabels (p.AssetList);标题(“资产配置”);传奇(没有最小重量限制的,与最小重量限制的,“位置”,“最佳”);
只显示分配资产。
idx = (pwgt >托勒)| (pwgtWithMinWeight >托勒);barh ([pwgt (idx) pwgtWithMinWeight (idx)]);网格在包含(投资的比例)yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题(“资产配置”);传奇(没有最小重量限制的,与最小重量限制的,“位置”,“最佳”);
使用setMinMaxNumAssets
设置的最大数量的分配资产投资组合
对象。假设您希望不超过八个资产投资的最优投资组合。实现这一目的投资组合
对象,使用setMinMaxNumAssets
。
pWithMaxNumAssets = setMinMaxNumAssets (p [] 8);重量= estimateFrontier (p);wgtWithMaxNumAssets = estimateFrontier (pWithMaxNumAssets);plotFrontier (p,重量);持有在;plotFrontier (pWithMaxNumAssets wgtWithMaxNumAssets);持有从;传奇(“基线组合”,“与MaxNumAssets约束”,“位置”,“最佳”);
使用estimateFrontierByReturn
找到分配最小化给定目标边界上的风险回报。
pwgtWithMaxNum = estimateFrontierByReturn (pWithMaxNumAssets targetRetn);
情节的构成投资组合
对象为30资产的宇宙。
idx = (pwgt >托勒)| (pwgtWithMaxNum >托勒);barh ([pwgt (idx) pwgtWithMaxNum (idx)]);网格在包含(投资的比例)yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题(“资产配置”);传奇(“基线组合”,“与MaxNumAssets约束”,“位置”,“最佳”);
总和(abs (pwgt) >托勒)
ans = 11
数的总数最多分配资产验证只有8个资产分配。
总和(abs (pwgtWithMaxNum) >托勒)
ans = 8
假设您想要设置低和上界的资产分配在一个投资组合中,宇宙的资产。使用setBounds
指定允许的资产分配从5到10,和分配重量不少于5%。
p1 = setMinMaxNumAssets (p, 5、10);p1 = setBounds (p1, 0.05,“BoundType”,“条件”);
如果一个资产分配,必须清晰地定义资产的最低重量要求。这是通过使用setBounds
与一个“条件”
BoundType
。否则,优化器不能评估资产分配,不能制定MinNumAssets
约束。更多细节,请参阅与下界条件范围定义为空或零。
情节这个投资组合有效边界比较基线组合,只有默认约束。
重量= estimateFrontier (p);wgt1 = estimateFrontier (p1);plotFrontier (p,重量);持有在;plotFrontier (p1, wgt1);持有从;传奇(“基线组合”,“与MaxNumAssets约束”,“位置”,“最佳”);
创建一个加权组合使用setBounds
和setMinMaxNumAssets
功能。
numAssetsAllocated = 8;重量= 1 / numAssetsAllocated;p2 = setBounds (p、体重、体重、“BoundType”,“条件”);p2 = setMinMaxNumAssets (p2, numAssetsAllocated numAssetsAllocated);
当任何一个,或任何组合“条件”
BoundType
,MinNumAssets
,或MaxNumAssets
是活跃的,制定优化问题是一个混合整数非线性规划问题(适应)。的投资组合
类自动构造适应问题根据指定的约束。
当处理一个投资组合
对象,您可以选择三种解决者使用setSolverMINLP
函数。在这个例子中,而不是使用默认的适应解算器选项,自定义解算器选项来帮助一个收敛的问题。使用大量(50
)“MaxIterationsInactiveCut”
与setSolverMINLP
,而不是默认值的30.
“MaxIterationsInactiveCut”
。的值50
适用在寻找最优资产配置的有效边界。
p2 = setSolverMINLP (p2,“OuterApproximation”,“MaxIterationsInactiveCut”,50);
情节基线和等权投资组合的有效前沿。
重量= estimateFrontier (p);wgt2 = estimateFrontier (p2);plotFrontier (p,重量);持有在;plotFrontier (p2, wgt2);持有从;传奇(“基线组合”,“平等的加权组合”,“位置”,“最佳”);
使用estimateFrontierByRisk
优化特定的风险水平,在这种情况下0。
,来确定分配投资组合回报率最大化。
targetRisk = 0.05;pwgt = estimateFrontierByRisk (p, targetRisk);pwgt2 = estimateFrontierByRisk (p2, targetRisk);idx = (pwgt >托勒)| (pwgt2 >托勒);barh ([pwgt (idx) pwgt2 (idx)]);网格在包含(投资的比例)yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题(“资产配置”);传奇(“基线组合”,“平等的加权组合”,“位置”,“最佳”);
“条件”
BoundType
,MinNumAssets
,MaxNumAssets
约束与其他约束您可以定义其他约束投资组合
对象使用集
功能。这些其他约束投资组合
对象,如集团、线性不等式、营业额和跟踪误差可以一起使用“条件”
BoundType
,“MinNumAssets”
,“MaxNumAssets”
约束。例如,指定一个跟踪误差约束使用setTrackingError
。
二=(15、16、20、21、23、25、27日,29日,30日);%的资产包括索引跟踪投资组合trackingPort (ii) = 1 /元素个数(ii);q = setTrackingError (p 0.5 trackingPort);
然后使用setMinMaxNumAssets
添加一个约束限制最大数量的资产进行投资。
q = setMinMaxNumAssets (q [] 8);
上面这些先前指定的限制,使用setBounds
添加一个约束限制的重量分配资产。您可以使用与混合约束BoundType
值,“简单”
意味着
和“条件”
意味着
。
允许资产trackingPort
有BoundType
价值“条件”
在最优分配。
磅= 0 (q。NumAssets,1);乌兰巴托= 0 (q。NumAssets,1)*0。5; lb(ii) = 0.1; ub(ii) = 0.3; boundType = repmat(“简单”q.NumAssets 1);boundType (ii) =“条件”;q = setBounds (q,磅,乌兰巴托,“BoundType”,boundType);
情节有效边界:
plotFrontier (q);
使用estimateFrontierByReturn
找到分配最小化的风险对于一个给定的回报0.125
。
targetRetn = 0.0125;pwgt = estimateFrontierByReturn (q, targetRetn);
显示重量的分配资产。
idx = abs (pwgt) >每股收益;assetnames = q.AssetList ';资产= assetnames (idx);重量= pwgt (idx);resultAlloc =表(资产、重量)
resultAlloc =7×2表资产重量________ _________{‘公司’}0.1{‘嗯’}0.19503 0.1485{‘莫’}{“微软”}0.1 0.1 {PG的}{“京东商城”}0.2212 0.13527 {XOM的}
投资组合
|setBounds
|setMinMaxNumAssets
|setSolverMINLP