from TSM-simulation by Anders
A strategy simulation of time-series price momentum.

Hypothesis testing the momentum anomaly.m
load GermanyL.txt % load the data matrix from the file

market = GermanyL(:,2); % market return in the second column
mkt = market

w = log(1 + mkt/100) % convert to log returns
numElementsToSum = 2; %Dictates the number of months used in the model
mSum = conv(w, ones(numElementsToSum, 1), 'valid'); %Gives the sum of last n months
movsum = mSum(1:end-1);%Needed to delete the last sum since it is out of sample
g = [1+mkt/100]
returns = g(numElementsToSum+1:end); %deletes the first n months which is the initial evaluation period

StdMkt = std(g)
ExretMkt = mean(g)

Buytwo=returns(movsum>0); %Gathers all returns which are generated by the buy-signal
Selltwo=returns(movsum<0); %Gathers all returns which are generated by the sell-signal
ExRetBuytwo = mean(Buytwo);
ExRetSelltwo = mean(Selltwo);
StdBuytwo = std(Buytwo);
StdSelltwo = std(Selltwo);
[h,ptwomean] = ttest2(Buytwo,Selltwo,0.05,'right','unequal');
[h,ptwovar] =  vartest2(Buytwo,Selltwo,0.05,'left');


numElementsToSum = 3;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumthree = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buythree=returns(movsumthree>0);
Sellthree=returns(movsumthree<0);
ExRetBuythree = mean(Buythree);
ExRetSellthree = mean(Sellthree);
StdBuythree = std(Buythree);
StdSellthree = std(Sellthree);
[h,pthreemean] = ttest2(Buythree,Sellthree,0.05,'right','unequal');
[h,pthreevar] =  vartest2(Buythree,Sellthree,0.05,'left');


numElementsToSum = 4;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumfour = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyfour=returns(movsumfour>0);
Sellfour=returns(movsumfour<0);
ExRetBuyfour = mean(Buyfour);
ExRetSellfour = mean(Sellfour);
StdBuyfour = std(Buyfour);
StdSellfour= std(Sellfour);
[h,pfourmean] = ttest2(Buyfour,Sellfour,0.05,'right','unequal');
[h,pfourvar] =  vartest2(Buyfour,Sellfour,0.05,'left');


numElementsToSum = 5;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumfive = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyfive=returns(movsumfive>0);
Sellfive=returns(movsumfive<0);
ExRetBuyfive = mean(Buyfive);
ExRetSellfive = mean(Sellfive);
StdBuyfive = std(Buyfive);
StdSellfive= std(Sellfive);
[h,pfivemean] = ttest2(Buyfive,Sellfive,0.05,'right','unequal');
[h,pfivevar] =  vartest2(Buyfive,Sellfive,0.05,'left');


numElementsToSum = 6;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumsix = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buysix=returns(movsumsix>0);
Sellsix=returns(movsumsix<0);
ExRetBuysix = mean(Buysix);
ExRetSellsix = mean(Sellsix);
StdBuysix = std(Buysix);
StdSellsix= std(Sellsix);
[h,psixmean] = ttest2(Buysix,Sellsix,0.05,'right','unequal');
[h,psixvar] =  vartest2(Buysix,Sellsix,0.05,'left');


numElementsToSum = 7;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumseven = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyseven=returns(movsumseven>0);
Sellseven=returns(movsumseven<0);
ExRetBuyseven = mean(Buyseven);
ExRetSellseven = mean(Sellseven);
StdBuyseven = std(Buyseven);
StdSellseven= std(Sellseven);
[h,psevenmean] = ttest2(Buyseven,Sellseven,0.05,'right','unequal');
[h,psevenvar] =  vartest2(Buyseven,Sellseven,0.05,'left');


numElementsToSum = 8;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumeight = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyeight=returns(movsumeight>0);
Selleight=returns(movsumeight<0);
ExRetBuyeight = mean(Buyeight);
ExRetSelleight = mean(Selleight);
StdBuyeight = std(Buyeight);
StdSelleight= std(Selleight);
[h,peightmean] = ttest2(Buyeight,Selleight,0.05,'right','unequal');
[h,peightvar] =  vartest2(Buyeight,Selleight,0.05,'left');


numElementsToSum = 9;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumnine = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buynine=returns(movsumnine>0);
Sellnine=returns(movsumnine<0);
ExRetBuynine = mean(Buynine);
ExRetSellnine = mean(Sellnine);
StdBuynine = std(Buynine);
StdSellnine= std(Sellnine);
[h,pninemean] = ttest2(Buynine,Sellnine,0.05,'right','unequal');
[h,pninevar] =  vartest2(Buynine,Sellnine,0.05,'left');


numElementsToSum = 10;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumten = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyten=returns(movsumten>0);
Sellten=returns(movsumten<0);
ExRetBuyten = mean(Buyten);
ExRetSellten = mean(Sellten);
StdBuyten = std(Buyten);
StdSellten= std(Sellten);
[h,ptenmean] = ttest2(Buyten,Sellten,0.05,'right','unequal');
[h,ptenvar] =  vartest2(Buyten,Sellten,0.05,'left');


