组合优化- 均值方差、最大夏普、风险平价模型

组合优化- 均值方差、最大夏普、风险平价模型-基于matlab的实现

理论性质的大家参考网上搜索吧:
关键词:均值方差模型的实现 风险平价模型的实现 组合优化matlab

以上模型实现本质是 二次规划问题求最优。数理理解还最好搜索下 二次型,规划求解,导数常见概念。

简单概括:
均值方差模型思想:在一定收益水平下,最小化风险
风险平价模型的思想:每个子资产贡献给组合的风险相同。
最大夏普思想:组合的超额收益除以波动最大化。组合超额一般和0比较了,所以即为组合收益除以波动。

如果刚开始有点晕乎,可以先运行下 试下 https://545c.com/file/24889670-436467883 然后 再根据结果看以下理论 :
一、对思想的理解程序类:
1 、组合优化思想
均值-方差模型
资产配置在投资中是非常重要的过程,经典的资产配置方式就是马格维茨的均值-方差模型。目标是在给定预期收益率下最小化方差(风险),或给定风险水平下最大化收益,通过拉格朗日乘子法,可以计算出一个有效前沿,我们可以根据有效前沿来配置资产。但在实践过程中,我们常常发现计算的结果是某几个资产的权重特别大,收益和风险都集中在了这些资产上

风险平价组合(risk parity)
基于均值方差模型的不足,PanAgora基金的首席投资官Edward Qian博士提出了著名的风险平价(Risk Parity)策略,这一思想被Bridgewater基金运用于实际投资。

1 、组合优化思想

马科维茨(Harry M.Markowitz,)1990年因其在1952年提出的投资组合选择(Portfolio Selection)理论获得诺贝尔经济学奖。
主要贡献:发展了一个在不确定条件下严格陈述的可操作的选择资产组合理论:均值方差方法 Mean-Variance methodology.
主要思想:Markowitz把投资组合的价格变化视为随机变量,以它的均值来衡量收益,以它的方差来衡量风险(因此Markowitz理论又称为均值-方差分析);把投资组合中各种证券之间的比例作为变量,那么求收益一定的风险最小的投资组合问题就被归结为线性约束下的二次规划问题。
再根据投资者的偏好,进行投资决策。

Markowitz投资组合模型是根据每种证券的预期收益率、方差及证券之间的协方差矩阵,计算得到投资组合的有效边界。再根据投资者的效用无差异曲线,确定最佳投资组合。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上是理论熟悉和理解。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
二、下面是 多资产配置的目前实际基金的应用配置:
*3、均值方差模型在 多资产运用 和31 锐2 天4 日享 远4 远1 **
在这里插入图片描述在这里插入图片描述

直接程序吧:如果报错 如算绩效提示没有函数 注释掉即可。上传了资源才发现,少打包了绩效计算函数,不影响,此处已经注释掉。
主函数:mainOptimization
%% 均值方差模型
%%
xianxingguihua % 线性规划 和0 1问题 求最优 实现
youxiaoqianyan % 资产组合有效前沿的实现 和0 - 1 最优问题
youxiaoqianyanShixian % 资产组合有效前沿的实现 用和31、日享、远4净值 求出最佳配置方式
% junzhifangchaModel% 均方模型
% junzhifangcha1 % 均方模型
% junzhifangcha4 % 均方模型 实现
%
% calcWeight
% SharpeFunc %夏普最优
%% 风险平价模型
%%
fengxianPingjia %风险平价

均值方差 优化 youxiaoqianyanShixian:

在这里插入代码片% https://blog.csdn.net/qq_43264642/article/details/89413594
% matlab——资产组合的有效前沿

% 现有3种资产的投资组合,预期的资产未来可实现的收益率,成为预期收益率,其值为.
% 未来投资收益的不确定性投资风险称为投资风险,可以用预期收益率的标准差来表示,称为与其标准差,其值为,
% 现在问,
% (1)当资产收益为0.4时,求解最优组合。
% (2)有效前沿是什么
% 首先让我们感受资产组合
% 我们要求的是投资比例,
% 其中预期收益率为
% 投资组合预期方差为,其中V是协方差矩阵。
% 我们的目标函数是 预期最大 ?方差最小? 约束条件为权重=1
% 以下是资产组合预期收益率、预期标准差的分布状况

%% 求解   r s ro v
clear; clc; close all
[~,~,raw] = xlsread('净值.xlsx','风险平价数据');
% [~,~,raw] = xlsread('净值.xlsx','sheet1');
% 统一 
Date  = raw(2:end,1);
Date=datenum(Date);

