114 lines
3.1 KiB
Matlab
114 lines
3.1 KiB
Matlab
clear;
|
|
|
|
% load('../Data/inputDataOHLCDaily_20120511', 'syms', 'tday', 'cl');
|
|
load('inputDataOHLCDaily_20120511', 'syms', 'tday', 'cl');
|
|
idx=strmatch('TU', syms, 'exact');
|
|
|
|
tday=tday(:, idx);
|
|
cl=cl(:, idx);
|
|
|
|
lookback=250;
|
|
holddays=25;
|
|
|
|
longs=cl > backshift(lookback, cl) ;
|
|
shorts=cl < backshift(lookback, cl) ;
|
|
|
|
pos=zeros(length(cl), 1);
|
|
|
|
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);
|
|
|
|
pos(long_lag)=pos(long_lag)+1;
|
|
pos(short_lag)=pos(short_lag)-1;
|
|
end
|
|
|
|
marketRet=(cl-backshift(1, cl))./backshift(1, cl);
|
|
marketRet(~isfinite(marketRet))=0;
|
|
|
|
ret=backshift(1, pos).*marketRet/holddays;
|
|
|
|
ret(isnan(ret))=0;
|
|
|
|
% Gaussian hypothesis test
|
|
fprintf(1, 'Gaussian Test statistic=%4.2f\n', mean(ret)/std(ret)*sqrt(length(ret)));
|
|
% Gaussian Test statistic=2.93
|
|
|
|
% Randomized market returns hypothesis test
|
|
moments={mean(marketRet), std(marketRet), skewness(marketRet), kurtosis(marketRet)};
|
|
numSampleAvgretBetterOrEqualObserved=0;
|
|
for sample=1:10000
|
|
marketRet_sim=pearsrnd(moments{:}, length(marketRet), 1);
|
|
cl_sim=cumprod(1+marketRet_sim)-1;
|
|
|
|
longs_sim=cl_sim > backshift(lookback, cl_sim) ;
|
|
shorts_sim=cl_sim < backshift(lookback, cl_sim) ;
|
|
|
|
pos_sim=zeros(length(cl_sim), 1);
|
|
|
|
for h=0:holddays-1
|
|
long_sim_lag=backshift(h, longs_sim);
|
|
long_sim_lag(isnan(long_sim_lag))=false;
|
|
long_sim_lag=logical(long_sim_lag);
|
|
|
|
short_sim_lag=backshift(h, shorts_sim);
|
|
short_sim_lag(isnan(short_sim_lag))=false;
|
|
short_sim_lag=logical(short_sim_lag);
|
|
|
|
pos_sim(long_sim_lag)=pos_sim(long_sim_lag)+1;
|
|
pos_sim(short_sim_lag)=pos_sim(short_sim_lag)-1;
|
|
end
|
|
|
|
|
|
ret_sim=backshift(1, pos_sim).*marketRet_sim/holddays;
|
|
ret_sim(~isfinite(ret_sim))=0;
|
|
|
|
if (mean(ret_sim)>= mean(ret))
|
|
numSampleAvgretBetterOrEqualObserved=numSampleAvgretBetterOrEqualObserved+1;
|
|
end
|
|
end
|
|
|
|
fprintf(1, 'Randomized prices: p-value=%f\n', numSampleAvgretBetterOrEqualObserved/10000);
|
|
% p-value=0.027500
|
|
|
|
|
|
% Randomized entry trades hypothesis test
|
|
|
|
numSampleAvgretBetterOrEqualObserved=0;
|
|
for sample=1:100000
|
|
P=randperm(length(longs));
|
|
longs_sim=longs(P);
|
|
shorts_sim=shorts(P);
|
|
|
|
pos_sim=zeros(length(cl), 1);
|
|
|
|
for h=0:holddays-1
|
|
long_sim_lag=backshift(h, longs_sim);
|
|
long_sim_lag(isnan(long_sim_lag))=false;
|
|
long_sim_lag=logical(long_sim_lag);
|
|
|
|
short_sim_lag=backshift(h, shorts_sim);
|
|
short_sim_lag(isnan(short_sim_lag))=false;
|
|
short_sim_lag=logical(short_sim_lag);
|
|
|
|
pos(long_sim_lag)=pos(long_sim_lag)+1;
|
|
pos(short_sim_lag)=pos(short_sim_lag)-1;
|
|
end
|
|
|
|
ret_sim=backshift(1, pos_sim).*marketRet/holddays;
|
|
|
|
ret_sim(isnan(ret_sim))=0;
|
|
|
|
|
|
if (mean(ret_sim)>= mean(ret))
|
|
numSampleAvgretBetterOrEqualObserved=numSampleAvgretBetterOrEqualObserved+1;
|
|
end
|
|
|
|
end
|
|
fprintf(1, 'Randomized trades: p-value=%f\n', numSampleAvgretBetterOrEqualObserved/100000);
|