组合评测

来源:互联网 发布:苹果上mac是什么意思 编辑:程序博客网 时间:2024/04/28 09:26
%%清空数据 第一份输出数据
clear;clc
tic
format long
%% 数据拉取,全部都拉进来就可以了,到时候有交互运算
[data_fund,textdata_fund,raw_fund]=xlsread('入选子基金.xlsx','子基金');
[data_all,textdata_all,raw]=xlsread('入选子基金.xlsx','子基金汇总');
[dataindex,textindex]=xlsread('基金指数编制.xlsx','指数汇总');
%Rate_pfund = price2ret(data_all(:,4)) 这个数据同下面的相近但是不一样
day = 5;
year = 250; 
N = 52 %周总数
%% 读入第四列数据 
for ik = 1:9
    %ik = 1
    TotalData=data_all(:,ik);
    TR = tick2ret(TotalData);
    Data = TotalData;
    [row,col]=find(isnan(Data));
    if row > 0    
        Data = Data(max(row)+1:end,1);
    end
    [Time,nn]=size(Data);
    Data = Data./Data(1,:); %标准化
    %%
    %初始值设计
    MAR = 0.03;%0.1   % 最低可接受回报MAR需自行选择
    noriskrate = 0.03; %无风险收益率
    %%
    %累计净值
    sumReturns = Data(end,:);
    %%
    %年化收益 52周 
    N=52;
    annuReturns = Data(end,:).^(N/Time)-1;
    %%
    %波动率
    % Volatility = (annuReturns-ones(1,n)*noriskrate)./SharpeRatio;
    expReturns = zeros(Time,nn);
    for i=2:Time
        expReturns(i,:) = Data(i,:)./Data(i-1,:)-1;
    end
    Volatility = sqrt(N)*std(expReturns);
    %%
    %最大回撤 maxdrawdown
    maxReturns = zeros(Time,nn);
    for i=1:Time
        maxReturns(i,:) = max(Data(1:i,:),[],1);
    end
    maxDrawdown = -max(1-Data./maxReturns);
    %%
    %夏普比率 
    % SharpeRatio = sharpe(Asset,0.03);woshuo
    SharpeRatio = (annuReturns-ones(1,nn)*noriskrate)./Volatility;
    %%
    %卡马尔比率(年化/最大回撤)
    kamaRatio = -annuReturns./maxDrawdown;
    %%
    %Sortino比率
    MAR = MAR/N; %化为日(周,月)收益
    Sortino = (mean(expReturns(2:end,:)) - MAR) ./ sqrt(lpm(expReturns(2:end,:), MAR, 2));
    %%
    %Stutzer指数
    %对于一定范围的theta值,target单调递增或只有一个拐点
    %theta预设穷举搜索范围为[-15,0];
    theta = -15:0.01:0;
    n_theta = length(theta);
    temp_Ip = zeros(n_theta,nn);
    % riskfree = (1+noriskrate)^(1/N)-1;
    riskfree = noriskrate/N;
    for i=1:n_theta
        temp_Ip(i,:) = -log(sum(exp(theta(i)*(expReturns(2:end,:)-ones(Time-1,nn)*riskfree)))/(Time-1));
    end
    Ip = max(temp_Ip);
    Stutzer = sign(mean(expReturns(2:end,:)-ones(Time-1,nn)*riskfree)).*sqrt(2*Ip);
    %%
    %获利天(周,月)数
    number_profit = sum(expReturns>0);
    %获利的平均收益
    mean_profit = sum((expReturns>0).*expReturns)./number_profit;
    %受损天(周,月)数
    number_loss = sum(expReturns<0);
    %受损的平均受损
    mean_loss = sum((expReturns<0).*expReturns)./number_loss;
    % 最长的连续获利天(周,月)数 during_profit
    % 最长的连续受损天(周,月)数 during_loss
    temp_profit = zeros(1,nn);
    temp_loss = zeros(1,nn);
    during_profit = zeros(1,nn);
    during_loss = zeros(1,nn);
    for i = 1:Time
        for j = 1:nn
            if expReturns(i,j)>0
                temp_profit(j) = temp_profit(j)+1;
                temp_loss(j) = 0;
            elseif expReturns(i,j)<0
                temp_loss(j) = temp_loss(j)+1;
                temp_profit(j) = 0;
            end
            if temp_loss(j)>during_loss(j)
                during_loss(j)=temp_loss(j);
            end
            if temp_profit(j)>during_profit(j)
                during_profit(j)=temp_profit(j);
            end
        end
    end
    %%
    %最大单日(周,月)收益
    max_profit = max(expReturns);
    %最大单日(周,月)受损
    max_loss = min(expReturns);
    %胜率
    Hit = sum(expReturns>0)/(Time-1);
    %收益盈亏比
    GPRe=-mean_profit./mean_loss;
    %dataret = [];
    ip= ik+2;
    dataret{4,1}='累计净值';
    dataret{5,1}='年华收益';
    dataret{6,1}='年华波动';
    dataret{7,1}='最大回撤';
    dataret{8,1}='夏普比率';
    dataret{9,1}='卡玛比率';
    dataret{10,1}='获利周数';
    dataret{11,1}='获利周平均收益';
    dataret{12,1}='受损周数';
    dataret{13,1}='受损周平均收益';
    dataret{14,1}='最大连续收益';
    dataret{15,1}='最大连续受损';
    dataret{16,1}='单周最大收益';
    dataret{17,1}='单周最大受损';
    dataret{18,1}='胜率';
    dataret{19,1}='盈亏收益比';
    %数据输出,


    dataret{4,ip}=sumReturns;
    dataret{5,ip}=annuReturns;
    dataret{6,ip}=Volatility;
    dataret{7,ip}=maxDrawdown;
    dataret{8,ip}=SharpeRatio;
    dataret{9,ip}=kamaRatio;
    dataret{10,ip}=number_profit;
    dataret{11,ip}=mean_profit;
    dataret{12,ip}=number_loss;
    dataret{13,ip}=mean_loss;
    dataret{14,ip}=during_profit;
    dataret{15,ip}=during_loss;
    dataret{16,ip}=max_profit;
    dataret{17,ip}=max_loss;
    dataret{18,ip}=Hit;
    dataret{19,ip}=GPRe;




