61 lines
1.9 KiB
Matlab
61 lines
1.9 KiB
Matlab
clear;
|
|
|
|
load('inputDataOHLCDaily_stocks_20120424');
|
|
|
|
lookback=252;
|
|
holddays=25;
|
|
topN=50;
|
|
|
|
% idxStart=find(tday==20100104);
|
|
% idxEnd=find(tday==20120424);
|
|
idxStart=find(tday==20070515);
|
|
idxEnd=find(tday==20071231);
|
|
% idxStart=find(tday==20080102);
|
|
% idxEnd=find(tday==20091231);
|
|
% tday=tday(idxStart:idxEnd);
|
|
% cl=cl(idxStart:idxEnd, :);
|
|
% op=op(idxStart:idxEnd, :);
|
|
|
|
% cl is a TxN array of closing prices, where T is the number of trading
|
|
% days, and N is the number of stocks in the S&P 500
|
|
ret=(cl- backshift(lookback,cl))./backshift(lookback,cl); % daily returnslongs=false(size(ret));
|
|
shorts=false(size(ret));
|
|
|
|
positions=zeros(size(ret));
|
|
for t=lookback+1:length(tday)
|
|
[foo idx]=sort(ret(t, :), 'ascend');
|
|
nodata=find(isnan(ret(t, :)));
|
|
idx=setdiff(idx, nodata, 'stable');
|
|
longs(t, idx(end-topN+1:end))=true;
|
|
shorts(t, idx(1:topN))=true;
|
|
end
|
|
|
|
for h=0:holddays-1
|
|
long_lag=backshift(h, longs);
|
|
long_lag(isnan(long_lag))=false;
|
|
long_lag=logical(long_lag);
|
|
|
|
short_lag=backshift(h, shorts);
|
|
short_lag(isnan(short_lag))=false;
|
|
short_lag=logical(short_lag);
|
|
|
|
positions(long_lag)=positions(long_lag)+1;
|
|
positions(short_lag)=positions(short_lag)-1;
|
|
end
|
|
|
|
dailyret=smartsum(backshift(1, positions).*(cl-lag(cl))./lag(cl), 2)/(2*topN)/holddays;
|
|
|
|
dailyret(isnan(dailyret))=0;
|
|
|
|
cumret=cumprod(1+dailyret(idxStart:idxEnd))-1;
|
|
|
|
plot(cumret);
|
|
tday=tday([idxStart:idxEnd]);
|
|
|
|
fprintf(1, 'Avg Ann Ret=%7.4f Sharpe ratio=%4.2f \n',252*smartmean(dailyret(idxStart:idxEnd)), sqrt(252)*smartmean(dailyret(idxStart:idxEnd))/smartstd(dailyret(idxStart:idxEnd)));
|
|
fprintf(1, 'APR=%10.4f\n', prod(1+dailyret(idxStart:idxEnd)).^(252/length(dailyret(idxStart:idxEnd)))-1);
|
|
[maxDD maxDDD]=calculateMaxDD(cumret);
|
|
fprintf(1, 'Max DD =%f Max DDD in days=%i\n\n', maxDD, round(maxDDD));
|
|
% Avg Ann Ret= 0.0315 Sharpe ratio=0.40
|
|
% APR= 0.0288
|
|
% Max DD =-0.066923 Max DDD in days=182 |