2025-06-05 08:48:33 +02:00

52 lines
1.7 KiB
Matlab

clear;
lookback=20;
load('inputData_AUDCAD_20120426', 'hhmm', 'tday', 'cl');
idx=find(hhmm==1659);
dailyCl=cl(idx);
tday=tday(idx);
% Annualized interest rates in percent, updated monthly
aud=load('AUD_interestRate', 'yyyy', 'mm', 'rates');
cad=load('CAD_interestRate', 'yyyy', 'mm', 'rates');
aud_dailyRates=zeros(size(tday));
for i=1:length(aud.mm)
idx=find(aud.mm(i)==month(num2str(tday), 'yyyymmdd') & aud.yyyy(i)==year(num2str(tday), 'yyyymmdd'));
if (~isempty(idx))
aud_dailyRates(idx)=aud.rates(i);
end
end
aud_dailyRates=aud_dailyRates/365/100;
% Triple rollover interest on Wednesdays for AUD
isWednesday=weekday(datenum(num2str(tday), 'yyyymmdd'))==4;
aud_dailyRates(isWednesday)=3*aud_dailyRates(isWednesday);
cad_dailyRates=zeros(size(tday));
for i=1:length(cad.mm)
idx=find(cad.mm(i)==month(num2str(tday), 'yyyymmdd') & cad.yyyy(i)==year(num2str(tday), 'yyyymmdd'));
if (~isempty(idx))
cad_dailyRates(idx)=cad.rates(i);
end
end
cad_dailyRates=cad_dailyRates/365/100;
% Triple rollover interest on Thursdays for CAD
isThursday=weekday(datenum(num2str(tday), 'yyyymmdd'))==5;
cad_dailyRates(isThursday)=3*cad_dailyRates(isThursday);
ma=movingAvg(dailyCl, lookback);
mstd=movingStd(dailyCl, lookback);
z=(dailyCl-ma)./mstd;
% Unlevered return of a linear mean-reverting strategy.
ret=lag(-sign(z), 1).*(log(dailyCl)+lag(-log(dailyCl)+log(1+aud_dailyRates)-log(1+cad_dailyRates), 1));
% ret=lag(-sign(z), 1).*(log(dailyCl)+lag(-log(dailyCl), 1));
ret(isnan(ret))=0;
plot(cumprod(1+ret)-1); % Cumulative compounded return
fprintf(1, 'APR=%f Sharpe=%f\n', prod(1+ret).^(252/length(ret))-1, sqrt(252)*mean(ret)/std(ret));
% APR=0.061564 Sharpe=0.541802