% 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)%计算绩效
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
组合优化.rar (16个子文件)
xianxingguihua.m 2KB
SharpeFunc.m 611B
junzhifangcha4.m 1KB
mainOptimization.m 458B
fengxianPingjia.m 2KB
youxiaoqianyanShixian.m 3KB
calcWeight.m 1KB
净值比较.jpg 34KB
fun2.m 198B
净值.xlsx 159KB
junzhifangchaModel.m 577B
fengxianPingjiaMy.m 2KB
junzhifangcha1.m 1KB
有效前言最大夏普最小风险.jpg 82KB
youxiaoqianyan.m 3KB
riskparity_function.m 224B
共 16 条
- 1
资源评论
- 一尘不染议程表2019-07-25关于风险平价模型的代码,计算权重w,我看你的代码就基于目前的数据算了一次的权重,没有设定滚动T计算动态的w,所以你计算风险平价的净值是有问题的。还有就是关于那个非线性方程的时候,你有没有用牛顿法做过?
- dingyuekun2020-07-01关于组合净值的计算,作者确实只在最初期计算了一次权重、没有滚动计算,我只好自己重写了回测部分的代码
zhyl4669
- 粉丝: 34
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity适用于Windows与移动平台双端的轮盘交互式提示菜单
- UE5/UE4超详细教程接入科大讯飞语音唤醒SDK并初始持久监听(10102错误码解决)
- 靠搬运古装剧解说视频,日收益200+,作品原创度90%以上,超详细教程-教程网盘链接提取码下载 .txt
- 2024最强数学建模之美赛攻略.md
- STM32单片机FPGA毕设电路原理论文报告一种机器人寻线控制系统
- STM32单片机FPGA毕设电路原理论文报告一种光电编码器位置检测系统研究与应用
- linux常用命令大全
- ACM题库,分类整理.md
- STM32单片机FPGA毕设电路原理论文报告一种高速折刀运动控制系统的设计与实现
- ZYWIFI0939C循迹、红外避障、遥控综合程序.plg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功