截面分析 行业风险

%%清空数据
clear;clc
tic
format long
%% 数据拉取,全部都拉进来就可以了,到时候有交互运算
[data_fund,textdata_fund,raw_fund]=xlsread('截面分析范例.xlsx','截面持仓');
%取得占比数据。
[mm,nn]=size(data_fund);
for j =1:mm
    rate{j,1} = data_fund(j:j)/sum(data_fund(1:end,1));
end


%swdata 是深万的指数,应该用中证的指数。
[data_hangye,textdata_hangye,raw_hangye]=xlsread('行业权重.xlsx','Sheet1');
%从CS_data 中取得 第四列的数据信息,然后在 xl 表中取得相应的位置记录并返回,直接相加
%此处有个问题,所有数据值为0 的股票要从中拆除,因为这些股票不是持有的。
%首先要load下数据信息
load('CSdata.mat')
%取得想要的信息
[mc,nc]=size(CS_table);
%建立过程就是,建立一个表,将行业代码作为行向量,将包含的股票值作为列向量 raw_hangye
[mh,nh]=size(raw_hangye);


for i=2:39  %此处直接用29 注意。
    for j=1:29  %此处直接用29 注意。
        newTablecode{i,j}='aba';
    end
end


for i=2:mh
    %fprintf('dd'); 找到第1列 下的第i行,然后进行匹配,这是一个行业,从cs中找到与它匹配就行了
    t=1;
    newTable(t,i)=raw_hangye(i,1);
    newTablename(t,i)=raw_hangye(i,1);
    newTablecode(t,i)=raw_hangye(i,1);
    for j=1:mc
        a1=CS_table{j,5};
        b1=raw_hangye{i,1};
       if a1{1,1} == b1
           t=t+1;
           newTablecode(t,i)=CS_table(j,4); 
           newTablename(t,i)=CS_table(j,1); 
           newTable(t,i)=CS_table(j,3); 
       end  
    end
    t=1;
end


%上程序已经将,名字放入,当然也可以放入其他的东西
[mw,nw]=size(newTable);
for j=2:nw
    dataw{1,j}=raw_hangye{j,2};
end
for j=2:nw
    dataw{2,j}=sum(cell2mat(newTable(2:end,j)));%找出相关股票,将占比进行相加。
end     
%中证800
for j=2:nw
    dataw{3,j}=raw_hangye{j,3};
end   
%在求第四页的时候求第一个数据组, 用行业内的权值(第三列)相加就可以了。


dat=sum(cell2mat(raw_hangye(2:end,3)));%100 证明第三列就是基金内各个股票的权值


load('C:\Users\lenovo\Desktop\test\liangtianxin\Var_day\allData.mat')
%(1)先将所有股票的收益放入到28个桶中
%(2)进入到28个桶中后,将按照其占比进行组合相加
%(3)根据28个行业的收益率求,协方差矩阵
%(4)用求出的权重*协方差 




%第一行
%newTablecode 中包含了很多股票代码,通过这些股票代码,并且是从第二列开始的,所以求得,
%先求列下的组合数据
%newTablecode(1:end,2);
[m10,n10]=size(newTablecode);


for li=2:n10
    %%%%%%%%%%%%%%%%%%
    %li=2 %就是从2开始
    [m7,n7]=size(newTablecode(2:end,li));
    instcode=newTablecode(2:end,li);%取得股票代码,然后在instrumentCode,instrumentData


    [mc,nc]=size(instcode);
    %m8=instcode{30,1};


    for hi=1:mc
        %hi=1;
        aa=instcode{hi,1};%求每一个的收益率和占比相乘,最后相加
        if ~strcmp(aa,'aba')
            %[m1,n1]=find(instrumentCode==aa1);
            [m1,n1]=find(strcmp(instrumentCode,aa{1,1})); %1行 4列
            TotalData=instrumentData(:,n1);           %净值序列
            TR = tick2ret(TotalData);                 %转化成为收益率
            %开始找占比
            %[m3,n3]=find(strcmp(CS_table(:,4),aa2)); %1行 4列%暂时不好使 用for语句
            [m3,n3]=size(CS_table(:,4));
            for k=1:m3
               ad=CS_table{k,4};
               if ad{1,1}==aa{1,1}
                  at=k;
               end
            end
            akk=CS_table{at,3};%占比求得了
            %这里应该是加
            TR05(:,hi)=TR;
            TR02(:,hi)=TR*akk;
            [m9,n9]=size(TR02);
            ll=li-1;
            for ui=1:m9
                TRG(ui,ll)=sum(TR02(ui,1:n9));%第一个行业的收益组合序列,通过乘以占比后相加得来
            end
        end
    end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
end


%求28个行业的协方差个矩阵
%将深万指数转化为收益序列,然后用收益序列求得协方差,左侧第一行和第二行已经求得,目前就是利用协方差求得右侧的第一行和第二行
data_all = swData;%
[ms,ns] = size(data_all);
for k=1:ns
    TotalData = data_all(:,k); %净值序列
    TRG01(:,k) = tick2ret(TotalData); %收益率序列
end 
%求得协方差
for a=1:28
    for b=1:28
        R02{a,b} = corr(TRG01(:,a),TRG01(:,b));
    end
end


%用这个第一列乘以 这个R02然后,用这个乘以第一列的转置,求出每个数值就可以了。
%跟dataw 进行交互运算就可以了。


%求行业风险占比
for k=1:28
    aa=0;
    for i=1:28
        j=i+1;
        aa=aa + dataw{2,j}*R02{i,k} %第一次转置相乘
    end
    dataA{k,1}=aa
end


for t=1:28
    j=t+1;
    phangye{t,1}=dataA{t,1}*dataw{2,j}
end


%求指数风险占比
for k=1:28
    aa=0;
    for i=1:28
        j=i+1;
        aa=aa + dataw{3,j}*R02{i,k} %第一次转置相乘
    end
    dataA{k,1}=aa
end


for t=1:28
    j=t+1;
    pindex{t,1}=dataA{t,1}*dataw{3,j}
end



你可能感兴趣的:(截面分析 行业风险)