Price = cell2mat(raw(2:end,2:end)); %基础资产净值
Ret   = tick2ret(Price);
v =cov(Ret);
r= sum(Ret);
%%

% 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)%求协方差阵 
count=5000;%模拟次数
wrand=rand(count,size(Price,2));%产生count=5000组1以内的随机数  为权重
total=sum(wrand,2);%按行加和
for j=1:size(Price,2)
    wrand(:,j)=wrand(:,j)./total;%归一化
end
expectation=wrand*r';%求每组预期期望和
for j=1:count
    risk(j)=wrand(j,:)*v*wrand(j,:)';%求每组的风险
end

figzhanbi=figure;
plot(risk,expectation,'b.')%以风险为横轴,预期为纵轴,绘制散点图
xlabel('风险','FontSize',12);
ylabel('预期','FontSize',12);
grid on;
%% 
% 下面我们来求最优解
% 可知这是一个多目标规划问题
% 我们要将其转化为单目标规划问题,由问题知我们可以将预期收益率设为大于等于0.39
% 由此,有以下模型
% 我们可以运用非线性规划来求解
% 构造句柄函数
%% 收益 retE=0.2或者 40% 最小风险组合点
retE=0.2;
x0=ones(1,size(Price,2))./size(Price,2);
Aeq=ones(1,size(Price,2));% 每个资产权重相加等于1
beq=1;% 每个资产权重相加等于1
%  [X,FVAL,EXITFLAG] = fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,NONLCON,options,varargin)
[x,fval]=fmincon(@(x) fun2(x,v),x0,-r,-retE,Aeq,beq,zeros(size(Price,2),1),ones(size(Price,2),1)) %收益在,波动最小
E=x*r';
hold on
plot(fval,E,'ro', 'markersize',12,'linewidth',3)
hold on 
%% 收益 retE 最小风险组合点净值计算   
RetTotal = Ret*x';
NetValueminRisk = ret2tick(RetTotal); % 净值

%% 最大夏普 组合点
[weight,fval,exitflag,output]=fmincon(@(w) SharpeFunc(w,Ret),x0,[],[],Aeq,beq,zeros(size(Price,2),1),ones(size(Price,2),1),[]); %夏普最大
Esharp=weight*r';
risk=weight*v*weight'
hold on
plot(risk,Esharp,'gx', 'markersize',12,'linewidth',3)
saveas(figzhanbi,['有效前言最大夏普最小风险.jpg'])
%% 最大夏普 组合点 weight * Ret计算净值
%%
RetTotal = Ret*weight';
NetValueSharp = ret2tick(RetTotal); % 净值

%% 画图 净值
close all
fignet=figure;
plot(Date,NetValueminRisk,'b') %单利收益40%最小风险净值 蓝色表示 
% 此处单利收益是40% 代表每天收益率直接相加,非累乘。净值是累成得到的结果,即为复利计算得到的,所以两数据不等
hold on;

plot(Date,NetValueSharp,'g') %最大夏普净值
hold on;

plot(Date,ret2tick(mean(Ret,2)),'r') %等权净值
hold on;

set(gca,'XTick',Date) % 为了x数轴为日期形式,用了dateNum7 格式的date,别问我 为什么。怒对日期的处理化和很大比例,本来已经是在很多日期处理总结经验上的,不想说话
datetick('x','yy/mm/dd')
legend('单利收益20%最小风险净值','最大夏普净值','等权净值')  
saveas(fignet,['净值比较.jpg'])
 
Al=[NetValueminRisk NetValueSharp ret2tick(mean(Ret,2))];
%[Perf,RawPerf]=calcPerformance(Al,1,250,0)%计算绩效

在这里插入图片描述
此处为风险收益的 有效前沿,前沿线上的点 可以简单理解为 在一定的风险承受下,我需要的收益预期水平。 前沿点,也正是风险预算一定下,最大可能达到的收益预期。由此左侧是达不到的地方,右侧也是可以实现的地方。

风险平价 :fengxianPingjia:

在这里插入代码片clc;clear; 
%% 数据处理?? 
% https://cloud.tencent.com/developer/article/1397794
% http://m.sohu.com/a/279062829_750247

DataSet = xlsread('RiskParity2.xlsx'); 
DataSet = DataSet(:,2:end); 
[M,N] = size(DataSet); % 
NT = ceil((M-360)/30); 
algow = 1/N*ones(N,1); 
num = zeros(NT,1); 
W = 1/N*ones(1,N); 
%% ????????? 
for j=1:N 
    for i=1:M-1 
        if isnan(DataSet(i+1,j))==1 
            DataSet(i+1,j) = DataSet(i,j); 
        end 
    end 
