主要内容

estimateMaxSharpeRatio

为投资组合对象估计有效的投资组合,使夏普比率最大化

描述

例子

pwgtpbuypsell) = estimateMaxSharpeRatio (obj估计有效的投资组合,使夏普比率最大化投资组合对象。详细的工作流程请参见组合对象的工作流

例子

pwgtpbuypsell) = estimateMaxSharpeRatio (___名称,值添加可选的名称-值对参数。

例子

全部折叠

估计使夏普比率最大化的有效投资组合。的estimateMaxSharpeRatio函数使有效边界上投资组合间的夏普比率最大化。本例使用默认值“直接”估计最大夏普比率的方法。有关的更多信息直接方法,看到算法

p =组合(“AssetMean”(0.3, 0.1, 0.5),“AssetCovar”...[0.01, -0.010, 0.004;-0.010、0.040、-0.002;0.004, -0.002, 0.023);p = setDefaultConstraints (p);plotFrontier (p, 20);重量= estimateMaxSharpeRatio (p);[risk, ret] = estimatePortMoments(p, weights);持有情节(风险,受潮湿腐烂,“* r”);

图中包含一个axes对象。标题为E f f i c in t空f r nt的axis对象包含两个类型为line的对象。

估计使夏普比率最大化的有效投资组合。的estimateMaxSharpeRatio函数使有效边界上投资组合间的夏普比率最大化。此示例使用“直接”方法一投资组合对象(p),它不指定跟踪误差,只使用线性约束。的setSolver函数用于控制SolverType而且SolverOptions.在这种情况下,SolverTypequadprog.有关的更多信息“直接”方法,请参阅算法

p =组合(“AssetMean”(0.3, 0.1, 0.5),“AssetCovar”...[0.01, -0.010, 0.004;-0.010、0.040、-0.002;0.004, -0.002, 0.023);p = setDefaultConstraints (p);plotFrontier (p, 20);p = setSolver (p,“quadprog”“显示”“关闭”“ConstraintTolerance”1.0 e-8“OptimalityTolerance”1.0 e-8“StepTolerance”1.0 e-8“MaxIterations”, 10000);重量= estimateMaxSharpeRatio (p);[risk, ret] = estimatePortMoments(p, weights);持有情节(风险,受潮湿腐烂,“* r”);

图中包含一个axes对象。标题为E f f i c in t空f r nt的axis对象包含两个类型为line的对象。

估计使夏普比率最大化的有效投资组合。的estimateMaxSharpeRatio函数使有效边界上投资组合间的夏普比率最大化。此示例使用“直接”方法一投资组合对象(p),它使用非线性约束来指定跟踪误差。的setSolver函数用于控制SolverType而且SolverOptions.在这种情况下fminconSolverType

p =组合(“AssetMean”(0.3, 0.1, 0.5),“AssetCovar”...[0.01, -0.010, 0.004;-0.010、0.040、-0.002;0.004, -0.002, 0.023),“磅”0,“预算”1);plotFrontier (p, 20);p = setSolver (p,“fmincon”“显示”“关闭”“算法”“sqp”...“SpecifyObjectiveGradient”,真的,“SpecifyConstraintGradient”,真的,...“ConstraintTolerance”1.0 e-8“OptimalityTolerance”1.0 e-8“StepTolerance”1.0 e-8);重量= estimateMaxSharpeRatio (p);te = 0.08;p = setTrackingError (p, te、重量);[risk, ret] = estimatePortMoments(p,weights);持有情节(风险,受潮湿腐烂,“* r”);

图中包含一个axes对象。标题为E f f i c in t空f r nt的axis对象包含两个类型为line的对象。

estimateMaxSharpeRatio函数使有效边界上投资组合间的夏普比率最大化。在无风险资产的投资组合情况下,存在多个有效投资组合,使资本资产线上的夏普比率最大化。因为的性质“直接”而且“迭代”方法,投资组合权重(pwgts)这些方法的输出可能不同,但夏普比率是相同的。该示例演示了pwgts是不同的,夏普比率是相同的。

负载BlueChipStockMoments状态= MarketMean;mrsk =√MarketVar);cret = CashMean;crsk =√CashVar);p =组合(“AssetList”AssetList,“RiskFreeRate”, CashMean);p = setAssetMoments(p, AssetMean, AssetCovar);p = setInitPort(p, 1/p. numassets);[ersk, eret] = estimatePortMoments(p, p. initport);p = setDefaultConstraints (p);pwgt = estimateFrontier(p, 20);[prsk, pret] = estimatePortMoments(p, pwgt);pwgtshpr_fully = estimateMaxSharpeRatio (p,“方法”“直接”);[riskshpr_full, retshpr_full] = estimatePortMoments(p,pwgtshpr_full);q = setBudget(p, 0,1);qwgt = estimateFrontier(q, 20);[qrsk, qret] = estimatePortMoments(q, qwgt);

用切线(01现金)。

pwgtshpr_direct = estimateMaxSharpeRatio (q,“方法”“直接”);pwgtshpr_iter = estimateMaxSharpeRatio (q,“方法”“迭代”);'TolX'的默认值为1e-8[riskshpr_direct, retshpr_direct] = estimatePortMoments(q,pwgtshpr_direct);[风险pr_iter, retshpr_iter] = estimatePortMoments(q,pwgtshpr_iter);clf;portfolioexamples_plot (“资本配置线的高效边界”...“行”, prsk, pret, {“英孚”},“- r”2},...“行”, qrsk, qret, {“EF和riskfree”},“- b”1},...“散射”, [mrsk, crsk, ersk, riskshpr_fully, riskshpr_direct, riskshpr_iter],...[mret, cret, eret, retshpr_full, retshpr_direct, retshpr_iter], {“市场”“现金”“平等”“夏普完全投资”“夏普diret”“夏普iter”}},...“散射”,根号(diag(p.AssetCovar)), p.AssetMean, p.AssetList,“r”});

