现有3种资产的投资组合,预期的资产未来可实现的收益率,成为预期收益率,其值为.未来投资收益的不确定性投资风险称为投资风险,可以用预期收益率的标准差来表示,称为与其标准差,其值为
,
现在问,
(1)当资产收益为0.12时,求解最优组合。
(2)有效前沿是什么
我们要求的是投资比例,
其中预期收益率为
投资组合预期方差为,其中V是协方差矩阵。
我们的目标函数是
预期最大
方差最小
约束条件
代码如下
r=[0.1,0.15,0.12];s=[0.2,0.25,0.18];
ro=[1,0.8,0.4;0.8,1,0.3;0.4,0.3,1];
v=diag(s)*ro*diag(s)%求协方差阵
x=rand(1000,3);%产生1000组1以内的随机数
total=sum(x,2);%按行加和
for j=1:3
x(:,j)=x(:,j)./total;%归一化
end
expectation=x*r';%求每组预期期望和
for j=1:1000
risk(j)=x(j,:)*v*x(j,:)';%求每组的风险
end
plot(risk,expectation,'b.')%以风险为横轴,预期为纵轴,绘制散点图
以下是资产组合预期收益率、预期标准差的分布状况。
可知这是一个多目标规划问题
我们要将其转化为单目标规划问题,由问题知我们可以将预期收益率设为大于等于0.12
由此,有以下模型
s.t.
其中u=0.12
我们可以运用非线性规划来求解
复习一下之前的非线性规划内容
这里会分别用matlab和lingo进行求解
matlab代码
构造句柄函数
function y=fun2(x)
s2 =[0.0400 0.0400 0.0144
0.0400 0.0625 0.0135
0.0144 0.0135 0.0324];
y=x*s2*x';
x0=[1,1,1]./3;
Aeq=ones(1,3);
beq=1;
[x,fval]=fmincon(@fun2,x0,-r,-0.12,Aeq,beq,zeros(3,1),ones(3,1))
E=x*r';
hold on
plot(fval,E,'ro', 'markersize',12,'linewidth',3)
红圈是最优解的位置
x =
0.2298 0.1533 0.6169
fval =
0.0254
我们再用lingo解一次
model:
title heheda;
sets:
exp/1,2,3/:r,x,y;
risk/1,2,3/:s;
link(exp,risk):v,ro;
endsets
data:
r=0.1,0.15,0.12;
s=0.2,0.25,0.18;
ro=1,0.8,0.4
0.8,1,0.3
0.4,0.3,1;
y=1,1,1;
enddata
calc:
@for(link(i,j):v(i,j)=ro(i,j)*s(i)*s(j));
endcalc
init:
!x=0.3333333333333333,0.333333333333333333,0.333333333333333333;
x=0.3,0.3,0.4;
endinit
min=@sum(link(i,j):v(i,j)*x(i)*x(j));
@sum(exp(i):x(i))=1;
end
答案有些许不同(只保留我们需要的解)
Local optimal solution found.
Objective value: 0.2495639E-01
X( 1) 0.3888532
X( 2) 0.2350565E-01
X( 3) 0.5876412
有效前沿是所有最佳组合的集合,一般无法用函数表达,可以采用均匀选取离散点的方式来表达结果。
可知收益率最高是0.15,最低时0.1,我们可以使用matlab进行仿真实验
代码如下
clc,clear,clf
r=[0.1,0.15,0.12];s=[0.2,0.25,0.18];
ro=[1,0.8,0.4;0.8,1,0.3;0.4,0.3,1];
v=diag(s)*ro*diag(s)%求协方差阵
x=rand(1000,3);%产生1000组1以内的随机数
total=sum(x,2);%按行加和
for j=1:3
x(:,j)=x(:,j)./total;%归一化
end
expectation=x*r';%求每组预期期望和
for j=1:1000
risk(j)=x(j,:)*v*x(j,:)';%求每组的风险
end
plot(risk,expectation,'b.')%以风险为横轴,预期为纵轴,绘制散点图
x0=[1,1,1]./3;
Aeq=ones(1,3);
beq=1;
f=[];E=[];
X=[]
for i=linspace(0.1,0.15,1000)%在0.1到0.15内取1000个数(等距)
b=i;
[x,fval]=fmincon(@fun2,x0,-r,-b,Aeq,beq,zeros(3,1),ones(3,1));
X=[X;x,fval];
E=[E,x*r'];
f=[f,fval];
end
hold on
plot(f,E,'r-','linewidth',2)
xlabel('风险'),ylabel('收益率')
title('收益风险的关系')
hold off
X