资产配置案例研究

这个例子展示了如何建立一个基本的资产配置问题,使用均值-方差组合优化投资组合目的是估计有效的投资组合。

步骤1.定义投资组合问题。

假设你想管理一只资产配置基金,该基金有四种资产类别:债券、大盘股、小盘股和新兴股。该基金只做多,没有借贷或杠杆,投资组合中股票的比重不应超过85%,新兴市场股票的比重不应超过35%。前三种资产的交易成本折合成年率为10个基点,新兴市场股票的交易成本则高出4倍。最后,你要确保平均营业额不超过15%。为了解决这个问题,你需要建立一个基本的均值-方差组合优化问题,然后慢慢地引入问题上的各种约束来得到一个解决方案。

为了建立投资组合优化问题,首先从与问题结构相关的已知量的基本定义开始。假设每个资产类别都有一个可交易的实时价格资产。例如,这些资产可以是交易所交易基金(ETFs)。初始投资组合,每项资产的总持有量为750万美元,另外还有6万美元的现金头寸。这些基本数量和交易成本设置在单元格数组中的资产名称的以下变量中资产,当前价格在矢量价格,当前投资组合中的持股矢量举行,交易成本在向量中Unitcost.

要分析这个作品集,你可以在一个表格对象,以帮助跟踪的价格,增持,权重,等等。特别是,你可以计算初始投资组合权重,并维持其称为一个新的吸墨纸场initport.

资产= {'债券'“大型股票”'小型股票'“新兴市场”};价格= [52.4;122.7;35.2;46.9];持有= [42938;24449;42612;15991];unitcost = [0.001; 0.001; 0.001; 0.004 ]; Blotter = table('RowNames'、资产);吸墨纸。价格= Price; Blotter.InitHolding = Holding; Wealth = sum(Blotter.Price .* Blotter.InitHolding); Blotter.InitPort = (1/Wealth)*(Blotter.Price .* Blotter.InitHolding); Blotter.UnitCost = UnitCost; Blotter
答案=4×4表Price inthholding InitPort UnitCost _____ ___________ ________ ________ Bonds 52.4 42938 0.3 0.001大盘股122.7 24449 0.4 0.001小盘股35.2 42612 0.2 0.001新兴股46.9 15991 0.1 0.004

步骤2模拟资产价格。

由于这是一个假设的例子,从每年的资产总回报为资产类别给定的均值和方差模拟资产价格,portsim函数用于创建具有期望均值和协方差的资产回报。具体地说,portsim用于模拟五年的每月总回报,然后绘制以显示模拟总收益价格的日志

平均和年度资产总收益的协方差维持在变量AssetMeanAssetCovar.模拟资产总收益的价格(这是复合的总回报率)维持在变Y.所有初始资产总回报价格归一化为1在这个例子中。