end 


%% 读入全部列数据,逐个行读取,每行9个元素,如果有4个是NAN的则,则5个数据,5个数据每个都乘以1/5,保证横截面是1
%建立一个列数组
TotalData=data_all(:,1);
TR = tick2ret(TotalData);
%整体转化为收益率
TRdata = tick2ret(data_all);
ip =1;%代表第一行
for ip=1:65
    wnum = isnan(TRdata(ip,:));%第一行权值%将为0(有信息)位置的信息乘以权重定数 1/5,1/6 等
    wk=0;
    kk=length(wnum);
    for i = 1:kk
        if wnum(1,i) == 0
           wk=wk+1;
        end    
    end
    
    fprintf('%d,%d\n',ip,wk); 
    
    TR(ip,1:1)=0;
    kk=length(wnum);
    for j = 1:kk
        if wnum(1,j) == 0
           TR(ip)=TR(ip)+ TRdata(ip,j:j)/wk;
        end    
    end
end


%其中TR是组合收益率,TDATA是累计净值


TDATA= ret2tick(TR);
Datazh =TDATA;


xlswrite('C:\Users\liangtianxin\Desktop\liangtianxin\finished\zhdata.xls', Datazh, 'Sheet1');   
system('taskkill /F /IM EXCEL.EXE');




[Time,nn]=size(Datazh);
Datazh = Datazh./Datazh(1,:); %标准化
%%
%初始值设计
MAR = 0.03;%0.1   % 最低可接受回报MAR需自行选择
noriskrate = 0.03; %无风险收益率
%%
%累计净值
sumReturns = Datazh(end,:);
%%
%年化收益 52周 
N=52;
annuReturns = Datazh(end,:).^(N/Time)-1;
%%
%波动率
% Volatility = (annuReturns-ones(1,n)*noriskrate)./SharpeRatio;
expReturns = zeros(Time,nn);
for i=2:Time
    expReturns(i,:) = Datazh(i,:)./Datazh(i-1,:)-1;
end
Volatility = sqrt(N)*std(expReturns);
%%
%最大回撤 maxdrawdown
maxReturns = zeros(Time,nn);
for i=1:Time
    maxReturns(i,:) = max(Datazh(1:i,:),[],1);
