44 lines
1.0 KiB
Matlab
44 lines
1.0 KiB
Matlab
clear;
|
|
|
|
topN=10; % Max number of positions
|
|
entryZscore=1;
|
|
lookback=20; % for MA
|
|
|
|
load('../Data/inputDataOHLCDaily_20120424', 'stocks', 'tday', 'op', 'hi', 'lo', 'cl');
|
|
|
|
stdretC2C90d=backshift(1, smartMovingStd(calculateReturns(cl, 1), 90));
|
|
buyPrice=backshift(1, lo).*(1-entryZscore*stdretC2C90d);
|
|
|
|
retGap=(op-backshift(1, lo))./backshift(1, lo);
|
|
|
|
pnl=zeros(length(tday), 1);
|
|
|
|
positionTable=zeros(size(cl));
|
|
|
|
ma=backshift(1, smartMovingAvg(cl, lookback));
|
|
|
|
for t=2:size(cl, 1)
|
|
hasData=find(isfinite(retGap(t, :)) & op(t, :) < buyPrice(t, :) & op(t, :) > ma(t, :));
|
|
|
|
[foo idxSort]=sort(retGap(t, hasData), 'ascend');
|
|
positionTable(t, hasData(idxSort(1:min(topN, length(idxSort)))))=1;
|
|
end
|
|
|
|
retO2C=(cl-op)./op;
|
|
|
|
|
|
pnl=smartsum(positionTable.*(retO2C), 2);
|
|
ret=pnl/topN;
|
|
ret(isnan(ret))=0;
|
|
|
|
fprintf(1, '%i - %i\n', tday(1), tday(end));
|
|
fprintf(1, 'APR=%10.4f\n', prod(1+ret).^(252/length(ret))-1);
|
|
|
|
fprintf(1, 'Sharpe=%4.2f\n', mean(ret)*sqrt(252)/std(ret));
|
|
% APR=8.7%, Sharpe=1.5
|
|
|
|
cumret=cumprod(1+ret)-1; % compounded ROE
|
|
|
|
plot(cumret);
|
|
|