% https://blog.csdn.net/qq_43264642/article/details/89413594
% matlab——资产组合的有效前沿
% 现有3种资产的投资组合,预期的资产未来可实现的收益率,成为预期收益率,其值为.
% 未来投资收益的不确定性投资风险称为投资风险,可以用预期收益率的标准差来表示,称为与其标准差,其值为,
% 现在问,
% (1)当资产收益为0.12时,求解最优组合。
% (2)有效前沿是什么
% 首先让我们感受资产组合
% 我们要求的是投资比例,
% 其中预期收益率为
% 投资组合预期方差为,其中V是协方差矩阵。
% 我们的目标函数是 预期最大 ?方差最小? 约束条件为权重=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.')%以风险为横轴,预期为纵轴,绘制散点图
xlabel('风险','FontSize',12);
ylabel('预期','FontSize',12);
grid on;
% legends=['风险','预期']
% plotXY(risk,expectation,legends)
%%%
%%
% 下面我们来求最优解
% 可知这是一个多目标规划问题
% 我们要将其转化为单目标规划问题,由问题知我们可以将预期收益率设为大于等于0.12
% 由此,有以下模型
% s.t.
% 其中u=0.12
% 我们可以运用非线性规划来求解
% 构造句柄函数
x0=[1,1,1]./3;
Aeq=ones(1,3);% 每个资产权重相加等于1
beq=1;% 每个资产权重相加等于1
% [x,fval]=fmincon(@fun2,x0,-r,-0.12,Aeq,beq,zeros(3,1),ones(3,1))
s2=v;
[x,fval]=fmincon(@(x) fun2(x,s2),x0,-r,-0.12,Aeq,beq,zeros(3,1),ones(3,1)) %收益在,波动最小
% [X,FVAL,EXITFLAG] = fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,NONLCON,options,varargin)
E=x*r';
hold on
plot(fval,E,'ro', 'markersize',12,'linewidth',3)
%%
% 有效前沿
% 有效前沿是所有最佳组合的集合,一般无法用函数表达,可以采用均匀选取离散点的方式来表达结果。
% 可知收益率最高是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;