end
maxDrawdown = -max(1-Datazh./maxReturns);
%%
%夏普比率 
% SharpeRatio = sharpe(Asset,0.03);woshuo
SharpeRatio = (annuReturns-ones(1,nn)*noriskrate)./Volatility;
%%
%卡马尔比率(年化/最大回撤)
kamaRatio = -annuReturns./maxDrawdown;
%%
%Sortino比率
MAR = MAR/N; %化为日(周,月)收益
Sortino = (mean(expReturns(2:end,:)) - MAR) ./ sqrt(lpm(expReturns(2:end,:), MAR, 2));
%%
%Stutzer指数
%对于一定范围的theta值,target单调递增或只有一个拐点
%theta预设穷举搜索范围为[-15,0];
theta = -15:0.01:0;
n_theta = length(theta);
temp_Ip = zeros(n_theta,nn);
% riskfree = (1+noriskrate)^(1/N)-1;
riskfree = noriskrate/N;
for i=1:n_theta
    temp_Ip(i,:) = -log(sum(exp(theta(i)*(expReturns(2:end,:)-ones(Time-1,nn)*riskfree)))/(Time-1));
end
Ip = max(temp_Ip);
Stutzer = sign(mean(expReturns(2:end,:)-ones(Time-1,nn)*riskfree)).*sqrt(2*Ip);
%%
%获利天(周,月)数
number_profit = sum(expReturns>0);
%获利的平均收益
mean_profit = sum((expReturns>0).*expReturns)./number_profit;
%受损天(周,月)数
number_loss = sum(expReturns<0);
%受损的平均受损
mean_loss = sum((expReturns<0).*expReturns)./number_loss;
% 最长的连续获利天(周,月)数 during_profit
% 最长的连续受损天(周,月)数 during_loss
temp_profit = zeros(1,nn);
temp_loss = zeros(1,nn);
during_profit = zeros(1,nn);
during_loss = zeros(1,nn);
for i = 1:Time
    for j = 1:nn
        if expReturns(i,j)>0
            temp_profit(j) = temp_profit(j)+1;
            temp_loss(j) = 0;
        elseif expReturns(i,j)<0
            temp_loss(j) = temp_loss(j)+1;
            temp_profit(j) = 0;
        end
        if temp_loss(j)>during_loss(j)
            during_loss(j)=temp_loss(j);
        end
        if temp_profit(j)>during_profit(j)
            during_profit(j)=temp_profit(j);
        end
    end
end
%%
%最大单日(周,月)收益
max_profit = max(expReturns);
%最大单日(周,月)受损
max_loss = min(expReturns);
%胜率
Hit = sum(expReturns>0)/(Time-1);
%收益盈亏比
GPRe=-mean_profit./mean_loss;
%dataret = [];
iq= 2;


dataret{3,2}='组合';
dataret{3,3}='喜岳';
dataret{3,4}='长丰';
dataret{3,5}='淘利';
dataret{3,6}='盛冠达';
dataret{3,7}='因诺';
dataret{3,8}='青骓';
dataret{3,9}='雁丰';
dataret{3,10}='黑翼';
dataret{3,11}='量道';


%dataret{3,1}='累计净值';
%dataret{4,1}='年华收益';
%dataret{5,1}='年华波动';
%dataret{6,1}='最大回撤';
%dataret{7,1}='夏普比率';
%dataret{8,1}='卡玛比率';
%dataret{9,1}='获利周数';
%dataret{10,1}='获利周平均收益';
%dataret{11,1}='受损周数';
%dataret{12,1}='受损周平均收益';
%dataret{13,1}='最大连续收益';
%dataret{14,1}='最大连续受损';
%dataret{15,1}='单周最大收益';
%dataret{16,1}='单周最大受损';
%dataret{17,1}='胜率';
%dataret{18,1}='盈亏收益比';




dataret{4,iq}=sumReturns;
dataret{5,iq}=annuReturns;
dataret{6,iq}=Volatility;
dataret{7,iq}=maxDrawdown;
dataret{8,iq}=SharpeRatio;
dataret{9,iq}=kamaRatio;
dataret{10,iq}=number_profit;
dataret{11,iq}=mean_profit;
dataret{12,iq}=number_loss;
dataret{13,iq}=mean_loss;
dataret{14,iq}=during_profit;
dataret{15,iq}=during_loss;
dataret{16,iq}=max_profit;
dataret{17,iq}=max_loss;
dataret{18,iq}=Hit;
dataret{19,iq}=GPRe;


xlswrite('C:\Users\liangtianxin\Desktop\liangtianxin\finished\fund_zh.xls', dataret, 'Sheet1');   
system('taskkill /F /IM EXCEL.EXE');



0 0
原创粉丝点击