%% 读取净值/指数数据,求出收益率数据;
IndexNumber=4;%指数个数
text=cell(size(Indexsummary));
text(:,1)=Indexsummary(:,1);
text(1,:)=Indexsummary(1,:);
Data=cell2mat(Indexsummary(2:end,2:end));
load('情景分析.mat');
Net_Index=Data;
Datet=text(2:end,1);
Return_Index=tick2ret(Net_Index);
Return_Index(isnan(Return_Index)|isinf(Return_Index))=0;
[L,W]=size(Return_Index);
Net_Index_DatawithTime=[datenum(text(2:end,1),'yyyy/mm/dd') Net_Index];% 数据和日期
[L_Net_Index_DatawithTime,W_Net_Index_DatawithTime]=size(Net_Index_DatawithTime);
Return_Index_DatawithTime=[datenum(text(3:end,1),'yyyy/mm/dd') Return_Index];% 数据和日期
[L_Return_Index_DatawithTime,W_Return_Index_DatawithTime]=size(Return_Index_DatawithTime);
%%
%% 一、取出来情境事件日期,求是星期几。
Time_Event=text_Event(2:end,2:3);
Date2W=@(x)year(x)*10000+month(x)*100+day(x);
DateW=Date2W(Datet);
Time_EventW=Date2W(Time_Event);
Time_Event=Time_Event(sum(Time_EventW>DateW(1) & Time_EventW<DateW(end),2)==2,:);
time_raw=logical([1;sum(Time_EventW>DateW(1) & Time_EventW<DateW(end),2)==2]);
text_Event0=text_Event(time_raw,:);
[index_Time_Event_begin,d_Time_Event_begin] = weekday(datenum(Time_Event(:,1)),'long');
[index_Time_Event_end,d_Time_Event_end] = weekday(datenum(Time_Event(:,2)),'long');
[index_Time_Event] =[index_Time_Event_begin index_Time_Event_end];
[d_Time_Event]=[d_Time_Event_begin d_Time_Event_end];
Time_Event_Num=[datenum(Time_Event(:,1)) datenum(Time_Event(:,2))];
%% 判断事件星期,并修正情景事件起始日期为周五。
Time_Event_Re_Num=zeros(size(Time_Event));
j=1;
while j<3
for i=1:size(Time_Event,1)
switch index_Time_Event(i,j)
case 1
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-2;
case 2
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-3;
case 3
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-4;
case 4
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-5;
case 5
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-6;
case 6
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j);
case 7
Time_Event_Re_Num(i,j)=Time_Event_Num(i,j)-1;
end
end
j=j+1;
end
Time_Event_Re_Str=datestr(Time_Event_Re_Num,'yyyy/mm/dd');
%% 二、求各类型组合原收益序列的相关系数
% [~,Cor_Return]=Performance(Net_Index,52);
%%
%% 三、突发事件压力测试:求和突发事件起始日期相对应的各类型组合净值数据序列,并计算事件期间各类型组合收益
Time_Event_Re_Num_Ver=[Time_Event_Re_Num(:,1);Time_Event_Re_Num(:,2)];
Net_Index_DatawithTime_Event=[];
Return_DatawithTime_Event=[];
Key = [];
Cor_Return_Event_All=ones(W,W,size(Time_Event_Re_Num_Ver,1)/2);
for i=1:size(Time_Event_Re_Num_Ver,1)
tmp2=find(Net_Index_DatawithTime(:,1)==Time_Event_Re_Num_Ver(i));
Net_Index_DatawithTime_Event=[Net_Index_DatawithTime_Event;Net_Index_DatawithTime(tmp2,:)];
Return_DatawithTime_Event=[Return_DatawithTime_Event;Return_Index(tmp2,:)];
Key = [Key;tmp2];
tmp2=[];
end
Net_Index_DatawithTime_Event;
Return_Index_Event = Net_Index_DatawithTime_Event((size(Time_Event_Re_Num_Ver,1)/2+1):...
size(Time_Event_Re_Num_Ver,1),2:W_Net_Index_DatawithTime)./ Net_Index_DatawithTime_Event(1:(size(Time_Event_Re_Num_Ver,1))/2,2:W_Net_Index_DatawithTime)-1;
%% 计算事件期间各类型组合相关系数
Cor_Return_Event_All=ones(W,W,size(Time_Event_Re_Num_Ver,1)/2);
for q=1:size(Time_Event_Re_Num_Ver,1)/2
Return_Index_DatawithTime_Event=Return_Index_DatawithTime((Key(2*q-1):Key(2*q)),:);%此处改了q+4
Cor_Return_Event=corr(Return_Index_DatawithTime_Event(:,2:end));
clear Return_Index_DatawithTime_Event;
Cor_Return_Event_All(:,:,q)=Cor_Return_Event;
end
%%
%% 四、指数下跌3%压力测试:求当指数下跌3%时的各类型基金平均收益,以及指数下跌3%时的各类型组合相关系数
Cor_Return_Down_Percent_All=ones(W,W,IndexNumber);
Mean_Return_Down_Percent_All=[];
for n=W-IndexNumber+1:W
Return_Index_Down_Percent=[];
if n<W
pricedrop=-0.03;
else
pricedrop=-0.005;
end
for p=1:L_Return_Index_DatawithTime
switch Return_Index(p,n)<pricedrop
case 1
Return_Index_Down_Percent = [Return_Index_Down_Percent;Return_Index(p,:)];
end
end
Mean_Return_Down_Percent = nanmean(Return_Index_Down_Percent,1);
Cor_Return_Down_Percent = corr(Return_Index_Down_Percent);
Mean_Return_Down_Percent_All=[Mean_Return_Down_Percent_All;Mean_Return_Down_Percent];
Cor_Return_Down_Percent_All(:,:,n-(W-IndexNumber))=Cor_Return_Down_Percent;
clear Return_Index_Down_Percent;
end
%%
%% 五、指数上涨下跌分析:求当指数上涨下跌时的各类型基金平均收益,以及指数上涨下跌时的各类型组合相关系数
% clear Return_Index_Down Return_Index_Up
Mean_Return_Down=[];
Mean_Return_Down_ALL=[];
Cor_Return_Down_All=ones(W,W,4);
Cor_Return_Up_All=ones(W,W,4);
for m=W-3:W
Return_Index_Down=[];
Return_Index_Up=[];
for k=1:L_Return_Index_DatawithTime
switch Return_Index(k,m)>0.0
case 1
Return_Index_Up = [Return_Index_Up;Return_Index(k,:)];
case 0
Return_Index_Down = [Return_Index_Down;Return_Index(k,:)];
end
Mean_Return_Down= mean(Return_Index_Down);
Cor_Return_Down=corrcoef(Return_Index_Down);
Cor_Return_Up=corrcoef(Return_Index_Up);
end
clear Return_Index_Down;
clear Return_Index_Up;
Mean_Return_Down_ALL=[Mean_Return_Down_ALL;Mean_Return_Down];
Cor_Return_Down_All(:,:,m-(W-IndexNumber))=Cor_Return_Down;
Cor_Return_Up_All(:,:,m-(W-IndexNumber))=Cor_Return_Up;
end
%%
%% 七、写入excel
%%
%% 写入FOF压力测试收益结果-压力测试下收益结果表
temp1={'事件期间涨跌'};
Return_Index_Event0=zeros(length(time_raw)-1,W);
Return_Index_Event0(time_raw(2:end),:)=Return_Index_Event;
Eventupdown=[[temp1,cell(1,2+size(Return_Index_Event0,2))];[text_Event,[text(1,2:W+1);num2cell(Return_Index_Event0)]]];
%xlswrite(FileOutput,[[temp1,cell(1,2+size(Return_Index_Event0,2))];[text_Event,[text(1,2:W+1);num2cell(Return_Index_Event0)]]],'压力测试下收益情况','A1');
tmp=text(1,W-IndexNumber+2:W+1)';
for ii=1:length(tmp)
if strcmp(tmp{ii},'中债总财富指数')==0
tmp{ii}=[tmp{ii} '下跌3%'];
else
tmp{ii}=[tmp{ii} '下跌0.5%'];
end
end
temp2={'股指周跌幅跌超过3%或债指周跌幅超0.5%时组合与基金表现的平均收益'};
meanyeild3=Match(temp2,[cell(1,1),text(1,2:W+1);[tmp,num2cell(Mean_Return_Down_Percent_All)]],0,2);
%xlswrite(FileOutput,Match(temp2,[cell(1,1),text(1,2:W+1);[tmp,num2cell(Mean_Return_Down_Percent_All)]],0,2),'压力测试下收益情况','A11');
%%
%% 写入FOF压力测试收益相关-压力测试下相关系数表
% 各类型组合原收益序列的相关系数
Cor_Return=corrcoef(Return_Index);
Eventcoefficient=[];
temp4={'事件期间相关系数'};
for ii=1:length(text_Event0(:,1))-1
Corrtmp=Cor_Return_Event_All(:,:,ii);
titletmp=text(1,2:W+1);
nanposit=find(sum(isnan(Corrtmp))==size(Corrtmp,1));Corrtmp(nanposit,:)=[];Corrtmp(:,nanposit)=[];
titletmp(nanposit)=[];
Eventcoefficient=[Eventcoefficient Match(text_Event0(ii+1),[cell(1,1),titletmp;[titletmp',num2cell(Corrtmp)]],0,2)];
%xlswrite(FileOutput,Match(text_Event0(ii+1),[cell(1,1),titletmp;[titletmp',num2cell(Corrtmp)]],0,2),'事件期间相关系数',['A' num2str(20*(ii-1)+1)]);
end
temp51={'沪深300下跌3%时候组合和指数相关系数'};
comindex3003=Match(temp51,[cell(1,1),text(1,2:W+1);text(1,2:W+1)',num2cell(Cor_Return_Down_Percent_All(:,:,1))],0,2);
%xlswrite(FileOutput,Match(temp51,[cell(1,1),text(1,2:W+1);text(1,2:W+1)',num2cell(Cor_Return_Down_Percent_All(:,:,1))],0,2),'指数下跌3%组合和指数相关系数','A1');
disp('压力测试 done!')
压力测试
最新推荐文章于 2024-06-03 14:28:44 发布