创建一个PortfolioCVaR
对象并合并来自的资源列表CAPMUniverse.mat
.使用simulateNormalScenariosByData
为每个资产模拟场景。这些投资组合约束要求完全投资于只做多头的投资组合(非负权重必须之和为1
).
rng (1)为重现性设置种子。负载CAPMuniversep = PortfolioCVaR (“AssetList”、资产(1:12));p = simulatenormalscenario bydata (p, Data(:,1:12), 20000,“missingdata”,真正的);p = setProbabilityLevel(p, 0.95);p = setDefaultConstraints (p);disp (p)
portfolio var with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] ProbabilityLevel: 0.9500 Turnover: [] BuyTurnover: [] SellTurnover: [] numscenario: 20000 Name: [] NumAssets: 12 AssetList: {1x12 cell} InitPort: [] ainequal: [] b不等式:[]AEquality: [] bEquality: [] LowerBound: [12x1 double] UpperBound: [] LowerBudget:1 UpperBudget: 1 GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] BoundType: [12x1 category]
为了得到报酬风险比最大化的投资组合(相当于均值-方差投资组合的夏普比率),在有效前沿上迭代搜索报酬风险比负最小化的投资组合:
要做到这一点,使用sratio
函数中定义的本地函数部分,以回报负的回报风险比为目标回报。然后,将这个函数传递给fminbnd
.fminbnd
遍历可能的返回值并评估其相关的回报风险比。fminbnd
获得最大回报/风险比(或使负回报/风险比最小化)的最优回报。
获得投资组合的最小和最大收益。pwgtLimits = estimateFrontierLimits (p);retLimits = estimatePortReturn (p, pwgtLimits);minret = retLimits (1);maxret = retLimits (2);%在边界上迭代搜索。找到最小化的返回值回报风险比的负%。Fhandle = @(ret) iterative_local_obj(ret,p);选择= optimset (“显示”,“关闭”,“TolX”1.0 e-8);Optret = fminbnd(fhandle, minret, maxret, options);获得与所获得回报相关的投资组合权重%最大回报风险比。optret pwgt = estimateFrontierByReturn (p)
pwgt =12×10.0885 0 0 0 0.9115 0 0 0 0⋮
使用plotFrontier
绘制有效边界和estimatePortRisk
估计投资组合的最大回报风险比。
plotFrontier (p);持有在计算最大回报风险比投资组合的风险水平。optrsk = estimatePortRisk (p, pwgt);散射(optrsk optret 50,“红色”,“填充”)举行从
计算目标回报水平的负回报风险比的局部函数。
函数Sratio = iterative_local_obj(ret, obj)将目标函数设为回报风险比的负值。风险= estimatePortRisk (obj, estimateFrontierByReturn (obj, ret));如果~isempty(obj.RiskFreeRate) sratio = -(ret - obj.RiskFreeRate)/风险;其他的sratio = ret /风险;结束结束
checkFeasibility
|estimateScenarioMoments
|getScenarios
|PortfolioCVaR
|setcost
|setScenarios
|simulateNormalScenariosByData
|simulateNormalScenariosByMoments