%%清空数据
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