82 lines
2.7 KiB
Matlab
82 lines
2.7 KiB
Matlab
clear;
|
|
|
|
load('../Data/AUDCAD_unequal_ret', 'ret');
|
|
|
|
moments={mean(ret), std(ret), skewness(ret), kurtosis(ret)};
|
|
[ret_sim, type]=pearsrnd(moments{:}, 100000, 1);
|
|
|
|
g=inline('sum(log(1+f*R))/length(R)', 'f', 'R');
|
|
% g=inline('prod(1+f*R)^(1/length(R))-1', 'f', 'R');
|
|
|
|
myf=0:23;
|
|
myg=NaN(24, 1);
|
|
for f=myf
|
|
myg(f+1)=g(f, ret_sim);
|
|
end
|
|
|
|
plot(myf, myg);
|
|
|
|
minusG=@(f)-g(f, ret);
|
|
minusGsim=@(f)-g(f, ret_sim);
|
|
|
|
optimalF=fminbnd(minusGsim, 0, 20); % optimal leverage based on simulated returns
|
|
fprintf(1, 'Optimal leverage=%f optimal growth rate=%f\n', optimalF, -minusGsim(optimalF));
|
|
|
|
minR=min(ret_sim); % minimum return in simulated series
|
|
fprintf(1, 'minR=%f\n', minR);
|
|
|
|
maxDD=calculateMaxDD(cumprod(1+optimalF*ret_sim)-1); % max drawdown with optimal leverage
|
|
fprintf(1, 'f=%i maxDD with optimal leverage=%f\n', optimalF, maxDD);
|
|
|
|
maxDD=calculateMaxDD(cumprod(1+optimalF/2*ret_sim)-1); % max drawdown with half of optimal leverage
|
|
fprintf(1, 'f=%i maxDD with half of optimal leverage=%f\n', optimalF/2, maxDD);
|
|
|
|
maxDD=calculateMaxDD(cumprod(1+optimalF/7*ret_sim)-1); % max drawdown with 1/7 of optimal leverage
|
|
fprintf(1, 'f=%i maxDD with 1/7 of optimal leverage=%f\n', optimalF/7, maxDD);
|
|
|
|
maxDD=calculateMaxDD(cumprod(1+optimalF/1.4*ret)-1); % max drawdown with 1/1.4 of optimal leverage for historical returns
|
|
fprintf(1, 'f=%i maxDD for historical returns=%f\n', optimalF/1.4, maxDD);
|
|
|
|
|
|
D=0.5;
|
|
fprintf(1, 'Growth rate on simulated returns using D=%3.1f of optimal leverage on full account=%f\n', D, -minusGsim(optimalF*D));
|
|
fprintf(1, 'MaxDD on simulated returns using D of optimal leverage on full account=%f\n', calculateMaxDD(cumprod(1+optimalF*D*ret_sim)-1));
|
|
|
|
% CPPI
|
|
g_cppi=0;
|
|
% g_debug=0;
|
|
drawdown=0;
|
|
for t=1:length(ret_sim)
|
|
g_cppi=g_cppi+log(1+ret_sim(t)*D*optimalF*(1+drawdown));
|
|
% g_cppi=(1+g_cppi)*(1+r(t)*D*optimalF*(1+drawdown))-1;
|
|
% g_debug=g_debug+log(1+r(t)*D*optimalF)
|
|
|
|
% if (g_cppi/t >= 1)
|
|
% keyboard;
|
|
% end
|
|
|
|
drawdown=min(0, (1+drawdown)*(1+ret_sim(t))-1);
|
|
end
|
|
g_cppi=g_cppi/length(ret_sim);
|
|
% g_cppi=(1+g_cppi)^(1/length(r))-1;
|
|
|
|
fprintf(1, 'Growth rate on simulated returns using CPPI=%f\n', g_cppi);
|
|
|
|
fprintf(1, 'Growth rate on historical returns using D of optimal leverage on full account=%f\n', -minusG(optimalF*D));
|
|
fprintf(1, 'MaxDD on historical returns using D of optimal leverage on full account=%f\n', calculateMaxDD(cumprod(1+optimalF*D*ret)-1));
|
|
|
|
% CPPI
|
|
g_cppi=0;
|
|
drawdown=0;
|
|
for t=1:length(ret)
|
|
% g_cppi=(1+g_cppi)*(1+ret(t)*D*optimalF*(1+drawdown))-1;
|
|
g_cppi=g_cppi+log(1+r(t)*D*optimalF*(1+drawdown));
|
|
|
|
drawdown=min(0, (1+drawdown)*(1+ret(t))-1);
|
|
end
|
|
g_cppi=g_cppi/length(ret);
|
|
% g_cppi=(1+g_cppi)^(1/length(ret))-1;
|
|
|
|
fprintf(1, 'Growth rate on historical returns using CPPI=%f\n', g_cppi);
|
|
|