关闭

组合压力测试

79人阅读 评论(0) 收藏 举报
%本程序求得沪深300在下跌-0.03时候所有的策略和指数的幅度
%%清空数据  第二份输出数据
clear;clc
tic
format long
%% 数据拉取
[data_fund,textdata_fund,raw_fund]=xlsread('入选子基金及组合.xlsx','子基金');
[data_all,textdata_all,raw]=xlsread('入选子基金及组合.xlsx','子基金汇总');
[dataindex,textindex,raw_index]=xlsread('基金指数编制.xlsx','指数汇总');
%读取两端数据并对其,然后求出指数的各类绩效,并制作表将其写入表中,这是个重要技能以后会有大的用处。
%% 数据拉取 沪深300
%[data_fund01]=xlsread('hs300.xls','Sheet1');
%[data_fund01]=xlsread('winda500.xls','Sheet1');
%[data_fund01]=xlsread('zzzcf500.xls','Sheet1');
[data_fund01]=xlsread('zh500.xls','Sheet1');


%datetime = datestr(data_fund01(:,1),26);
%datetime01 = datestr(data_fund01(2:2,1),'yyyy/mm/dd');
datetime = datestr(data_fund01(:,1),25);
[mm,nn]= size(datetime);
for i=1:mm  
    tmp{i}=datetime(i,:)
end
tmpall=tmp';
for i=1:mm  
    tmpall{i,2}=data_fund01(i:i,2);
end
%先对齐
%找到所有小于0.03的日期,并从其余的数字列表中相应的收益序列,最后求得平均值
%TR300 = tick2ret(data_fund(:,2));
%%
%textdata_all 中的日期,用喜悦那个表的整体的截取hs300的
startTime= textdata_all(2:2,1:1);
startTime01= datestr(startTime,25);
endTime= textdata_all(end:end,1:1);
endTime01= datestr(endTime,25);
%用这个数据进行截取,总算截取成功了,原来的数据坑死人了
[m1,n1]=size(tmpall);
ktime =0;
for i=1:m1
    dt = tmpall{i,1};
    if strcmp(dt,startTime)
       ktime=i;
       fprintf('开始时间');
    end
end
stime = ktime;
ptime =0;
for i=1:m1
    dt = tmpall{i,1};
    if strcmp(dt,endTime01)
       ptime=i;
       fprintf('结束时间');
    end
end
etime = ptime;
%% 最终截取的数据就是这个
dataTitan =tmpall(stime:etime,2:2);
%求这个阶段收益率的小于-0.03的部分
rem=[];
k=0;
remhs =0;
TRdata = tick2ret(data_fund01(stime:etime,2));
for j =1:65
   if TRdata(j:j,1:1)<-0.03
       rem(j)=1;
       k=k+1;
       remhs =remhs+TRdata(j:j,1:1);
   elseif TRdata(j:j,1:1)>-0.03
       rem(j)=0;
   end
end
meanremhs=remhs/k;
%%
%根据上面返回的数列,找到下面这些数的平均收益,rem记录了有哪些是低于-0.03的数据日期,在这些日期中他们的平均
%喜岳 %长丰 %淘利 %盛冠达 %因诺 %青骓 %雁丰 %黑翼 %量道 %组合
remTR= [];
meanTR = [];
for  i=1:10
    remK =0;
    TR = tick2ret(data_all(:,i));
    for j =1:65
       if isnan(TR(j:j,1:1))==0
           if rem(j)==1
               remTR(j)=TR(j:j,1:1);
               remK=remK+TR(j:j,1:1);
           elseif rem(j)==0
               remTR(j)=0;  
           end
       end
    end
    meanTR(i)= remK/k;
end





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11789次
    • 积分:670
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:17篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论