主要内容

二次规划投资组合优化,具体问题具体分析

这个例子展示了如何使用具体问题具体分析的方法解决组合优化问题。solver-based方法,请参阅投资组合优化问题的二次规划,Solver-Based

二次模型

假设一个投资组合包含n美元不同的资产。资产的回报率我美元是一个随机变量与期望值m_i美元。问题是要找到什么分数x_i美元在每个资产投资我美元为了最小化风险,受制于特定的最低预期回报率。

美元加元的协方差矩阵表示的资产回报。

经典的均值-方差模型由最小化投资组合风险,作为衡量

$ $ \压裂{1}{2}x ^ T C x $ $

一组约束。

预期收益应不少于一个最小的投资组合的回报率r美元投资者的欲望,

$ $ \ sum_ {i = 1} ^ n m_i \;通用电气x_i \ r, $ $

投资分数的总和x_i美元的应该总共加起来,

$ $ \ sum_ {i = 1} ^ n x_i = 1, $ $

被分数(或百分比),他们应该是0和1之间的数字,

$ $ 0 \ le x_i \勒1 \;\ \;;i = 1 \ ldots n。$ $

因为目标投资组合风险降到最低是二次,和约束是线性的,由此产生的优化问题是一个二次程序,或QP。

225 -资产问题

现在让我们解决QP拥有225资产。的数据集或图书馆(Chang T.-J。米德,N。,Beasley, J.E. and Sharaiha, Y.M., "Heuristics for cardinality constrained portfolio optimisation" Computers & Operations Research 27 (2000) 1271-1302].

我们加载数据集,然后设置约束条件的具体问题具体分析的方法。在这个数据集的回报率m_i美元介于-0.008489和0.003971之间;我们选择一个理想的回报r美元在之间,例如,0.002 (0.2%)。

存储在一个MAT-file加载数据集。

负载(“port5.mat”,“相关”,“stdDev_return”,“mean_return”)

计算相关矩阵的协方差矩阵。

协方差=相关性。* (stdDev_return * stdDev_return”);nAssets =元素个数(mean_return);r = 0.002;%的资产和所期望的回报

创建优化问题、目标和约束

创建一个最小化的优化问题。

portprob = optimproblem;

创建一个向量优化变量“x”nAssets元素。这个变量代表了财富投资于每个资产的一部分,所以应该躺在0和1之间。

x = optimvar (“x”nAssets,下界的0,“UpperBound”1);

目标函数是协方差1/2 * x ' * * x。包括这一目标问题。

协方差目标= 1/2 * x ' * * x;portprob。目标=目标;

变量之和为1,这意味着整个投资组合投资。表达的约束并将其问题。

sumcons = sum (x) = = 1;portprob.Constraints。sumcons = sumcons;

必须大于平均回报r。表达的约束并将其问题。

averagereturn =点(mean_return x) > = r;portprob.Constraints。averagereturn = averagereturn;

解决225 -资产问题

设置一些选项,解算器。

打开迭代显示设置选项,并设置一个严格最优终止宽容。

选择= optimoptions (“quadprog”,“显示”,“通路”,“TolFun”1平台以及);

解算器和测量所打电话。

抽搐(x1, fval1) =解决(portprob,“选项”、选择);toc
Iter Fval原始Infeas双重Infeas互补0 7.212813 1.227500 e + e + 00 02 1.195948 e + 00 2.217295 e 03 1 7.220766 2.250524 8.160874 3.615084 e-04 e-01 3.522160 e 03 e-05 2 e-04 e-01 3.592574 9.734292 9.991108 4.309434 3.500229 3.378157 e 03 e-05 3 e-04 e-02 e-04 e-05 4 2.790551 4.719034 4.734300 4.242216 7.771561 5.551115 e-04 e-16 e-16 e-06 5 e-04 4.440892 3.587475 6.661338 8.002618 3.122502 e-16 e-16 e-07 6 e-04 e-16 e-18 3.035766 9.586695 3.686287 8.881784 3.131814 3.677066 e-07 7 e-04 e-16 e-18 e-08 8 2.345751 2.760174 1.521063 1.463673 7.771561 e-04 e-16 e-18 e-08 9 e-04 e15汽油1.110223 1.221245 2.042487 1.138412 4.109608 e-18 e-09 10 e-04 e15汽油9.757820 1.110223 1.961775 1.084202 6.423267 e-18 e-09 11 e-04 e-16 e-19 6.068329平台以及12 4.279951 9.215718 4.440892 1.949281 e-04 e-16 e-19 e-12最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。运行时间是0.292806秒。

阴谋的结果。

plotPortfDemoStandardModel (x1.x)

225 -资产组约束的问题

现在我们添加到模型组约束,要求投资者30%的资金投资于资产1到75年,30%的资产76年到150年,30%,151年到225年的资产。这些组织的资产,例如,不同行业如技术、汽车和制药。这个新的需求捕获的约束

$ $ \ sum_ {i = 1} ^ {75} x_i \通用电气0.3 \ qquad $ $ & # xA; $ $ \ sum_{我= 76}^ {150}x_i \通用电气0.3 \ qquad $ $ & # xA; $ $ \ sum_{我= 151}^ {225}x_i \通用电气0.3,$ $

