Блог им. Kot_Begemot





function BigRandomTest(N,K,L)
%BIGRANDOMTEST производит генерацию N выборок длинной L
% и размерностью K коррелированных случайных стратегий и расчитывает их
% статистические характеристики
X=zeros(L,K); % случайная матрица признаков
z=zeros(N,3); % результаты эмпирические
lim=zeros(N,3); % результаты теоретические
Narr=zeros(N,1); % результаты рассчета эффективной размерности
l=ones(1,K); y=ones(L,1);
warning('off','all');
for i=1:N
X=genRS(K,L); % случайная смешанная матрица
C=corr(X); % корреляционная матрица
C=abs©;
% Рассчитываем пределы
lim(i,1)=(2/L)^0.5*erfinv(0.5); % шарп случайной стратегии
Ne=1+0.5*(2*K-1-(4*l*C*l'-4*K+1)^0.5); Narr(i)=Ne;
lim(i,2)=(2/L)^0.5*erfinv(0.5^(1/Ne)); % шарп лучшей стратегии из множества
lim(i,3)=lim(i,2)*(K.^2/(l*C*l'))^0.5;
% Рассчитываем статистики
sharp=abs(mean(X)./std(X));
z(i,1)=sharp(1); % статистика случайной стратегии
z(i,2)=max(sharp); % статистика лучшей стратегии
a=(X'*X)\(X'*y); r=X*a;
z(i,3)=mean®/std®; % статиситка лучшего портфеля
if isnan(z(i,3))
z(i,3)=0;
end
end
warning('on','all');
%% Изображение статистик по отношению к пределам
figure; r=z(:,2)./lim(:,2); mr=median®; histfit(r,30,'gev');
title(['Best Sharp Statistic median : ',num2str(mr)]);
xlabel('relation sharp to critical level'); ylabel('Frequency');
figure; r=z(:,1)./lim(:,1); mr=median®; histfit(r,30,'wbl');
title(['Random Sharp Statistic median : ',num2str(mr)]);
xlabel('relation sharp to critical level'); ylabel('Frequency');
figure; r=z(:,3)./lim(:,3); mr=median®; histfit(r,30,'gev');
title(['Best Portfolio Sharp Statistic median : ',num2str(mr)]);
xlabel('relation sharp to critical level'); ylabel('Frequency');
figure; r=z(:,2)./lim(:,2); plot(Narr,r,'.');
title(['Erorrs by effective dim']);
xlabel('Effective dim'); ylabel('relation sharp to critical level');
figure; plot(Narr*ones(1,3),lim,'.'); legend({'Random','Best','Portfolio'});
title(['Critical Levels by Effective Dim ']);
xlabel('Effective dim'); ylabel('Critical Levels');
end
% Генерация случайного набора стратегий размерности K, длинной L
function X=genRS(K,L)
Ne=ceil(rand(1,1)*K); % эффективная размерность задается случайно
A=randn(K,Ne); % случайная матрица смешивания
for i=1:K
A(i,:)=A(i,:)/sum(A(i,:).^2);
end
X=randn(L,Ne)*A';
end
Ну не фига себе !
Не, ну не фига ж себе!!!