end 
%% ?????????? 
ReturnRate = zeros(M-1,N); 
for j=1:N 
    for i=1:M-1 
        ReturnRate(i,j)=(DataSet(i+1,j)-DataSet(i,j))/DataSet(i,j); 
    end 
end 
%% 协方差矩阵??????? 
covmatrix = cov(ReturnRate); 
 
%% ????fmincon???????????????? 
options = optimoptions('fmincon','Algorithm','sqp','Display','off','TolCon',eps); 
X_old = []; 
fval_old = Inf; 
weightall= []; 
fvalall=  []; 
for i=1:20000 
    % rng('default');  % For reproducibility 
    x0 = trnd(1,N,1); % Best: Cauchy distribution 1/(pi(1+x^2)) 
    % x0 = randn(N,1); % Ok: Normal distributon N(0,1) 
    % x0 = rand(N,1); % Worst: Uniform distritbuion [0 1] 
    x0 = abs(x0); 
    x0 = x0/sum(x0); 
    Aeq = ones(1,N); 
    Beq = 1; 
    lb = zeros(N,1); 
    up = ones(N,1); 
    fun = @(x) riskparity_function(covmatrix, x); 
    [X,fval] = fmincon(fun,x0,[],[],Aeq,Beq,lb,up,[],options); 
    
    if fval<=fval_old 
        X_old = X; 
        fval_old = fval; 
    end 
     
    fprintf('Step %d: %.15f\n',i,fval_old) 
    
    weightall= [weightall;x0']; 
    fvalall=  [fvalall;fval]; 

end 

X = X_old; 
fval_min = fval_old; 
 
fprintf('The optimal X = [%f %f %f %f %f %f %f]\n', X) 
fprintf('The minimum is %.15f\n', fval_min) 
 
% The optimal X = [0.013376 0.026426 0.501881 0.327611 0.041506 0.053454 0.035747] 
% The minimum is 0.000000000000713 
 
% The optimal X = [0.036771 0.021524 0.470257 0.304334 0.058272 0.055556 0.053285] 
% The minimum is 0.000000000001605 
 
% The optimal X = [0.009767 0.025995 0.421532 0.422122 0.031370 0.049227 0.039988] 
% The minimum is 0.000000000001895 
%% 2????? 
%The optimal X = [0.146752 0.146585 0.190320 0.999990 0.148092 0.221034 0.147227] 
%The minimum is 0.000000001965164 

不同优化方式 权重和结果
在这里插入图片描述
在这里插入图片描述
资源打包 附有excel 数据和结果。有需要的朋友可以先跑起来。
matlab 我的是2016b, 以防没有个别函数,请您也用这个或者以上版本。

代码、数据及结果:
https://download.csdn.net/download/zhyl4669/11269297
https://download.csdn.net/my/uploads

MATLAB金融工具箱中的均值方差模型是一种常用的资产组合优化方法,它帮助投资者在给定一组资产的情况下,找到一个最优的资产配置方案。该模型基于资本资产定价模型(Capital Asset Pricing Model,CAPM)的理论,旨在最大化投资组合的预期收益,同时将投资风险降到最低。 均值方差模型的思想是通过计算资产收益率的均值方差来评估投资组合的表现。首先,我们需要通过历史数据或者预测模型来估计每个资产的收益率和风险。然后,根据投资者的偏好设置权重,即每个资产在投资组合中的比例。接下来,利用资产收益率和权重计算整个投资组合的预期收益率和方差。 MATLAB金融工具箱提供了一系列函数,包括meanvar模型函数,可以帮助我们对资产进行均值方差模型的分析。我们可以使用该函数输入资产收益率数据,并设置投资者的风险厌恶程度。最后,该函数会输出最优的资产配置比例,以及投资组合的预期收益率和方差。 使用均值方差模型可以帮助投资者做出理性的资产配置决策。通过权衡不同资产的预期收益和风险投资者可以根据自身的投资目标和偏好选择合适的资产组合,从而实现预期的收益最大化或者风险最小化。而MATLAB金融工具箱的均值方差模型功能,为投资者提供了方便快捷的工具,帮助他们分析和优化投资组合。 需要注意的是,均值方差模型假设资产收益率服从正态分布,并且忽略了其他可能的风险因素。因此,在实际应用中,投资者还需要考虑其他因素,如流动性风险、市场风险等,并适当调整模型的输入参数,以更准确地评估资产组合的表现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值