组约束添加到现有的平等。

grp1 =总和(x (1:75)) > = 0.3;grp2 =总和(x (76:150)) > = 0.3;grp3 =总和(x (151:225)) > = 0.3;portprob.Constraints。grp1 = grp1;portprob.Constraints。grp2 = grp2;portprob.Constraints。grp3 = grp3;

解算器和测量所打电话。

抽搐(x2, fval2) =解决(portprob,“选项”、选择);toc
Iter Fval原始Infeas双重Infeas互补0 7.212813 3.539920 1.227500 e + e + 00 02 e-01 5.253824 e 03 1 7.004556 e 03 2.901399 e + 00 8.367185 e 03 2.207460 e 03 2 9.181962 e-04 4.095630 e-01 1.181116 e 03 3.749424 e-04 3 7.515047 e-04 3.567918 e-01 1.028932 e 03 1.607718 2.597127 9.005778 4.238346 3.486333 e-04 4 e-04 e-02 e-04 e-04 5 3.691407 3.695008 1.341881 5.507829 1.909891 e-04 e-04 e-07 e-05 6 e-04 7.691892 3.010636 6.146337 6.817457 1.772508 e-07 e-09 e-08 7 e-04 e-08 e-08 8 2.218223平台以及1.837302 2.195767 2.669065 5.474712 3.138350 1.088252 e-04 e-08 e-11 e-09 9 e-04 8.122574平台以及2.342425 e-12 2.814320 e-08 10 2.102910 e-04 2.839773平台以及8.189470 e-13 2.876950 1.936133 6.713696 2.060985 1.037476 e-08 11 e-04 e-11 e-13 e-09 12 8.131516 2.015107 e-04 0.000000 e + 00 e-19 5.264375 8.673617 4.440892 2.009670 1.522226平台以及13 e-04 e-16 e-19 e-13最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。运行时间是0.162406秒。

阴谋的结果,叠加在结果之前的问题。

plotPortfDemoGroupModel (x1.x x2.x);

到目前为止的结果总结

我们看到从第二条情节,由于额外的组约束、投资组合更均匀地分布在这三个资产组比第一组合。这种强加的多元化也导致风险略有增加,以目标函数(见列标记为“f (x)”在最后一次迭代的迭代显示为运行)。

1000 -使用随机数据资产问题

为了展示如何解决者的行为在一个更大的问题,我们将使用一个1000 -资产随机生成的数据集。我们生成一个随机相关矩阵(对称半正定,对角线)使用画廊在MATLAB®。

重置随机流再现性。

rng (0,“旋风”);nAssets = 1000;%所需数量的资产

创建随机数据

产生的回报在-0.1和0.4之间。

一个= -0.1;b = 0.4;mean_return = a + (b)。*兰德(nAssets, 1);r = 0.15;%想要回报

0.08和0.6之间产生回报率的标准差。

一个= 0.08;b = 0.6;stdDev_return = a + (b)。*兰德(nAssets, 1);

加载相关矩阵,即使用生成的相关=画廊(randcorr, nAssets)。(生成一个这种规模的相关矩阵,需要一段时间,所以加载预先生成一个。)

负载(“correlationMatrixDemo.mat”,“相关”);

计算相关矩阵的协方差矩阵。

协方差=相关性。* (stdDev_return * stdDev_return”);

创建优化问题、目标和约束

创建一个最小化的优化问题。

portprob2 = optimproblem;

创建优化向量变量“x”nAssets元素。

x = optimvar (“x”nAssets,下界的0,“UpperBound”1);

包括目标函数的问题。

协方差目标= 1/2 * x ' * * x;portprob2。目标=目标;

包括约束变量的总和是1和平均回报大于r

sumcons = sum (x) = = 1;portprob2.Constraints。sumcons = sumcons;averagereturn =点(mean_return x) > = r;portprob2.Constraints。averagereturn = averagereturn;

解决1000 -资产问题

解算器和测量所打电话。

抽搐x3 =解决(portprob2,“选项”、选择);toc
Iter Fval原始Infeas双重Infeas互补0 2.142849 5.490000 e + e + 01 02 3.031839 e + 00 5.210929 e 03 1 9.378552 6.331676 3.555978 6.439102 e + e 03 00 e-02 e-04 2 1.118804 1.128129 3.705915 1.802721 2.046582 e 03 e-05 e-05 e-04 3 e-04 7.650016 8.490176 1.852958 1.170562 1.023291 e-06 e-08 e-07 4 e-05 e-08 3.062871 4.440892 3.364597 4.224702 7.048637平台以及e-09 5 e-05 e-16 e-18 8.465558 8.876905 2.220446 1.980189 1.037370 e-09 6 e-05 e-16 e-19 e-11最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。运行时间是0.913357秒。

总结

这个例子演示了如何使用在一个投资组合优化的问题,具体问题具体分析的方法,显示了算法运行时间二次不同大小的问题。

更复杂的分析是有可能通过使用专门为投资组合优化设计的特点在金融工具箱™。

相关的话题