52 lines
1.7 KiB
Matlab
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
|
|
|