how can I speed up this code?
Show older comments
the following code computes daily Value at Risk, from 03/01/2013 to 12/12/2016, but it takes 3 days.How can I speed up?
Dati=xlsread('port_banche','portafoglio');
VaR95=zeros(1000,1);
VaR99=zeros(1000,1);
VaR999=zeros(1000,1);
for t=1395:size(Dati,1)
SottoDati=Dati(1:t,:);
T=size(SottoDati,1);
model=arima('AR',NaN,'Distribution','t','Variance',garch(1,1));
nAzioni=size(SottoDati,2);
residui=NaN(T,nAzioni);
varianza=NaN(T,nAzioni);
fit=cell(nAzioni,1);
options=optimset('fmincon');
options=optimset(options,'Display','off','Diagnostics','off','Algorithm','sqp','TolCon',1e-07);
for i=1:nAzioni
fit{i}=estimate(model,SottoDati(:,i),'print',false,'options',options);
[residui(:,i),varianza(:,i)]=infer(fit{i},SottoDati(:,i));
end
residui=residui./sqrt(varianza);
soglia=0.05;
code=cell(nAzioni,1);
for i=1:nAzioni
code{i}=paretotails(residui(:,i),soglia,1-soglia,'kernel');
end
U=zeros(size(residui));
for i=1:nAzioni
U(:,i)=cdf(code{i},residui(:,i));
end
[R]=copulafit('Gaussian',U,'Method','ML');
s=RandStream.getGlobalStream();
reset(s)
nProve=10000;
orizzonte=1;
Z=zeros(orizzonte,nProve,nAzioni);
U=copularnd('Gaussian',R,orizzonte*nProve);
for j=1:nAzioni
Z(:,:,j)=reshape(icdf(code{j},U(:,j)),orizzonte,nProve);
end
Y0=SottoDati(end,:);
Z0=residui(end,:);
V0=varianza(end,:);
RendSimulati=zeros(orizzonte,nProve,nAzioni);
for i=1:nAzioni
RendSimulati(:,:,i)=filter(fit{i},Z(:,:,i),'Y0',Y0(i),'Z0',Z0(i),'V0',V0(i));
end
RendSimulati=permute(RendSimulati,[1 3 2]);
RendCumulati=zeros(nProve,1);
pesi=repmat(1/nAzioni,nAzioni,1);
for i=1:nProve
RendCumulati(i)=sum(log(1+(exp(RendSimulati(:,:,i))-1) *pesi));
end
VaR95(t-1394,:)=quantile(RendCumulati, 0.05);
VaR99(t-1394,:)=quantile(RendCumulati, 0.01);
VaR999(t-1394,:)=quantile(RendCumulati, 0.001);
end
Accepted Answer
More Answers (0)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!