投资的收益与风险问题2024.1.15

发布时间:2024年01月18日

目录

问题:

建立模型:

模型转化:

A:

?B:

模型求解与分析

A.One:

A.Two:

?B:


问题:

给定n种资产,每种资产有r_i的收益率和q_i的风险损失率(重点在风险而不是损失)。

假设每种购买x_i,总投资为M

每种资产在交易时还要缴费?\left\{\begin{matrix} x_i*p_i &&x>u_i \\ u_i &&0< x\leq u_i\\ 0 &&x_i=0 \end{matrix}\right.

最终风险评定以T= max\ \ x_i*q_i为值

此外,还有银行,无风险无缴费?q_0=p_0=0,收益为x_0*r_0。所以总投资选择为n+1,即i=0,1,2\cdots n

总净收益为收益减缴费Z=\sum x_i*r_i-(u_i/x_i*p_i/0)

max \ Z同时min \ T

建立模型:

由于M\gg u_i,所以Z可以简化为\sum(r_i-p_i)*x_i

所以得出以下多目标规划模型:

目标函数为:

??????????? ??\left\{\begin{matrix} max \ Z\\ min\ T \end{matrix}\right.

约束为:

????????s.t.\left\{\begin{matrix} \sum x_i*(1+p_i)=M\\ x_i\geq 0&&i=0,1,2\cdots n \end{matrix}\right.

模型转化:

对于本文题,求解多目标规划模型,采用\varepsilon约束法和线性加权法。

A:

????????Ps:?\varepsilon约束法,即选择一个主要目标,而将其他目标放入约束条件中

????????????????例:

????????????????????????min \ f_k(x)

????????????????????????s.t.\left\{\begin{matrix} f_i(x)\leq \varepsilon _i& i=1,2,3,\cdots k-1,k+1,\cdots n\\ original.s.t& \\ x.s.t& \end{matrix}\right.

? ? ? ? ?????????对于取?min?则用?\leq?约束,对于取?max?则用?\geq?约束

????????则以下两种转化:

????????One:?选择max\ Z为主要目标,对风险进行固定约束

????????????????????????max \ Z

????????????????????????s.t.\left\{\begin{matrix} q_i*x_i\leq M*a & \\ \sum x_i*(1+p_i)=M& \\ x_i\geq 0& i=0,1,2\cdots n \end{matrix}\right.

????????Two:?选择min\ T为主要目标,对净收益进行约束

????????????????????????min \ T

????????????????????????s.t.\left\{\begin{matrix} \sum (r_i-p_i)*x_i\geq M*k &\\\sum x_i*(1+p_i)=M& \\ x_i\geq 0& i=0,1,2\cdots n\end{matrix}\right.

?B:

????????Ps:?线性加权法,即将所有目标按照重要程度,分权整合为一个目标函数,求解新目标函数的最优(先化成同样类型,即同取min或同取max,再整合)

? ? ? ? ????????例:

???????????????????????min \ \sum w_i*f_i(x)?

????????????????????????s.t.\left\{\begin{matrix} \sum w_i=1 & 0\leqslant w_i\leqslant 1,i=1,2,\cdots n\\ original.s.t.& \\ x.s.t.& \end{matrix}\right.?

? ? ? ? ?则原模型转化为:

????????????????????????min \ w*T-(1-w)*Z

????????????????????????s.t.\left\{\begin{matrix} \sum x_i*(1+p_i)=M\\ x_i\geq 0&&i=0,1,2\cdots n \end{matrix}\right.

模型求解与分析

原题数据如下:

n=4时的数据
r_i? ? ? ? ?%q_i? ? ? ? %p_i? ? ? ? %u_i
10.05000
20.280.0250.01103
30.210.0150.02198
40.230.0550.04552
50.250.0260.06540

M=10000

A.One:

对于a的选取,由于要最小化风险,所以a的取值要较小,但不知道多小合适。

所以让a从0开始,按步长为0.001增长,增到0.05(0.05*M已经很大了),进行绘图分析。

???????????????????????max \ \sum (r_i-p_i)*x_i

????????????????????????s.t.\left\{\begin{matrix} q_i*x_i\leq M*a & \\ \sum x_i*(1+p_i)=M& \\ x_i\geq 0& i=0,1,2\cdots n \end{matrix}\right.

clc,clear,close all
c=[0.05,0.27,0.19,0.185,0.185];%ri-pi
prob=optimproblem("ObjectiveSense","max");
x=optimvar("x",5,1,"LowerBound",0);
prob.Objective=c*x;
b=[1,1.01,1.02,1.045,1.065];
M=10000;
prob.Constraints.con1=b*x==M;
a=0;aa=[];vv=[];xx=[];
%aa记录每次a的值,vv记录每次的结果,xx记录每次对应取值
q=[0.025,0.015,0.055,0.026]';
hold on
while a<0.05
    prob.Constraints.con2=q.*x(2:end)<=a*M;

    %matlab矩阵点乘,对应位置相乘但最终不会相加变为标量
    %相加小于等于不代表分别小于等于,所以不能整合

    [s,v]=solve(prob);
    aa=[aa;a];
    vv=[vv;v];
    xx=[xx;s.x'];
    a=a+0.001;
end
plot(aa,vv,"*r");
xlabel("$a$","Interpreter","latex");
ylabel("$v$","Interpreter","latex","Rotation",0);

disp(aa);
disp(vv);
disp(xx);

图像如下

?disp(xx)

   1.0e+04 *

    1.0000         0         0         0         0
    0.8316    0.0400    0.0667    0.0182    0.0385
    0.6633    0.0800    0.1333    0.0364    0.0769
    0.4949    0.1200    0.2000    0.0545    0.1154
    0.3266    0.1600    0.2667    0.0727    0.1538
    0.1582    0.2000    0.3333    0.0909    0.1923
         0    0.2400    0.4000    0.1091    0.2212
         0    0.2800    0.4667    0.1273    0.1016
         0    0.3200    0.5333    0.1271         0
         0    0.3600    0.6000    0.0233         0
         0    0.4000    0.5843         0         0
         0    0.4400    0.5447         0         0
         0    0.4800    0.5051         0         0
         0    0.5200    0.4655         0         0
         0    0.5600    0.4259         0         0
         0    0.6000    0.3863         0         0
         0    0.6400    0.3467         0         0
         0    0.6800    0.3071         0         0
         0    0.7200    0.2675         0         0
         0    0.7600    0.2278         0         0
         0    0.8000    0.1882         0         0
         0    0.8400    0.1486         0         0
         0    0.8800    0.1090         0         0
         0    0.9200    0.0694         0         0
         0    0.9600    0.0298         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0
         0    0.9901         0         0         0

由图和disp(xx)可以得出:

  • 风险越大,收益越大
  • 投资越分散,风险越小
  • a=0.01之前存在拐点\dot{a},在\dot{a}之前风险增长较慢而净收益增涨较快,之后则相反。所以\dot{a}即为合适的取值。

缩小范围,进一步求a。令阈值为0.01

图像如下

可以看出a=0.006即为拐点,利用disp找到对应数据。

即当a=0.006时,此时净收益较大,且风险较小,最为合适。净收益为2019.1x取值为x_0=0,x_1=2400,x_3=4000,x_4=1091,x_5=2212

A.Two:

目标函数为最大值最小化,则可以将最大值转换为约束条件

????????????????????????min \ x_{n+1}

????????????????????????s.t.\left\{\begin{matrix} x_i*q_i\leq x_{n+1}\\ \sum (r_i-p_i)*x_i\geq M*k &\\\sum x_i*(1+p_i)=M& \\ x_i\geq 0& i=0,1,2\cdots n\end{matrix}\right.

clc,clear,close all

prob=optimproblem();
x=optimvar("x",6,1,"LowerBound",0);
q=[0.025,0.015,0.055,0.026]';
b=[1,1.01,1.02,1.045,1.065];
c=[0.05,0.27,0.19,0.185,0.185];
M=10000;
prob.Objective=x(6);
prob.Constraints.con1=q.*x(2:5)<=x(6);
prob.Constraints.con2=b*x(1:5)==M;
k=0;kk=[];vv=[];xx=[];
hold on
while k<0.26
    prob.Constraints.con3=c*x(1:5)>=k*M;
    
    %k取太大可能造成无解,则k没有对应的v,plot会报错
    
    [s,v]=solve(prob);
    kk=[kk;k];
    vv=[vv;v];
    xx=[xx;s.x'];
    k=k+0.001;
end
plot(kk,vv,"*r");
xlabel("$k$","Interpreter","latex");
ylabel("$v$","Interpreter","latex","Rotation",0);
disp(kk);
disp(vv);
disp(xx);

?由图和disp(xx)可得出与A.One相同的结论

对于拐点选择0.2附近的,再缩小范围,可得出近似拐点0.21

所以得当k=0.21时,净收益为2100x_0=0,x_1=3088.7,x_2=5147.9,x_3=1404.0,x_4=152.4

?B:

???????????????????????min \ w*T-(1-w)*Z

????????????????????????s.t.\left\{\begin{matrix} \sum x_i*(1+p_i)=M\\ x_i\geq 0&&i=0,1,2\cdots n \end{matrix}\right.

clc,clear,close all
b=[1,1.01,1.02,1.045,1.065];
q=[0.025,0.015,0.055,0.026]';
c=[0.05,0.27,0.19,0.185,0.185];%ri-pi
M=10000;
prob=optimproblem();
x=optimvar("x",6,1,"LowerBound",0);
prob.Constraints.con1=b*x(1:5)==M;
prob.Constraints.con2=q.*x(2:5)<=x(6);
w=0.6;ww=[];tt=[];zz=[];xx=[];

while w<1
    prob.Objective=w*x(6)-(1-w)*c*x(1:5);
    [s,v]=solve(prob);
    ww=[ww;w];
    xx=[xx;s.x'];
    t=s.x(6);
    tt=[tt;t];%记录风险
    z=c*s.x(1:5);
    zz=[zz;z];%记录净收益
    w=w+0.001;
end
subplot(3,1,1);
plot(ww,tt,"-r");
subplot(3,1,2);
plot(ww,zz,"-r");
subplot(3,1,3);
plot(tt,zz,"-r");
disp(ww);
disp(tt);
disp(zz);
disp(xx);


?

?

得到对应拐点的数据(59.3960,2.0162)?

在拐点之前,风险与收益均平稳增涨,而后风险增幅变大,收益增幅相对减少。

所以选拐点处最合适,净收益为2016.2x_0=0,x_1=237.6,x_2=396.0,x_3=108.0,x_4=228.4

由前两张图和disp(xx)也可以得出和A.One同样的结论

小计:

  • 多目标问题转换为线性归还求解
  • 最大值最小化目标函数转化
  • 图像与数据分析,拐点的特殊性
  • matlab中循环的应用

文章来源:https://blog.csdn.net/Xing_ke/article/details/135595641
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。