压力测试


%% 读取净值/指数数据,求出收益率数据;

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!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值