assetmean = [0.05;0.1;0.12;0.18];Assetcovar = [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];x = Portsim(Assetmean'/ 12,Assetcovar / 12,60);%5年每月的总回报率(60个月)[Y, T] = ret2tick(X, [], 1/12);%表格总收益价格绘图(t,log(y));标题('\ bf模拟资产类别总回报价格');包含(“年”);ylabel(“日志总退货价格”);传奇(资产,'位置'“最好”);

步骤3。设置Portfolio对象。

要探索有效前沿的投资组合,建立一个投资组合对象使用这些规范:

  • 投资组合权重是负,并且总和1

  • 股权分配不超过投资组合的85%。

  • 新兴市场股票占投资组合的比例不超过35%。

这些规范纳入了投资组合对象p在以下使用函数的顺序中,首先使用投资组合对象。

  1. 初始投资组合的规范压滤给出你的空间中资产的数量,所以你不需要指定NumAssets直接的财产。接下来,设置默认约束(只有长约束和预算约束)。此外,建立对投资组合中的股权施加上限的群组约束(股权在群组矩阵中被识别为)1以及新兴市场股票的上限约束。尽管你可以用setBounds函数,注意addGroups函数用于设置此约束。

  2. 要具有完全指定的平均方差组合优化问题,必须指定资产返回的均值和协方差。由于从变量中的这些时刻开始AssetMeanAssetCovar,你可以使用setAssetMoments.函数将这些变量输入投资组合对象(请记住,您假设您的原始数据是月回报率,这就是为什么您将年度输入时刻除以12以获得月回报率)。

  3. 使用总回报率的价格与estimateAssetMoments与规范功能,在您的数据Y是价格,而不是退货,估算资产回归时刻投资组合对象。

  4. 虽然回报在你投资组合对象是在月度收益的单位,因为后续成本年化,可以很方便地将其指定为与的这种直接转化年度总回报率AssetMeanAssetCovar你的属性投资组合对象p

  5. 显示组合对象p

p =组合(“名字”'资产拨分配投资组合'......“资产列表”,资产,'InitPort',blotter.initport);p = setDefaultConstraints(p);p = setgroups(p,[0,1,1,1],[],0.85);p = addgroups(p,[0,0,0,1],[],0.35);p = setAssetMoments(P,Assetmean / 12,Assetcovar / 12);p = emplataeaSetMoments(P,Y,“DataFormat”'价格');p.AssetMean = 12 * p.AssetMean;p.AssetCovar = 12 * p.AssetCovar;显示(p);
P =组合与属性:BuyCost:[] SellCost:[] RiskFreeRate:[] AssetMean:[4X1双] AssetCovar:[4×4双] TrackingError:[] TrackingPort:[]营业额:[] BuyTurnover:[] SellTurnover:[]名称: '资产分配投资组合' NumAssets:4资源列表:{1×4细胞} InitPort:[4X1双] AInequality:[] bInequality:[] AEquality:[] bEquality:[]下界:[4X1双] UPPERBOUND:[] LowerBudget:1 UpperBudget:1 GroupMatrix:[2×4双] LowerGroup:[] UpperGroup:[2×1双]组A:[]组B:[] LowerRatio:[] UpperRatio:[] MinNumAssets:[] MaxNumAssets:[] BoundType:[4X1分类]

第4步:验证组合问题。

投资组合优化的一个重要步骤是验证投资组合问题的可行性,主要的检验是确保投资组合的集合是非空的和有界的。使用estismsbounds.函数来确定投资组合集合的边界。在这种情况下,因为两者LB.UB是有限的,集合是有界的。

[lb, ub] = estimateBounds(p);(磅,乌兰巴托)显示();
0.1500 1.0000 0 0.8500 0 0.8500 0 0.3500

步骤5.绘制有效边界。

鉴于建造投资组合对象,使用plotFrontier功能来查看有效边界。你可以显示40个投资组合的边界,而不是使用沿边界的10个投资组合。请注意,投资组合的总有效回报率每年大约在6%到16%之间。

plotFrontier (p, 40);

步骤6毛的评价与证券投资的净回报率。

投资组合对象p不包括使在指定的投资组合优化问题,交易成本p使用总投资回报作为回报代理。为了处理净收益,创建第二个投资组合对象包括交易成本。

q = setCosts(P,UnitCost,UnitCost);显示(q);
Q =具有属性的投资组合:Buycost:[4x1 Double] Sellcost:[4x1 Double]风险频率:[] assetmean:[4x1 double] Assetcovar:[4x4 Double] TrackingError:[] TrackingPort:[]营业册:[]SELLTURNOVER:[]名称:'资产分配组合'NUMASET:4 Assetlist:{1x4 Cell} initport:[4x1双]弥漫性:[] Binequality:[] Aequality:[]胎粪:[]下行:[4x1双]上行:[] LowBudget:1 upperBudget:1 GroupMatrix:[2x4 Double] DowerGroup:[]上组:[2x1 Double] Groupa:[] Groupb:[] Dreamratio:[] UppleRatio:[] Minnumasset:[] Maxnumasset:[]横向:[4x1分类]

步骤7。分析投资组合结构的描述性属性。

更具体地了解有效的投资组合回报和风险的范围,使用estismsfrontierlimits.函数获取有效边界端点处的投资组合。考虑到这些投资组合,用estimatePortMoments函数。下面的代码生成了一个表,列出了初始投资组合的风险和回报,以及在有效边界端点的投资组合的投资回报的总时刻和净时刻:

[prsk0,pret0] = estibalportmoments(p,p.initport);pret = estibalportreturn(p,p.timefrontierlimits);qret = estimatePortReturn(q, q. estimatefrontierlimits);displayreturns(pret0,pret,qret);
年化投资组合回报…总净初始投资组合回报率9.70% 9.70%最低有效投资组合回报率5.90% 5.77%最大有效投资组合回报率13.05% 12.86%

结果表明,交易成本范围从14到19个基点到达当前投资组合到高效边界的终点中的有效投资组合(这些成本是总收益和净投资组合的差异。)此外,通知由于股权分配的限制,最高有效的投资组合返回(13%)返回(13%)小于最大资产返回(18%)。

步骤8.在高效前沿的指定返回级别获取投资组合。

选择有效投资组合的一种常见方法是选择一个投资组合,该投资组合的期望收益率是预期收益率范围的一部分。为了得到有效边界上最小到最大收益范围的30%的投资组合,求其中的净收益范围qret使用投资组合对象并插入以获得30%的水平interp1函数获取一个投资组合QWGT.

水平= 0.3;qret = estimatePortReturn(q, q. estimatefrontierlimits);qwgt = estimateFrontierByReturn(q, interp1([0,1], qret, Level));[qrsk, qret] = estimatePortMoments(q, qwgt);displayReturnLevel(级别、qret qrsk);
投资组合在30%的回报率水平在有效边界…回报风险7.90 9.09
显示(qwgt);
qwgt =4×10.6252 0.1856 0.0695 0.1198

目标投资组合从最低到最大净返回的范围内的30%的返回率为7.9%,风险为9.1%。

第9步。在有效边界上获得指定风险水平的投资组合。

虽然你可以接受这个结果,但假设你想为投资组合的风险设定目标值。具体来说,假设你有10%的保守目标风险,15%的中等目标风险,20%的激进目标风险,你想获得满足每个风险目标的投资组合。使用estismsFrontierByRisk.函数获取变量中指定的目标风险TargetRisk.在式中得到了三个有效组合QWGT.

TargetRisk = [0.10;0.15;0.20];qwgt = estimateFrontierByRisk(Q,TargetRisk);显示(qwgt);
qwgt =4×30.5407 0.2020 0.1500 0.2332 0.0318 0.0318 0.0788 0.1280 0.4682 0.1474 0.2700 0.3500

使用estibalportrisk.函数计算三个组合的组合风险,以确定目标风险已达到:

显示器(estimatePortRisk (q, qwgt));
0.1000 0.1500 0.2000

假设您要从当前投资组合转移到适度的投资组合。您可以估计购买和销售以获取此投资组合:

[qwgt,qbuy,qsell] = estimateFrontierByRisk(Q,0.15);

如果你对这个投资组合的购买和销售进行平均计算,你会发现平均营业额是17%,高于15%的目标:

disp (sum (qbuy + qsell) / 2)
0.1700

既然你也希望确保平均营业额不超过15%,你可以添加成交均价约束到投资组合对象使用setTurnover

Q = setTurnover(Q,0.15);[qwgt,qbuy,qsell] = estimateFrontierByRisk(Q,0.15);

您可以输入估计的有效投资组合与购买和销售到记事簿:

Qbuy (abs(Qbuy) < 1.0.0 -5) = 0;Qsell (abs(Qsell) < 1.0.0 -5) = 0;近0交易重量零零吸墨纸。端口= qwgt;吸墨纸。buy= qbuy; Blotter.Sell = qsell; display(Blotter);
答案=表4×7Price InitHolding InitPort UnitCost Port Buy - Sell _____ ___________ ________ ________ ___________ ________ Bonds 52.4 42938 0.3 0.001 0.18787 0 0.11213大盘股122.7 24449 0.4 0.001 0.4 00小盘股35.2 42612 0.2 0.001 0.16213 0 0.037871新兴股46.9 15991 0.1 0.004 0.25 0.15 0

buy出售该吸墨纸的元件在投资组合权重的变化必须被转换成变化组合持股,以确定交易。既然你与净投资组合回报的工作,您必须首先从您的初始投资计算成本,以贸易为新的投资组合。这可以如下实现:

TOTALCOST =财富*总和(Blotter.UnitCost。*(Blotter.Buy + Blotter.Sell))
TotalCost = 5.6248 e + 03

交易的费用是$ 5,625,所以,一般来说,你将不得不建立新的投资组合权之前,相应地调整你的初始财富。然而,为了保持简单的分析,需要注意的是你有足够的现金($ 60,0000)预留支付交易成本,你不会触及现金头寸建立在你的投资组合的任何位置。因此,你可以填充新的组合持股和交易你的记事簿来获得新的投资组合不使你的投资总财富的任何变化。首先,计算投资组合控股:

Blotter.Holding =财富*(Blotter.port ./ Blotter.Price);

计算股票数量buy出售在你的流水帐:

Blotter.Buyshare =财富*(污水。宝布./ Blotter.Price);Blotter.Sellshare =财富*(Blotter.sell ./ Blotter.Price);

注意你是如何使用an的ad hoc.截断规则获取单位数量的股票进行买卖。通过去除单位成本和买卖组合权重来清理这张纸:

吸墨纸。buy= []; Blotter.Sell = []; Blotter.UnitCost = [];

步骤10.显示最终结果。

最终的结果是,载有建议交易从您目前的投资组合,以获得一个中等风险组合吸墨纸。为了使贸易,就需要卖出16049股的债券资产和8,069股的小盘股票资产,将需要购买你的股票出现资产23986股。

显示(吸墨纸);
答案=表4×7Price InitHolding InitPort Port Holding BuyShare SellShare _____ ___________ ________ _______ _______ ________ _________ Bonds 52.4 42938 0.3 0.18787 268890 16049大盘股122.7 24449 0.4 0.4 24449 0 0小盘股35.2 42612 0.2 0.16213 34543 0 8068.8新兴股46.9 15991 0.1 0.25 39977 23986 0

最后的情节使用了plotFrontier功能以显示完全指明的组合优化问题的有效边界和初始投资组合。它还增加了对有效边界的中等风险或最终组合的位置。

plotFrontier(Q,40);持有散射(estibalportRisk(Q,qwgt),estibalportreturn(q,qwgt),“填充”“r”);h =图例(“初始投资组合”“有效前沿”'最终投资组合''位置'“最好”);集(h,“字形大小”8);持有关闭

实用功能

功能displayReturns(pre0, pret, qret)“年化投资组合回报率... \ N”);流('%6s%6s \ n'“毛”“净”);流('初始投资回报率%6.2f %% 6.2f %%\n',100 * pret0,100 * pret0);流('最小高效投资组合返回%6.2f %%%6.2f %% \ n'100 *现成的(1),100 * qret (1));流('最大的高效组合收益%6.2f %%%6.2f %% \ n'100 *现成的(2),100 * qret (2));结束功能displayReturnLevel(等级,qret,qrsk)fprintf中(图集以高效的前沿%G %%的回报水平... \ N', 100 *水平);流(% 10 s % 10年代\ n'返回'“风险”);流(“% 10.2 f % 10.2 f \ n”,100 * qret,100 * qrsk);结束

另请参阅

|||||||||

相关的例子

更多关于

外部网站