基于熵权灰色关联的开放式基金综合评价模型Matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于熵权灰色关联的开放式基金综合评价模型Matlab程序
详细算法流程请见我的文库-《Garch-Var开放式基金风险度量及综合评价体系》的第二部分,综合评价体系,程序中的变量请对应文章的算法涉及变量。
输入的表格字段如下:
其中第一个变量代表基金的名称(这里总共选取了100只基金,只截取了部分数据),后面的变量根据影响基金表现的因素分别建立模型并收集数据计算得到。
输出是一系列的基金的权重,按照大小排序既可以得到基金的综合评分:
程序:
function FuzzyEvalue(FileName)
clc;
fid = fopen(FileName);
head_ = textscan(fid, '%s %s %s %s %s %s',1,'delimiter', ',');
head = {{zeros(length(head_) - 1)}};
for i = 2:length(head_)
head{i-1}(1) = head_{i}(1);
end
clear head_
%for i = 1:length(head)
% head{i}(1)
% end
%head
inputMatrix_ = textscan(fid, '%s %f32 %f32 %f32 %f32 %f32','delimiter', ','); fclose(fid);
for j = 2:length(inputMatrix_)
inputMatrix(:,j - 1) = double(inputMatrix_{:,j});
end
alpha = 0.5;
[n,m] = size(inputMatrix);
optimalMat = zeros(1,m);
for i = 1:m
%inputMatrix(:,i)
if isempty(cell2mat(strfind(head{i}(1), 'max'))) == 0
optimalMat(i) = max(inputMatrix(:,i));
elseif isempty(cell2mat(strfind(head{i}(1), 'min'))) == 0
optimalMat(i) = min(inputMatrix(:,i));
end
end
optimalMat;
D = [optimalMat;inputMatrix];
R = zeros(n+1,m);
for i = 1:m
if isempty(cell2mat(strfind(head{i}(1), 'max'))) == 0
R(:,i) = 1.0*(D(:,i) - min(D(:,i)))/(max(D(:,i)) - min(D(:,i)));
elseif isempty(cell2mat(strfind(head{i}(1), 'min'))) == 0
R(:,i) = 1.0*(max(D(:,i)) - D(:,i))/(max(D(:,i)) - min(D(:,i)));
end
end
clearvars D inputMatrix;
R;
F = zeros(n+1,m);
H = zeros(1,m);
W = zeros(1,m);
for i = 1:m
F(:,i) = R(:,i)/sum(R(:,i));
end
F;
F(F == 0) = 1;
for j = 1:m
H(j) = -1/log(n)*sum(F(:,j).*log(F(:,j)));
end
H;
W = (1 - H)/(m - sum(H));
%sum(W)
clearvars F H;
Eps = zeros(n,m);
for j = 1:m
Eps(:,j) = (min(abs(R(1,j) - R(2:n+1,j))) + alpha*max(abs(R(1,j) - R(2:n+1,j))))./(abs(R(1,j) - R(2:n+1,j)) + alpha*max(abs(R(1,j) - R(2:n+1,j))));
end
Eps;
FundsWeight = Eps*W';
fileId = fopen('weight.csv','w');
fprintf(fileId,'%s \n','FundsWeight');
fprintf(fileId,'%f \n',FundsWeight);
fclose(fileId);
end。