欢迎使用CSDN-markdown编辑器

来源:互联网 发布:信捷xc3编程软件 编辑:程序博客网 时间:2024/06/03 20:01

截面分析的方式
%%清空数据
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\liangtianxin\Desktop\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    endend

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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

0 0
原创粉丝点击