matlab——资产组合的有效前沿

现有3种资产的投资组合,预期的资产未来可实现的收益率,成为预期收益率,其值为r=(0.1,0.15,0.12).未来投资收益的不确定性投资风险称为投资风险,可以用预期收益率的标准差来表示,称为与其标准差,其值为s=(0.2,0.25,0.18)\rho =\bigl(\begin{smallmatrix} 1& 0.8& 0.4\\ 0.8& 1 & 0.3\\ 0.4& 0.3 & 1 \end{smallmatrix}\bigr)

现在问,

(1)当资产收益为0.12时,求解最优组合。

(2)有效前沿是什么

  • 首先让我们感受资产组合

我们要求的是投资比例x=(x1,x2,x3)

其中预期收益率为xE(r)

投资组合预期方差为\delta ^{2}=X^{T}VX,其中V是协方差矩阵。

我们的目标函数是

预期最大 maxE(r')=xE(r) 

方差最小 min X^{T}VX

约束条件\sum x=1

  • 通过图形来感受资产预期收益率,预期标准差的分布表状况。

代码如下

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.')%以风险为横轴,预期为纵轴,绘制散点图

以下是资产组合预期收益率、预期标准差的分布状况。 

matlab——资产组合的有效前沿_第1张图片

    

  • 下面我们来求最优解

可知这是一个多目标规划问题

我们要将其转化为单目标规划问题,由问题知我们可以将预期收益率设为大于等于0.12

由此,有以下模型

minX^{T}VX

s.t.\begin{cases} xE(r)>=\mu & \sum x=1 & \end{cases}

其中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)

matlab——资产组合的有效前沿_第2张图片

红圈是最优解的位置

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

matlab——资产组合的有效前沿_第3张图片

你可能感兴趣的:(matlab——资产组合的有效前沿)