matlab优化工具箱_MATLAB金融工具箱:10:投资组合优化案例

以下示例序列突出显示Portfolio了Financial Toolbox中对象的功能。具体而言,这些示例使用该Portfolio对象来说明如何设置均方差投资组合优化问题,这些问题集中在双基金定理、交易成本和营业额约束的影响、如何获取最大化夏普比率的投资组合以及如何建立了两种流行的对冲基金策略-美元中性和130-30投资组合。

设置数据

每个示例都具有用于计算30只“蓝筹”股票每月总回报的矩。尽管这些数据是从真实数据中得出的,但它们仅用于说明目的,并不代表特定资产或市场表现。该数据包含在文件BlueChipStockMoments.mat中,包括变量列表AssetList中的资产标识符变量,变量AssetMeanAssetCovar中的资产收益的均值和协方差,以及变量CashMeanCashVarMarketMean,和MarketVar中的现金和市场回报的均值和方差。由于大多数分析都需要使用资产收益率的标准差作为风险,现金和市场方差的代表,因此将市场的方差转换为标准差。

 load BlueChipStockMoments
 ​
 mret = MarketMean;
 mrsk = sqrt(MarketVar);
 cret = CashMean;
 crsk = sqrt(CashVar);

创建投资组合对象

首先用Portfolio创建一个“标准” Portfolio对象,将资产列表、无风险利率以及资产返回时刻合并到该对象中。

 p = Portfolio('AssetList',AssetList,'RiskFreeRate',CashMean);
 p = setAssetMoments(p,AssetMean,AssetCovar);

为了提供比较的基础,建立一个等权投资组合,并使其成为Portfolio对象中的初始投资组合。请记住,稍后要建立的对冲投资组合将需要不同的初始投资组合。创建初始投资组合后,estimatePortMoments函数将估算等权投资组合收益的均值和标准差。

 p = setInitPort(p,1/p.NumAssets);
 [ersk,eret] = estimatePortMoments(p,p.InitPort);

专门的“帮助”函数portfolioexamples_plot(请参见工具函数部分)使得可以在此处绘制所有要开发的结果。第一张图显示了根据资产的均值和收益的标准偏差分配的资产。此外,等权重、市场和现金投资组合都绘制在同一图上。请注意,portfolioexamples_plot函数将每月总回报转换为年化总回报。

 clf;
 portfolioexamples_plot('Asset Risks and Returns', ...
     {
    'scatter', mrsk, mret, {
    'Market'}}, ...
     {
    'scatter', crsk, cret, {
    'Cash'}}, ...
     {
    'scatter', ersk, eret, {
    'Equal'}}, ...
     {
    'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

cda5f384a11d72e2c8c529e1467aef16.png

设置投资组合优化问题

使用需要完全投资的仅做多头投资组合(非负权重之和必须等于1)的setDefaultConstraints函数来设置“标准”或默认的平均方差投资组合优化问题。给定初始问题,用函数estimateFrontierestimatePortMoments估计函数的有效边界,其中estimateFrontier估计有效的投资组合,estimatePortMoments估计投资组合的风险和收益。下图覆盖到前一个图的有效边界上。

 p = setDefaultConstraints(p);
 ​
 pwgt = estimateFrontier(p,20);
 [prsk,pret] = estimatePortMoments(p,pwgt);
 ​
 % Plot efficient frontier
 ​
 clf;
 portfolioexamples_plot('Efficient Frontier', ...
     {
    'line', prsk, pret}, ...
     {
    'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {
    'Market', 'Cash', 'Equal'}}, ...
     {
    'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

e731600d46bcdbc038b8ba050a87f897.png

为有效边界绘制切线

托宾的共同基金定理(Tobin,1958年)说,投资组合分配问题可以看作是在无风险资产和有风险资产之间进行分配的决策。在均值方差框架中,现金可以用作无风险资产的代理,而有效边界上的有效投资组合可以用作风险组合,这样现金和此投资组合之间的任何分配都可以控制有效边界上的所有其他投资组合。此投资组合称为“ 相切”投资组合,因为它位于有效边界上的点,在该点上,源自无风险资产的切线与有效边界相接触。

假设Portfolio对象已经具有无风险利率,通过创建Portfolio对象的副本来获得切线,该副本的预算限制允许在0%到100%之间分配现金。由于Portfolio对象是值对象,因此可以通过将Portfolio函数或“set”函数的输出分配给Portfolio对象的新实例来创建副本。该图显示了有效边界,而Tobin的分配形成了有效边界的切线。

 q = setBudget(p, 0, 1);
 ​
 qwgt = estimateFrontier(q,20);
 [qrsk,qret] = estimatePortMoments(q,qwgt);
 ​
 % Plot efficient frontier with tangent line (0 to 1 cash)
 ​
 clf;
 portfolioexamples_plot('Efficient Frontier with Tangent Line', ...
     {
    'line', prsk, pret}, ...
     {
    'line', qrsk, qret, [], [], 1}, ...
     {
    'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {
    'Market', 'Cash', 'Equal'}}, ...
     {
    'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

807262aa315ec5626831204d954db98d.png

请注意,现金实际上具有较小的风险,因此切线不会穿过现金资产。

获取风险和回报范围

为了获得风险目标值或收益目标值的有效投资组合,有必要获得有效边界上所有投资组合的风险和收益范围。这是通过estimateFrontierLimits函数完成的。

 [rsk,ret] = estimatePortMoments(p,estimateFrontierLimits(p));
 ​
 display(rsk);
 rsk = 2×1
 ​
     0.0348
     0.0903
 display(ret);
 ret = 2×1
 ​
     0.0094
     0.0179

每月投资组合收益的范围在0.9%至1.8%之间,投资组合风险的范围在3.5%至9.0%之间。以年度计算,投资组合收益的范围为11.2%至21.5%,投资组合风险的范围为12.1%至31.3%。

寻找具有目标回报率和目标风险的投资组合

考虑到风险和回报的范围内,可以使用以下函数找到具有目标值回报和目标风险有效前沿的具体投资组合:estimateFront

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值