图中包含一个axes对象。标题为E f f in t blank f r ont E r blank with blank ca p itl blank a l o c it n blank lin E的坐标轴对象包含40个类型为行、散点、文本的对象。这些对象代表EF, EF具有无风险。

当投资组合中没有无风险资产时,或者换句话说,投资组合已完全投资时,有效边界是弯曲的,对应于上图中的红线。因此,存在一个独特的(风险,回报)点,使夏普比率最大化“迭代”而且“直接”方法都会找到。如果允许投资组合投资于无风险资产,则红色有效边界线的一部分被资本配置线取代,从而得到具有无风险投资的投资组合的有效边界(蓝线)。蓝色直线上的所有(风险、回报)点都具有相同的夏普比率。而且,很可能“迭代”而且“直接”方法最终会得到不同的点数,因此有不同的投资组合分配。

当使用“迭代”方法,您可以使用可选的“TolX”名称-值参数。TolX是一个终止公差,它与有效边界的可能返回水平有关。如果所选的TolX值相对于返回范围较大,则解的精度较差。TolX数值应小于0.01*(maxReturn-minReturn).

maxReturn = max (qret);最大回报投资组合minReturn = min (qret);%最小收益组合显示器(0.01 * (maxReturn-minReturn))
1.5193 e-04

增加终端公差的目的是为了加快收敛速度“迭代”算法。然而,如前所述,解的准确性会降低。您可以在下面的表格中看到这一点。

pwgtshpr_iter_largerTol = estimateMaxSharpeRatio (q,“方法”“迭代”...“TolX”1的军医);显示(表(pwgtshpr_iter pwgtshpr_iter_largerTol,...“VariableNames”, {'默认TolX = 1e-8'“TolX = 1的军医”}))
30x2 table Default TolX = 1e-8 TolX = 1e-4 ___________________ ___________ 0 0 0 0 0 0 0 0 0 0 0 0 0:: 0 0 0.034997 0.034998 0 0 0.1285 0.1285 0.10979 0.10979显示所有30行。

如预期的那样,在表中,权重的值相对于使用默认公差获得的权重略有变化。

创建一个投资组合对象用于三个资产。

AssetMean = [0.0101110;0.0043532;0.0137058);AssetCovar = [0.00324625 0.00022983 0.00420395;0.00022983 0.00049937 0.00019247;0.00420395 0.00019247 0.00764097];p =组合(“AssetMean”AssetMean,“AssetCovar”, AssetCovar);p = setDefaultConstraints (p);