numElementsToSum = 11;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumeleven = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyeleven=returns(movsumeleven>0);
Selleleven=returns(movsumeleven<0);
ExRetBuyeleven = mean(Buyeleven);
ExRetSelleleven = mean(Selleleven);
StdBuyeleven = std(Buyeleven);
StdSelleleven= std(Selleleven);
[h,pelevenmean] = ttest2(Buyeleven,Selleleven,0.05,'right','unequal');
[h,pelevenvar] =  vartest2(Buyeleven,Selleleven,0.05,'left');


numElementsToSum = 12;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumtwelve = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buytwelve=returns(movsumtwelve>0);
Selltwelve=returns(movsumtwelve<0);
ExRetBuytwelve = mean(Buytwelve);
ExRetSelltwelve = mean(Selltwelve);
StdBuytwelve = std(Buytwelve);
StdSelltwelve= std(Selltwelve);
[h,ptwelvemean] = ttest2(Buytwelve,Selltwelve,0.05,'right','unequal');
[h,ptwelvevar] =  vartest2(Buytwelve,Selltwelve,0.05,'left');


numElementsToSum = 13;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumthirteen = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buythirteen=returns(movsumthirteen>0);
Sellthirteen=returns(movsumthirteen<0);
ExRetBuythirteen = mean(Buythirteen);
ExRetSellthirteen = mean(Sellthirteen);
StdBuythirteen = std(Buythirteen);
StdSellthirteen= std(Sellthirteen);
[h,pthirteenmean] = ttest2(Buythirteen,Sellthirteen,0.05,'right','unequal');
[h,pthirteenvar] =  vartest2(Buythirteen,Sellthirteen,0.05,'left');


numElementsToSum = 14;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumfourteen = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyfourteen=returns(movsumfourteen>0);
Sellfourteen=returns(movsumfourteen<0);
ExRetBuyfourteen = mean(Buyfourteen);
ExRetSellfourteen = mean(Sellfourteen);
StdBuyfourteen = std(Buyfourteen);
StdSellfourteen= std(Sellfourteen);
[h,pfourteenmean] = ttest2(Buyfourteen,Sellfourteen,0.05,'right','unequal');
[h,pfourteenvar] =  vartest2(Buyfourteen,Sellfourteen,0.05,'left');


numElementsToSum = 15;
mSum = conv(w, ones(numElementsToSum, 1), 'valid');
movsumfifteen = mSum(1:end-1);
returns = g(numElementsToSum+1:end);
Buyfifteen=returns(movsumfifteen>0);
Sellfifteen=returns(movsumfifteen<0);
ExRetBuyfifteen = mean(Buyfifteen);
ExRetSellfifteen = mean(Sellfifteen);
StdBuyfifteen = std(Buyfifteen);
StdSellfifteen= std(Sellfifteen);
[h,pfifteenmean] = ttest2(Buyfifteen,Sellfifteen,0.05,'right','unequal');
[h,pfifteenvar] =  vartest2(Buyfifteen,Sellfifteen,0.05,'left');

exretbuy = [ExRetBuytwo,ExRetBuythree,ExRetBuyfour,ExRetBuyfive,ExRetBuysix,ExRetBuyseven,ExRetBuyeight,ExRetBuynine,ExRetBuyten,ExRetBuyeleven,ExRetBuytwelve,ExRetBuythirteen,ExRetBuyfourteen,ExRetBuyfifteen];
exretsell = [ExRetSelltwo,ExRetSellthree,ExRetSellfour,ExRetSellfive,ExRetSellsix,ExRetSellseven,ExRetSelleight,ExRetSellnine,ExRetSellten,ExRetSelleleven,ExRetSelltwelve,ExRetSellthirteen,ExRetSellfourteen,ExRetSellfifteen];
stdbuy = [StdBuytwo,StdBuythree,StdBuyfour,StdBuyfive,StdBuysix,StdBuyseven,StdBuyeight,StdBuynine,StdBuyten,StdBuyeleven,StdBuytwelve,StdBuythirteen,StdBuyfourteen,StdBuyfifteen];
stdsell = [StdSelltwo,StdSellthree,StdSellfour,StdSellfive,StdSellsix,StdSellseven,StdSelleight,StdSellnine,StdSellten,StdSelleleven,StdSelltwelve,StdSellthirteen,StdSellfourteen,StdSellfifteen];
pmean= [ptwomean,pthreemean,pfourmean,pfivemean,psixmean,psevenmean,peightmean,pninemean,ptenmean,pelevenmean,ptwelvemean,pthirteenmean,pfourteenmean,pfifteenmean];
pvar= [ptwovar,pthreevar,pfourvar,pfivevar,psixvar,psevenvar,peightvar,pninevar,ptenvar,pelevenvar,ptwelvevar,pthirteenvar,pfourteenvar,pfifteenvar];
buyperiods = [numel(Buytwo),numel(Buythree),numel(Buyfour),numel(Buyfive),numel(Buysix),numel(Buyseven),numel(Buyeight),numel(Buynine),numel(Buyten),numel(Buyeleven),numel(Buytwelve),numel(Buythirteen),numel(Buyfourteen),numel(Buyfifteen)];
sellperiods = [numel(Selltwo),numel(Sellthree),numel(Sellfour),numel(Sellfive),numel(Sellsix),numel(Sellseven),numel(Selleight),numel(Sellnine),numel(Sellten),numel(Selleleven),numel(Selltwelve),numel(Sellthirteen),numel(Sellfourteen),numel(Sellfifteen)];
res = [exretbuy;stdbuy;buyperiods;exretsell;stdsell;sellperiods;pmean;pvar;];

Contact us