%基金排名
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% a为基金每月收益率序列,y为排名年限2年或3年
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [r,s,q,qq]=fund_rank(a,y)
if y==2
row1=25;
y1=6;y2=12;y3=24;
else
row1=37;
y1=12;y2=24;y3=36;
end
id=a(:,1);
a=a(:,2:row1);
[n]=size(a);
a(a==9999)=nan;
b=zeros(n(1)-1,n(2));%创建零矩阵
c=zeros(n(1)-1,n(2));
for i=2:n(1)
for j=1:n(2)
if ~isnan(a(i,j))
b(i-1,j)=a(i,j)-a(1,j); %超额收益率
c(i-1,j)=min(a(i,j)-a(1,j),0); %超额收益率(下行风险)
else
b(i-1,j)=nan;
c(i-1,j)=nan;
end
end
end
m=zeros(n(1)-1,3);
o=zeros(n(1)-1,3);
for i=1:n(1)-1
if ~isnan(b(i,:))
m(i,1)=mean(b(i,1:y1));
m(i,2)=mean(b(i,1:y2));
m(i,3)=mean(b(i,1:y3));
o(i,1)=std(c(i,1:y1));
o(i,2)=std(c(i,1:y2));
o(i,3)=std(c(i,1:y3));
else
m(i,:)=nan;
o(i,:)=nan;
end
end
s=[id(2:end),m,o];
s=sortrows(s,2);
tem=find(isnan(s(:,2)));
q=s(1:tem(1)-1,:);
%q(:,2:end)=zscore(q(:,2:end));
for i=2:7
max_q=max(q(:,i));
min_q=min(q(:,i));
q(:,i)=(q(:,i)-min_q)/(max_q-min_q);
end
qq=[q(:,1),q(:,2)-q(:,5),q(:,3)-q(:,6),q(:,4)-q(:,7)];
nn=size(qq);
r=zeros(nn(1),2);
for i=1:nn(1)
r(i,1)=qq(i,1);
r(i,2)=0.1*qq(i,2)+0.35*qq(i,3)+0.55*qq(i,4);
end
r=sortrows(r,-2);
小弟才学matlab不懂啊,贵求解释上述代码,最好每一行给一个注释,还有涉及到的读取数据文件的语句以及创建的数据文件名