使用setBounds用半连续约束来设定西00.02< =西< =0.5对所有1,...NumAssets

p = setBounds(p, 0.02, 0.5,“BoundType”“条件”“NumAssets”3);

当与投资组合对象,setMinMaxNumAssets函数使您能够为只做多头的投资组合设置基数约束。对象的基数约束投资组合对象,其中满足非零半连续约束的已分配资产的总数介于MinNumAssets而且MaxNumAssets.通过设置MinNumAssetsMaxNumAssets= 2时,三种资产中只有两种被投资到投资组合中。

p = setMinMaxNumAssets(p, 2,2);

使用estimateMaxSharpeRatio以估计有效的投资组合,使夏普比率最大化。

重量= estimateMaxSharpeRatio (p,“方法”“迭代”
重量=3×10.0000 0.5000 0.5000

estimateMaxSharpeRatio函数使用MINLP求解器来解决这个问题。使用setSolverMINLP命令,配置SolverType和选项。

p.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

输入参数

全部折叠

对象指定的投资组合投资组合对象。

请注意

无风险利率是从资产中获得的RiskFreeRate在Portfolio对象中。如果你离开RiskFreeRate未设置,则假定为0.如果投资组合的最大收益小于RiskFreeRate,解设为pwgt在最大收益时,产生的夏普比率将为负。

有关创建投资组合对象的更多信息,请参见

数据类型:对象

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:[pwgt, pbuy psell] = estimateMaxSharpeRatio (p,“方法”,“迭代”)

方法来估计夏普比率,指定为逗号分隔的对,由“方法”和具有以下值之一的字符向量:

请注意

如果你正在使用estimateMaxSharpeRatio与一个投资组合具有指定的半连续约束和基数约束的setBounds而且setMinMaxNumAssets,您只能使用“迭代”方法。

数据类型:字符

步长公差fminbnd当使用收敛“迭代”方法,指定为逗号分隔的对,由“TolX”一个正的标量。步长与在有效边界上所达到的返回水平有关fminbnd.如果指定的TolX相对于收益的范围较大,求解的精度较差。TolX数值应小于0.01*(maxReturn-minReturn).

请注意

如果“直接”方法选择,TolX将被忽略。

数据类型:

输出参数

全部折叠

具有最大夏普比率的有效边界上的投资组合,返回为NumAssets向量。

对于一个在有效边界上具有最大夏普比率的投资组合,其相对于初始投资组合的购买量NumAssets向量。

pbuy返回为投资组合输入对象(obj).

对于具有最大夏普比率的有效边界上的投资组合,相对于初始投资组合的销售额,返回为NumAssets向量。

psell返回为投资组合输入对象(obj).

更多关于

全部折叠

夏普比率

夏普比率是投资组合收益率均值与无风险利率之差除以投资组合收益率标准差之比。

estimateMaxSharpeRatio函数使有效边界上投资组合间的夏普比率最大化。

提示

你也可以用点表示法来估计一个能使夏普比率最大化的有效投资组合。

[pwgt, pbuy psell] = obj.estimateMaxSharpeRatio;

算法

夏普比率的最大化是通过使用“直接”“迭代”方法。为“直接”方法,考虑以下场景。夏普比率最大化为:

一个 x z e μ T x r f x T C x 年代 t x 1 0 x 1

在哪里μ而且C均值和协方差矩阵,和rf是无风险利率。

如果μTx-rf所有≤0x夏普比率最大化的投资组合就是回报最大的投资组合。

如果μTx-rf> 0,让 t 1 μ T x r f

而且ytx(Cornuejols[1] 8.2节)。在做了一些替换之后,你可以把原来的问题转化成下面的形式,

n z e y T C y 年代 t y t t > 0 0 y t, μ T y r f t 1.

只需要解决一个优化,因此得名“直接”。组合权重可以通过xy/t

“迭代”方法,其思想是在有效前沿上迭代探索不同收益水平的投资组合,并找到夏普比最大的投资组合。因此,在此过程中可以解决多个优化问题,而不是只解决一个优化问题“直接”方法。因此,“迭代”方法比较慢“直接”方法。

参考文献

[1] Cornuejols, G.和Reha Tütüncü。财务优化方法。剑桥大学出版社,2007。

版本历史

介绍了R2011b

Baidu
map