Professional Documents
Culture Documents
_
)
i s the variance of rets
following a buy sigal and O
' ge ' , ' ek ' , ' dow ' , ' dis ' , ' dd ' , ' cat ' , ' ba ' , ' axp ' , ' bhmsq ' , ' cvx ' , ' hpq ' , ' c ' ) ;
49 %tickers = char ( ' xom' , ' wmt ' ) ;
5 0
5 1 %First colum holds buyArray mean for each stock . Second column holds
52 %market return for each stock .
5 3
54 bootstrapMeans = zeros ( size ( tickers , 1 ) * ( N- 1 ) , 2 ) ;
5 5 origMeans = zeros ( size ( tickers , 1 ) , 2 , numRules ) ;
5 6 output = zeros ( size ( tickers , l ) , 3 , numRules ) ;
57 Tstats = zeros ( size ( t ickers , 1 ) +1 , 7 ) ;
5 8 convergence = zeros ( N, 2 , numRules , size ( tickers , 1 ) ) ;
5 9
6 0 %%%NEW AGGREGATE CODE%%%
6 1 aggregate = zeros ( size ( t ickers , l ) , 2 , numRules ) ;
62 %%%%%%%%%%%%%%%%%%%%%%%%
63
64
65
errorFlag = zeros ( size ( tickers , l ) , numRules ) ;
6 6 for l=l : size ( tickers , l ) ;
% Set to 1 i f no signal s on original series
246
67
68
69
70
71
7 2
7 3
7 4
7 5
7 6
7 7
7 8
7 9
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
tickers ( 1 , : )
ticker = strcat ( ' input \ ' , tickers ( l , : ) , ' . csv ' ) ;
M = csvread ( ticker , l , O ) ;
open = M ( : , 6 ) ;
high = M ( : , 7 ) ;
low = M | : , 8 ) ;
close = M ( : , 9 ) ;
adj _open = M ( : , 2 ) ;
adj _high = M ( : , 3 ) ;
adj_low = M ( : , 4 ) ;
adj _close = M ( : , 5 ) ;
%%%%%%%%%%%TEMP%%%%%%%%%%%%%%
open = adj _open;
high = adj _high ;
low = adj_low;
close = adj _close ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T = length ( close) ;
%Initial ize big output array
9 5 M = zeros ( T*N, 4 ) ;
9 6
97 %Get original return series
9 8
9 9 open_returns = [ 0 ; di f f ( log ( open) ) ] ;
1 0 0 high_returns = [ 0 ; di f f ( log ( high) ) ] ;
1 0 1 low_returns = [ 0 ; di f f ( log ( low) ) ] ;
102 close_returns = [ 0 ; di f f ( log ( close) ) ] ;
247
103
104 %Fit garchm
1 0 5
106 spec = garchset ( ' VarianceModel ' , ' GARCH-M' , ' P ' , 1 , ' Q ' , 1, ' R ' , 0, ' M ' , 1, ' Display' , ' of f ' ) ;
107 [ coef f , errors , LLF , innovations , sigma, summary] = garchf it ( spec , open_returns ) ;
1 0 8 garchdisp ( coeff , errors ) ;
1 0 9
1 1 0 %Write t -stats t o array
1 1 1
112 Tstats ( l , : ) = [ coef f . C/errors . C coef f . MA ( l ) /errors . MA ( l ) coef f . lnMean/ errors . lnMean coef f . K/ errors . K
113
1 1 4
1 1 5
1 1 6
1 1 7
1 1 8
1 1 9
1 2 0
1 2 1
1 2 2
1 2 3
1 2 4
1 2 5
1 2 6
127
128
129
130
131
1 3 2
1 3 3
134
135
1 3 6
1 3 7
coeff . GARCH ( l ) /errors . GARCH ( l ) coef f . ARCH ( l ) / errors . ARCH ( l ) tinv ( 0 . 9 7 5 , T- 6 ) ] ;
%Bootstrap step starts .
for n=l : N
%Resample each return series and create new open, high , low, close
%series
i f n==l ;
else
new_open_returns = open_returns ;
new_high_returns = high_returns ;
new_Iow_returns = low_returns ;
new_close_returns = close_returns ;
%Now recreate price series
new_open = open;
new_high = high ;
new_low = low;
new_close = close;
248
1 3 8
1 3 9
1 4 0
1 4 1
142
143
144
145
146
147
148
149
1 5 0
1 5 1
1 5 2
153
1 5 4
1 5 5
1 5 6
1 5 7
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 8 . RESAMPLE CLOSE , RECREATE OTHER SERIES RANDOMY FROM HIGH-CLOSE ,
%OPEN-CLOSE AND CLOSE-LOW RESAMPLED, SCALED DIFFERENCE VECTORS .
h_c_di f f
c_l_di f f
o_c_di f f
( high-close) . / close ;
( close- low) . /close ;
( open-close) . / close ;
h_c resample ( h_c_di f f ) ;
c 1 resample ( c_l_di f f ) ;
o_c resample ( o_c_di f f ) ;
h_c_di f f ;
c_l_di f f ;
o_c_di ff ;
%Now generate new close using garchm .
% new_close_returns
garchm_function ( l , close_returns , innovations . / sigma , coeff . C , coeff . M( l ) , coef f . InMean , coef f . K , coef f . GARCH ( l ) , co
ef f . ARCH ( l ) , sigma) ;
1 5 8
1 5 9
1 6 0
1 6 1
1 6 2
163
164
165
1 6 6
% new_close = cumprod ( [ close ( l ) ; exp ( new_close_returns ( 2 : end) ) ] ) ;
%
%
%
%
%
%
%
%
1 6 7 %
1 6 8
1 6 9
%
%
1 7 0 %
1 7 1 %
new_high = new_close ^ new_close . *h_c ;
new_low = new_close - new_close . *c_l ;
new_open = new_close 7 new_close . *o_c ;
%Correct days where series are out of order
%Get indexes of days that are wrong .
wrong_high = find ( new_high max ( new_low, new_open) ) ;
wrong_low = f ind ( new_low - min ( new_high, new_open) ) ;
for k=l : length ( wrong_high) ;
249
1 7 2 % index = wrong_high ( k) ;
1 7 3 % j = 0 ;
1 7 4 % whi le j <1 0 0 0 & ( new_high ( index) < max ( [ new_low ( index) new_open ( index) ) ) I new_low ( index) -
min ( [ new_high ( index) new_open ( index) ) ) ) ;
1 7 5 % new_high ( index) = new_close ( index) + new_close ( index) *h_c_di ff ( fix ( rand*T) +1 ) ;
1 7 6 % new_open ( index) = new_close ( index) + new_close ( index) *o_c_di f f ( fix ( rand*T) +l ) ;
1 7 7 % new_low ( index) = new_close ( index) - new_close ( index) *c_l_di f f ( f ix ( rand*T) +l ) ;
1 7 8 % j = j + 1 ;
1 7 9 % end;
1 8 0 % end;
1 81 %
182 % for k=1 : 1ength ( wrong_low) ;
183 % index = wrong_low ( k) ;
184 % j = 0 ;
1 85 % while j <1 0 0 0 & ( new_high ( index) < max ( [ new_low ( index) new_open ( index) ) ) I new_low ( index) -
min ( [ new_high ( index) new_open ( index) ) ) ) ;
186 % new_low ( index) = new_close ( index) - new_close ( index) *c_l_di f f ( fix ( rand*T) +l ) ;
187 % new_open ( index) new_close ( index) + new_close ( index) *o_c_di f f ( f ix ( rand*T) +1 ) ;
1 88 % new_high ( index) = new_close ( index) + new_close ( index) *h_c_di f f ( fix ( rand*T) +1 ) ;
1 8 9 % j = j ^ 1 ;
1 9 0
1 9 1
%
%
1 9 2 %
end;
end;
1 9 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 9 4
1 9 5
1 9 6
1 9 7
1 9 8
1 9 9
2 0 0
2 0 1
2 02
2 0 3
2 0 4
2 0 5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%8 . RESAMPLE OPEN, RECREATE OTHER SERIES RANDOMY FROM HIGH-CLOSE ,
%OPEN-CLOSE AND CLOSE-LOW RESAMPLED, SCALED DIFFERENCE VECTORS .
h_c_di ff
c_l_di ff
o_c_di f f
( high-open) . Iopen;
( open- low) . Iopen;
( close-open) . Iopen;
h_c
c_l
o_c
resample ( h_c_di f f ) ;
resample ( c_l_di f f ) ;
resample ( o_c_dif f ) ;
250
2 0 6
2 0 7 %Now generate new open using garch.
2 0 8
2 0 9 new_open_returns =
garchm_function ( l , open_returns , innovations . / siga , coef f . C , coeff . MA ( l ) , coeff . lnMean, coef f . K , coef f . GACH ( l ) , coe
ff . ACH ( l ) , siga) ;
2 1 0
2 1 1
new_open cumprod ( [ open ( l ) ; exp ( new_open_returns ( 2 : end ] ) ;
2 1 2 new_high new_open + new_open . *h_c ;
2 1 3 new_low = new_open - new_open . *c_l ;
2 1 4 new_close = new_open + new_open . *o_c ;
2 1 5
2 1 6 %Correct days where series are out o f order
2 1 7
2 1 8 %Get indexes of days that are wrong.
2 1 9
2 2 0 wrong_high = f ind ( new_high < max ( new_low, new_close ;
2 2 1 wrong_low = f ind ( new_low - min ( new_high , new_close ;
2 2 2
2 2 3 for k=l : length ( wrong_high) ;
2 2 4 index = wrong_high ( k) ;
2 2 5 j = O ;
2 2 6 whi le j <1 0 0 0 & ( new_high ( index) < max ( [ new_low ( index) new_close ( index) ] ) I new_low ( index) -
min ( [ new_high ( index) new_close ( index) ] ) ) ;
2 2 7 new_high ( index) = new_open ( index) + new_open ( index) *h_c_di ff ( f ix ( rand*T) +1 ) ;
2 2 8 new_close ( index) = new_open ( index) + new_open ( index) *o_c_diff ( f ix ( rand*T) +l ) ;
2 2 9 new_low ( index) = new_open ( index) - new_open ( index) * c_l_di ff ( f ix ( rand*T) +l ) ;
2 3 0 j = j + 1 ;
2 3 1 end;
2 3 2 end;
2 3 3
2 3 4 for k=l : length ( wrong_low) ;
2 3 5 index = wrong_low ( k) ;
2 3 6 j = 0 ;
2 3 7 while j <1 00 0 & ( new_high ( index) < max ( [ new_low ( index) new_close ( index) ] ) I new_low ( index) -
min t [ new._high ( index) new_close ( index) ] ) ) ;
25 1
2 3 8
2 3 9
2 4 0
2 4 1
242
2 43
2 44
2 45
246
247
2 4 8
2 49
2 5 0
2 5 1
2 5 2
%
2 5 3 end;
2 5 4
end;
end;
end;
new_low ( index) = new_open ( index) - new_open ( index) *c_l_di f f ( fix ( rand*T) +l ) ;
new_close ( index) = new_open ( index) + new_open ( index) *o_c_di f f ( fix ( rand*T) +1 ) ;
new_high ( index) = new_open ( index) + new_open ( index) *h_c_di f f ( f ix ( rand*T) +1 ) ;
j = j + 1 ;
% REMEMER TO CHANGE BUY RETURN ARRAY TO OPEN RETURNS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M( ( n- 1 ) *T+1 : n*T, : ) [ new_open new_high new_low new_close] ;
2 5 5 %%%%%% START TRADING RULE STEP %%%%%%
2 5 6
2 5 7
2 5 8
2 5 9
2 6 0
2 6 1
2 6 2
2 6 3
2 6 4
2 6 5
2 6 6
2 6 7
2 6 8
2 6 9
2 7 0
2 7 1
2 7 2
: )
for z=1 : numRules %Rule loop .
%Initial ize the grandiosely named indicator functions , which are j ust glori fied counters
I_buy = 0 ;
I_buySigma 0 ;
counter 0 ; %Count number of times no buy periods found .
%Bootstrap step starts .
for n=l : N
new_open M ( T* ( n- 1 ) +1 : T*n, 1 ) ;
new_high = M ( T* ( n- 1 ) +1 : T*n, 2 ) ;
new_low = M ( T* ( n- 1 ) +1 : T*n , 3 ) ;
252
2 7 3
2 7 4
2 7 5
2 7 6
2 7 7
2 7 8
2 7 9
2 80
2 81
2 82
2 83
2 84
2 8 5
2 8 6
2 87
2 8 8
2 8 9
2 9 0
2 9 1
2 9 2
2 9 3
2 9 4
2 9 5
2 9 6
2 9 7
2 9 8
2 9 9
3 0 0
3 0 1
3 0 2
3 0 3
3 04
3 0 5
3 0 6
3 07
3 0 8
new_close = M ( T* ( n-1 ) +1 : T*n, 4 ) ;
new_close_returns = [ 0 ; di f f ( log ( new_close ] ;
new_open_returns = [ 0 ; di f f ( log ( new_open ] ;
new_high_returns = [ 0 ; di f f ( log ( new_high ] ;
new_low_returns = [ 0 ; di f f ( log ( new_low ) ;
signalArray = zeros ( T, l ) ;
lwSig = lw ( new_open, new_high , new_low, new_close, t , u , v, w, x, y, z z ) ;
wmSig wm ( new_open , new_high , new_low, new_close, t , u , v, w , x , y, z z ) ;
cwmSig = cw( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
owmSig = ow( new_open, new_high , new_low, new_close, t , u , v, w, x, y, z z ) ;
ddSig = dd ( new_open, new_high, new_low, new_close , t , u , v, w, x, y, z z ) ;
wpuSig = wpu ( new_open, new_high , new_low, new_close , t , u, v , w, x, y, z z ) ;
bpuSig = bpu ( new_open, new_high, new_low, new_close, t , u , v, w, x , y, z z ) ;
hammerSig = hammer ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
bul l engSig = bul leng ( new_open, new_high, new_low, new_close, t , u , v, w, x, y, z z ) ;
pielineSig = piel ine ( new_open, new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
bul lharSig = bul lhar ( new_open, new_high, new_low, new_close , t , u , v, w , x , y, z z ) ;
thriupSig = thriup ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
throupSig throup ( new_open, new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
twbotSig = twbot ( new_open, new_high, new_low, new_close, t , u , v, w, x, y, z z ) ;
lbSig = lb ( new_open , new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
bmSig = bm( new_open, new_high , new_low, new_close, t , u , v, w , x , y, z z ) ;
cbmSig = cbm( new_open, new_high, new_low, new_close , t , u , v, w, x, y, z z ) ;
obmSig = obm( new_open, new_high , new_low, new_close, t , u , v, w, x, y, zz ) ;
gdSig = gd ( new_open, new_high, new_low, new_close , t , u , v, w, x , Y, zz ) ;
wssSig = wss ( new_open, new_high, new_low, new_close , t , u , v, w, x, Y, z z ) ;
bssSig = bss ( new_open, new_high, new_low, new_close , t , u, v, w, x, Y, zz ) ;
hangmanSig = hangman ( new_open, new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
bearengSig = beareng ( new_open , new_high, new_low, new_close , t , u, v, w , x , y, zz ) ;
dccSig = dcc ( new_open, new_high , new_low, new_close , t , u, v , w , x , y, zz ) ;
bearharSig = bearhar ( new_open , new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
thridnSig thridn ( new_open, new_high, new_low, new_close, t , u , v, w, x , y, zz ) ;
throdnSig = throdn ( new_open, new_high, new_low, new_close , t , u , v, w, x, Y, z z ) ;
253
3 0 9
3 10
3 11
3 12
3 1 3
3 14
3 1 5
3 1 6
3 17
3 1 8
3 1 9
3 2 0
3 2 1
3 2 2
3 2 3
3 2 4
3 2 5
3 2 6
3 2 7
3 2 8
3 2 9
3 3 0
3 3 1
3 3 2
3 3 3
3 3 4
3 3 5
3 3 6
3 3 7
3 3 8
3 3 9
3 40
3 41
342
343
344
twtopSig = twtop ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
expma = ema ( new_close , emaf ) ;
%%%%%%%%%% RULES %%%%%%%%%%
i f z==l %Rule 1 .
rule ( z ) = 1 ;
for i=2 : T-2
end;
end;
i f lwSig ( i )
signalArray ( i +tlag)
end;
if z==2 %Rule 2 .
rule ( z ) = 2 ;
for i=2 : T-2
end;
i f wSig ( i )
signalArray ( i +tlag)
end;
end;
if z==3 %Rule 3 .
rule ( z ) = 3 ;
for i=2 : T-2
end;
end;
i f cwmSig ( i )
signalArray ( i +tlag)
end;
i f z ==4 %Rule 4 .
rule ( z ) = 4 ;
for i=2 : T-2
if owmSig ( i )
s ignalArray ( i +tlag)
end;
end;
1 ;
1 ;
1 ;
1 ;
254
3 45
3 46
3 47
348
3 49
3 5 0
3 5 1
3 52
3 53
3 54
3 5 5
3 5 6
3 57
3 5 8
3 5 9
3 6 0
3 6 1
3 6 2
3 6 3
3 6 4
3 6 5
3 6 6
3 6 7
3 6 8
3 6 9
3 7 0
3 7 1
3 7 2
3 7 3
3 7 4
3 7 5
3 7 6
3 7 7
3 7 8
3 7 9
3 8 0
end;
i f z==5 %Rule 5 .
rule ( z ) = 5 ;
for i=2 : T-2
end;
end;
i f ddSig ( i )
signalArray ( i +tlag)
end;
i f z==6 %Rule 6 .
rule ( z ) = 6 ;
for i=2 : T-2
if wpuSig ( i )
signalArray ( i +tlag)
end;
end;
end;
i f z==7 %Rule 7 .
rule ( z ) = 7 ;
for i=2 : T-2
end;
end;
i f bpuSig ( i )
signalArray ( i +tlag)
end;
i f z==8 %Rule 8 .
rule ( z ) = 8 ;
for i=3 : T-3
1 ;
1 ;
1 ;
i f close ( i -2 ) < expma ( i- 2 ) & hammerSig ( i )
signa1Array ( i +tlag) = 1 ;
end;
end;
end;
i f z==9 %Rule 9 .
rule ( z ) = 9 ;
for i=3 : T-3
255
3 81
3 82
3 83
3 84
3 85
3 86
3 87
3 88
3 89
3 90
3 9 1
3 92
3 9 3
3 94
3 9 5
3 96
3 9 7
3 9 8
3 9 9
4 0 0
401
402
403
404
405
406
407
408
40 9
410
411
412
413
414
415
416
end;
i f close ( i -2 ) expma ( i-2 ) & bul lengSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
i f 2==10 %Rule 1 0 .
rule ( z ) = 1 0 ;
for i=3 : T-3
end;
end;
l L close ( i- 2 ) expma ( i - 2 ) & piel ineSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==ll %Rule 1 1 .
rule ( z ) = 1 1 ;
for i =3 : T-3
end;
end;
i f close ( i - 2 ) expma ( i-2 ) & bullharSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f 2==12 %Rule 12 .
rule ( z ) = 12 ;
for i=4 : T-4
end;
end;
i f close ( i - 3 ) expma ( i - 3 ) & thriupSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==13 %Rule 13 .
rule ( z ) = 13 ;
for i=4 : T-4
end;
if close ( i - 3 ) expma ( i- 3 ) & throupSig ( i )
signalArray ( i +tlag) = 1 ;
end;
256
417
4 1 8
4 1 9
4 2 0
421
422
423
424
425
426
427
428
429
4 3 0
431
43 2
43 3
43 4
43 5
43 6
437
438
439
440
441
442
443
444
4 4 5
4 4 6
447
448
449
450
451
452
end;
i f z==14 %Rule 1 4 .
rule ( z ) = 14 ;
for i=4 ; T-4
i f close ( i - 3 ) < expma ( i- 3 ) & twbotSig ( i )
signalArray ( i +tlag ) = 1 ;
end;
end;
end;
i f z==15 %Rule 1 5 .
rule ( z ) = 1 5 ;
for i=2 ; T-2
i f IbSig ( i )
signalArray ( i +tlag)
end;
end;
end;
i f z==16 %Rule 16 .
rule ( z ) = 16 ;
for i =2 ; T-2
end;
if bmSig ( i )
signalArray ( i +tlag)
end;
end;
i f z==17 %Rule 17 .
rule ( z ) = 17 ;
for i=2 : T-2
end;
end;
i f cbmSig ( i )
signalArray ( i +tlag)
end;
i f z==18 %Rule 18 .
ru1e ( z ) = 18 ;
for i=2 : T-2
1 ;
1 ;
1 ;
257
453
454
4 5 5
4 5 6
4 5 7
45 8
45 9
460
461
462
463
464
465
466
467
4 6 8
46 9
47 0
47 1
47 2
47 3
47 4
47 5
476
477
478
479
480
481
4 82
483
484
485
486
487
488
i f obrSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
end;
i f z==19 %Rule 1 9 .
rule ( z ) = 1 9 ;
for i=2 : T-2
end;
end;
i f gdSig ( i )
signalArray ( i+tlag)
end;
i f z==20 %Rule 2 0 .
rule ( z ) = 2 0 ;
for i=2 : T-2
end;
i f wssSig ( i )
signalArray ( i +tlag)
end;
end;
i f z==21 %Rule 2 1 .
rule ( z ) = 2 1 ;
for i=2 : T-2
end;
end;
i f bssSig ( i )
signalArray ( i +tlag)
end;
i f z==22 %Rule 2 2 .
rule ( z ) = 2 2 ;
for i=3 : T-3
1 ;
1 ;
1 ;
i f close ( i- 2 ) - expra ( i- 2 ) & hanganSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
258
489
4 9 0
4 9 1
49 2
493
49 4
49 5
4 9 6
49 7
49 8
49 9
5 0 0
5 0 1
5 02
503
504
505
506
5 0 7
5 0 8
5 0 9
5 1 0
5 1 1
5 1 2
513
5 1 4
5 1 5
5 1 6
5 1 7
5 1 8
5 1 9
5 2 0
5 2 1
5 2 2
523
5 2 4
end;
i f z==23 %Rule 2 3 .
rule ( z ) = 23 ;
for i=3 : T-3
end;
end;
i f close ( i -2 ) - expma ( i - 2 ) & bearengSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==24 %Rule 2 4 .
rule ( z ) = 2 4 ;
for i=3 : T-3
end;
end;
i f close ( i -2 ) - expma ( i- 2 ) & dccSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==2 5 %Rule 2 5 .
rule ( z ) = 2 5 ;
for i=3 : T-3
end;
end;
i f close ( i - 2 ) > expma ( i - 2 ) & bearharSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==26 %Rule 2 6 .
rule ( z ) = 2 6 ;
for i=4 : T-4
end;
end;
i f close ( i- 3 ) - expma ( i- 3 ) & thridnSig ( i )
signalArray { i+tlag ) = 1 ;
end;
i f z==27 %Rule 2 7 .
rule ( z ) = 2 7 ;
for i=4 : T-4
259
5 2 5
5 2 6
5 2 7
5 2 8
5 2 9
5 3 0
5 3 1
5 3 2
5 3 3
5 3 4
5 3 5
5 3 6
5 3 7
5 3 8
5 3 9
5 4 0
5 4 1
542
543
544
545
5 46
547
548
549
5 5 0
5 5 1
5 5 2
5 5 3
5 54
5 5 5
5 5 6
5 5 7
5 5 8
5 5 9
5 6 0
end;
end;
i f close ( i - 3 ) > expma ( i - 3 ) & throdnSig ( i )
signalArray ( i+tlag) = 1 ;
end;
i f z==2 8 %Rule 2 8 .
rule ( z ) = 2 8 ;
for i =4 : T-4
end;
end;
i f close ( i - 3 ) - expma ( i - 3 ) & twtopSig ( i )
signalArray ( i +tlag) = 1 ;
end;
%Reprocess to remove double signals
for i =HP+1 : T-HP+1
end;
i f signalArray ( i ) == 1 & max ( signalArray ( i - HP : i- 1 ) ) - - 1
signalArray ( i ) 0 ;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Profit calcs
%Iterate through buy/ sell points calculating prof it .
buys = 0 ;
buyCounter = 0 ;
buyRetArray = [ J ;
for i =1 : T-HP-1
260
5 6 1
562
563
564
565
5 6 6
5 6 7
5 6 8
5 6 9
5 7 0
5 7 1
5 7 2
573
5 7 4
5 7 5
5 7 6
5 7 7
5 7 8
5 7 9
5 8 0
5 8 1
5 82
5 83
584
5 85
5 86
5 87
5 88
5 89
5 9 0
5 9 1
5 92
5 9 3
5 9 4
5 9 5
5 9 6
end;
%Calculate buy profit
if signalArray ( i ) == 1
end;
%Write all returns into array for sigma calc .
buyRetArray = [ buyRetArray; new_open_returns ( i : i +HP-1 ) ] ; % *
buys = buys + 1 ;
%plot ( new_close )
%hold on
numBuys ( n) = buys ;
i f buys==O
end;
i f n==l
errorFlag ( l , z )
break;
end;
1 ;
convergence ( n, : , z , l ) [ I_buy/ ( n- 1 - counter) I_buySigma/ ( n-1-counter) ] ;
counter = counter + 1 ;
continue ;
buySigma = std ( buyRetArray) ;
buyRet = mean ( buyRetArray) ;
i f n==l %First time through record profit as original Dow prof it .
origBuyRet = buyRet i
origBuySigma = buySigma;
end;
261
5 9 7
5 9 8
5 9 9
6 0 0
6 0 1
6 02
6 0 3
6 04
6 0 5
6 0 6
6 0 7
6 0 8
6 0 9
6 1 0
6 1 1
6 1 2
613
614
6 1 5
6 1 6
6 1 7
6 1 8
619
6 2 0
621
622
6 2 3
6 24
6 2 5
6 2 6
6 2 7
6 2 8
62 9
6 3 0
6 3 1
%Compare returns t o original
if buyRet - origBuyRet & n-=l
I_buy I_buy + 1 ;
end;
i f buySigma - origBuySigma & n-=l
I_buYSigma = I_buYSigma + 1 ;
end;
%%
i f n-=l
convergence ( n , : , z , l ) = [ I_buy! ( n- 1- counter) I_buySigma! ( n-1-counter) ] ;
bootstrapMeans ( 1 * ( n- 1 ) , : , z ) = [ buyRet buySigma] ;
end;
%%
end;
i f n-=l
if errorFlag ( 1 , z ) 0
f irst time through gets Dow result .
probabi l i ty_buy I_buy! ( N- 1 -counter) ; %N l correction since
probabi l ity_buySigma I_buySigma/ ( N- 1 - counter) ;
end;
output ( 1 , : , z ) [ probability_buy probability_buySigma N- 1-counter] ;
origMeans ( l , : , z ) [ origBuyRet origBuySigma] ;
%%%%NEW AGGREGATE CODE%%%%
aggregate ( 1 , : , z ) [ I_buy I_buySigma] ;
%%%%%%%%%%%%%%%%%%%%%%%%%%
262
6 3 2 end;
633
634 end;
6 3 5
6 3 6 end;
637
638 for z=l : numRules
6 3 9
640 i f ru1e ( z ) 1 0
641 fid = fopen ( strcat ( ' output\ c_garchm_rule ' , char ( rule ( z ) +4 8 ) , ' . csv ' ) , ' w ' ) ; %Changed this l ine 1 0
Jan 0 4
642 else
643 f id
fopen ( strcat ( ' output\ c_garchm_rule ' , char ( f loor ( rule ( z ) / 1 0 ) +48 ) , char ( mod ( rule ( z ) , 10 ) +4 8 ) , ' . csv ' ) , ' w' ) ;
%Changed this l ine 1 0 Jan 04
644 end;
6 45
6 46 fprintf ( f id, ' %s \n\n ' , ' BOOTSTRAP RESULTS : ' ) ;
647 fprintf ( fi d, ' %s \n ' , ' , buy, sigma buy, num bootstraps ' ) ;
6 48 for i=l : size ( output , l )
649 if errorFlag ( i , z ) == 0
6 5 0 fprintf ( f id, ' %s , % f , % f , % f \n ' , tickers ( i , : ) , output ( i , : , z ) ) ;
6 5 1 else
6 5 2
6 5 3 end;
fprint f ( fid, ' %s , %s\n ' , tickers ( i , : ) , ' Error : No signal on original series . ' ) ;
6 5 4 end;
6 5 5
6 5 6 %%%NEW AGGREGATE CODE%%%%
657 fprintf ( f id, ' \n%s\n\n ' , ' AGGREGATE RESULTS : ' ) ;
6 5 8 fprintf ( fid, ' \n%s , % f , %f , % f \n\n ' , ' Aggregate ' , sum ( aggregate ( : , : , z ) ) / sum ( output ( : , 3 , z ) ) ) ;
6 5 9 %%%%%%%%%%%%%%%%%%%%%%%%%
6 6 0
6 6 1
6 6 2 bsMean = bootstrapMeans ( : , : , z ) ; %%
663 oMean = origMeans ( : , : , z ) ; %%
664 averages = [ sum ( bsMean) / length ( bsMean ( bsMean-=O ) ) ; sum( oMean) / length ( oMean ( oMean-=O ) ) ) ; %%
263
6 6 5
6 6 6 %averages = [ mean ( bootstrapMeans ( : , : , z ) ) ; mean ( origMeans ( : , : , z ) ) ] ;
667
668 fprintf ( fid, ' \n%s\n\n ' , ' AVERAGES : ' ) ;
6 6 9 fprintf ( fid, ' %s \n ' , ' , buy, sigma buy ' ) ;
6 7 0 fprintf ( f id, ' %s , % f , % f \n ' , ' mean ' , averages ( l , l ) , averages ( l , 2 ) ) ;
671 fprintf ( fid, ' %s , % f , % f \n ' , ' dow ' , averages ( 2 , 1) , averages ( 2 , 2 ) ) ;
672
673 %T-stat count
674
6 7 5 tCount = zeros ( l , 6 ) ;
676 for i=l : size ( tickers , l )
677 tCount = tCount ( abs ( Tstats ( i , 1 : end- 1 ) ) - Tstats ( i , end) ) ;
6 7 8 end
6 7 9 Tstats ( end, 1 : end- 1 ) = tCount ;
6 80
6 81 fprintf ( fid, ' \n%s\n\n ' , ' PARAMETER SIGNIFICANCE COUNT : ' ) ;
682 fprintf ( f id, ' %s \n ' , ' , C , MA, InMean, K, GARCH , ARCH ' ) ;
683 for i=l : s i ze ( Tstats , l ) - l
684 fprintf ( fid, ' %s , % f , %f , % f , %f , % f , % f , % f \n ' , tickers ( i , : ) , Tstats ( i , : ) ) ;
6 8 5 end;
686 fprintf ( f id, ' %s , % f , % f , % f , % f , % f , % f \n ' , ' COUNT ' , Tstats ( end, : ) ) ;
687
688 fclose ( f id) ;
6 8 9
6 9 0 end ;
6 9 1
6 9 2 %%%%%% CONERGENCE OUTPUT %%%%%%
693 fid = fopen ( ' output\c_gm_convergence . csv ' , ' w ' ) ;
6 9 4 fprintf ( fid, ' Rul e, ' ) ;
6 9 5 for 1 = l : size ( tickers , l ) -l
6 9 6 fprintf ( f id, ' Ticker , P_b, P_sigmab, , ' ) ;
6 9 7 end;
6 9 8 fprintf ( fid, ' Ticker , P_b, P_sigma_b\n ' ) ;
6 9 9 for z = l : numRules
7 0 0 for n=l : N
264
7 0 1
702
7 0 3
fprintf ( fid, ' %f , ' , z ) ;
for 1 = l : size ( tickers , l ) - l
fprintf ( fid, ' %s , % f , % f ,
704 end;
tickers ( l , : ) , convergence ( n , l , z , l ) , convergence ( n, 2 , z , 1 ) ) ;
7 0 5 fprintf ( fid, ' %s , %f , %f \n ' , tickers ( size ( t ickers , l ) , : ) , convergence ( n , l , z , size ( tickers , l ) ) ,
convergence ( n, 2 , z , si ze ( tickers , 1 ) ) ) ;
7 0 6 end;
707 fprintf ( f id, ' \n ' ) ;
7 0 8 end;
7 0 9 fclose ( fid) ;
265
A.3.9. GARCH-M Function
1 function R = garchm_function ( N, returns , residuals , C , MA, InMean, K , GARCH, ARCH, sigma)
2 %GARCHM_BOOTSTRAP bootstraps a garch-m model .
3 % Input is residuals and f itted parameters from original garch-m model . N is
4 %the number of realisations to create . Returns a by N matrix of N return
5 %series of length T .
6 %Note the parameter match with Blake is as fol lows :
7 % C = a
8 % MA = b
9
1 0
1 1
12
13
14
1 5
1 6
1 7
1 8
%
%
%
%
InMean = gamma
K = alphaO
GARCH = beta
ARCH = alpha1
lead = 1 0 0 0 ; %Lead in period to minimi ze transient ef fects .
T length ( residuals ) ;
R zeros ( T+lead, N) ;
1 9 for n=l : N
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 0
3 1
32 %
epsi lon = resample ( [ residuals ; residuals ; residuals ) ) ; %Need a longer residual series for lead period .
%epsi lon = randn ( [ T* 3 , 1 ) ) ;
ht = std ( residuals . * sigma) A2 ;
R ( l , n) = 0 ;
for t=2 : T+lead
old_ht ht ;
ht = K + ARCH* ( epsi lon ( t -1 ) * sqrt ( old_ht ) ) A2 + GARCH*old_ht ;
R ( t , n) C + InMean*ht + MA* ( epsi lon ( t -1 ) *sqrt ( old_ht ) ) +epsi lon ( t ) *sqrt ( ht) ;
266
3 3 % ht = K + ARCH* ( epsilon ( t - l ) ) A2 + GARCH*old_ht ;
3 4 % R ( t , n) C + InMean*ht + MA* ( epsi lon ( t-l ) ) +epsilon ( t ) ;
3 5
3 6 end;
3 7
3 8 end;
267
A.3. 10. EGARCH Bootstrap
1 %BOOTSTRAP EGARCH
2
3 %TH1NGS TO CHECK
4
5 %Are the output descriptions correct?
6 %1s the buy return array picking up the correct returns ( open v close) ?
7 %1 s the GARCH fit picking up the correct returns ( open v close ) ?
8 %1s the tlag correct ?
9 %1s the number of bootstraps correct?
1 0 %1 s the number of rules correct ?
1 1 %Is the emaf correct ?
1 2 %1 s the HP correct ?
1 3 %Are the CS parameters correct ?
1 4
1 5
1 6 %Generates egarch bootstrapped series .
1 7
1 8 format long
19
2 0
2 1
2 2
2 3
24
2 5
2 6
%Parameters
tlag = 2 ;
N = 5 0 1 ;
mnRules = 3 0 ;
emaf = 1 0 ;
HP = 1 0 ;
%Time 1ag on return calculations , e . g . set to 2 for close t+2 .
%Number of bootstrap iterations + 1 ( f irst block holds original series ) .
%Numer of trading rules to tes t .
27 rule = zeros ( numRules , l ) ;
2 8
2 9
3 0
3 1
32
% t
% u
% v
% w
0 . 00 0 5 ;
0 . 0 0 5 ;
0 . 001 ;
0 . 0 1 ;
268
3 3 % x = 0 . 1 ;
34 % y = 0 . 5 ;
3 5 % zz = 2 ,
3 6
37 t 0 . 0 0 0 5 ;
3 8 u 0 . 0 07 5 ;
3 9 v 0 . 0 0 1 ;
4 0 w 0 . 01 5 ;
41 x 0 . 1 ;
42 y 0 . 5 ;
43 zz
=
2 ,
44
45
46 %Input
47
48 tickers
char ( ' xom' , ' wt ' , ' utx ' , ' t ' , ' sbc ' , ' s ' , ' pg ' , ' msf t ' , ' mrk ' , ' mo ' , ' g' , ' mcd ' , ' ko ' , ' j pm' , ' j nj , , ' ipl ' , ' aa ' , ' intc ' , ' i
bm' , ' hon ' , ' hd ' , ' gt ' ,
_' ' ge ' , ' ek ' , ' dow ' , ' dis ' , ' dd ' , ' cat ' , ' ba ' , ' axp ' , ' bhmsq ' , ' cvx ' , ' hpq ' , ' c ' ) ;
4 9 %tickers = char ( ' xom' , ' wmt ' ) ;
5 0
5 1 %First colum holds buyArray mean for each stock . Second column holds
52 %market return f or each stock .
53
54 bootstrapMeans = zeros ( size ( tickers , l ) * ( N- 1 ) , 2 ) ; %%
5 5 origMeans = zeros ( size ( t ickers , 1 ) , 2 , numRules) ;
5 6 output = zeros ( size ( tickers , 1 ) , 3 , numRules ) ;
57 Tstats = zeros ( size ( tickers , l ) +l , 8 ) ;
5 8 convergence = zeros ( N, 2 , numRules , size ( t ickers , l ) ) ;
5 9
6 0 %%%NEW AGGREGATE CODE%%%
61 aggregate = zeros ( size ( ti ckers , l ) , 2 , numRules ) ;
62 %%%%%%%%%%%%%%%%%%%%%%%%
63
64
6 5
errorFlag = zeros ( size ( t ickers , 1 ) , numRules ) ;
6 6 for l=l : size ( tickers , l ) ;
%Set to 1 i f no signals on original series
269
67
6 8
6 9
7 0
7 1
7 2
7 3
7 4
7 5
7 6
7 7
7 8
7 9
80
81
82
83
84
8 5
8 6
87
88
8 9
9 0
9 1
92
9 3
94
tickers ( l , : }
ticker = strcat ( ' input\ ' , tickers ( l , : } , ' . csv ' } ;
M = csvread ( ticker, l , O ) ;
open = M ( : , 6 ) ;
high = M ( : , 7 ) ;
low = M ( : , 8 ) ;
close = M ( : , 9 ) ;
adj _open = M ( : , 2 } ;
adj _high = M ( : , 3 ) i
adj _low = M ( : , 4 } ;
adj _close = M ( : , S } ;
%%%%%%%%%%%TEMP%%%%%%%%%%%%%%
open = adj _open;
high = adj _high;
low = adj _low;
close = adj _close ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T = length ( close) ;
%Initialize big output array
9 5 M = zeros ( T*N, 4 ) ;
9 6
9 7 %Get original return series
9 8
9 9 open_returns = [ 0 ; di f f ( log ( open} } ) ;
1 0 0 high_returns = [ 0 ; di f f ( log ( high) } ) ;
1 0 1 low_returns = [ 0 ; di f f ( log ( low} } ) ;
102 close_returns = [ 0 ; di f f ( log ( close} } ) ;
270
1 0 3
1 0 4
1 0 5
1 0 6
%Fit egarch
107 spec garchset ( ' VarianceModel ' , ' EGARCH ' , ' P ' , 1 , ' Q ' , 1 , ' R ' , 1 , ' M ' , 1 , ' Display ' , ' of f ' ) ;
1 0 8 [ coef f , errors , LLF, innovations , sigma, sumary] = garchfit ( spec , open_returns ) ;
1 0 9 garchdisp ( coef f , errors ) ;
1 1 0
1 1 1 %Write t-stats t o array
1 1 2
1 1 3 Tstats ( l , : ) = [ coef f . C/ errors . C coef f . MA ( l ) /errors . MA ( l ) coef f . AR ( l ) / errors . AR ( l ) coef f . K/ errors . K
114
coeff . GARCH ( l ) / errors . GARCH ( l ) coef f . ARCH ( l ) / errors . ARCH ( l ) coef f . Leverage ( l ) /errors . Leverage ( l )
tinv ( 0 . 9 7 5 , T-7 ) ) ;
1 1 5 %Bootstrap step starts .
1 1 6
1 17
1 1 8
1 1 9
1 2 0
1 2 1
122
123
124
1 2 5
1 2 6
127
1 2 8
1 2 9
1 3 0
1 3 1
1 3 2
1 3 3
1 3 4
1 3 5
1 3 6
for n=l : N
%Resample each return series and create new open, high, low, close
%series
if n== l ;
else
new_open_returns = open_returns ;
new_high_returns = high_returns ;
new_Iow_returns = low_returns ;
new_close_returns = close_returns ;
%Now recreate price series
open;
new_high = high ;
new_low = low;
new_close = close;
271
137
138
139
140
141
142
143
144
%
%
%
%
%
%
145 %
1 46
147
148
1 49
1 5 0
1 5 1
1 5 2
1 5 3
1 5 4
1 5 5
%
%
%
%
%
%
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%8 . RESAMPLE CLOSE , RECREATE OTHER SERIES RANDOMY FROM HIGH-CLOSE,
%OPEN-CLOSE P CLOSE-LOW RESAMPLED, SCALED DIFFERENCE VECTORS .
h_c_di f f = ( high- close) . / close;
c_l_dif f ( close- low) . / close ;
o_c_di f f ( open- close) . /close;
h_c = resample ( h_c_di f f ) ;
c_l resample ( c_l_di f f ) ;
o_c = resample ( o_c_di f f ) ;
h_c h_c_di f f ;
c_l c_l_di f f ;
o_c o_c_di f f ;
%Now generate new close using egarch .
1 5 6 % new_close_returns
egarch_function ( 1 , close_returns , innovations . / sigma, coef f . C , coef f . MA ( 1 ) , coef f . AR ( 1 ) , coeff . K , coef f . GARCH ( 1 ) , coe
f f . ARCH ( 1 ) , coef f . Leverage ( 1 ) , sigma) ;
1 5 7 % new_close = cumprod ( [ close ( 1 ) ; exp ( new_close_returns ( 2 : end) ) ) ) ;
1 5 8
1 5 9
1 6 0
1 6 1
1 6 2
1 6 3
1 6 4
1 6 5
1 6 6
1 6 7
1 6 8
1 6 9
1 7 0
%
%
%
%
%
%
%
%
%
%
%
%
%
new_high = new_close + new_close . *h_c ;
new_low = new_close - new_close . *c_l ;
new_open = new_close + new_close . *o_c ;
%Correct days where series are out of order
%Get indexes of days that are wrong .
wrong_high = f ind ( new_high max ( new_Iow, new_open) ) ;
wrong_low = f ind ( new_Iow - min ( new_high , new_open) ) ;
for k=1 : length ( wrong_high) ;
272
17 1
1 7 2
1 7 3
1 7 4
1 7 5
1 7 6
1 7 7
1 7 8
17 9
1 8 0
% index = wrong_high ( k) ;
% j = 0 ;
% while j <1 00 0 & ( new_high ( index) < max ( [ new_low ( index) new_open ( index) ] l I new_low ( index) -
min ( [ new_high ( index) new_open ( index) ] ) ) ;
% new_high ( index) = new_close ( index) ^ new_close ( index) *h_c_di f f ( fix ( rand*T) +l ) j
% new_open ( index) = new_close ( index) + new_close ( index) *o_c_di f f ( f ix ( rand*Tl +1 ) ;
% new_low ( index) = new_close ( index) - new_close ( index) * c_l_di f f ( f ix ( rand*T) +l ) ;
%
j = j + 1 ;
%
%
%
end;
end;
1 8 1 % for k=l : length ( wrong_low) ;
182 % index = wrong_low ( k) ;
1 83 % j = 0 ;
1 84 % while j <1 0 0 0 & ( new_high ( index) < max ( [ new_low ( index) new_open ( indexl ) ) I new_low ( index) -
min ( [ new_high ( index) new_open ( index) ) ) ) ;
1 85 % new_low ( index) = new_close ( index) - new_close ( index) * c_l_di f f ( f ix ( rand*Tl +1 ) ;
1 8 6 % new_open ( indexl new_close ( index) + new_close ( index) *o_c_di f f ( fix ( rand*T) +1 ) ;
1 87 % new_high ( index) = new_close ( index) new_close ( index) *h_c_di f f ( fix ( rand*T) +l ) j
1 88 % j = j ^ 1 ;
1 89 % end;
1 9 0 % end;
1 9 1
1 9 2
1 9 3
1 9 4
1 9 5
1 9 6
1 9 7
1 9 8
1 9 9
2 0 0
2 01
2 0 2
2 0 3
2 04
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 8 . RESAMPLE OPEN, RECREATE OTHER SERIES RANDOMY FROM HIGH-CLOSE ,
%OPEN-CLOSE AND CLOSE-LOW RESAMPLED, SCALED DIFFERENCE VECTORS .
h_c_di f f
c_l_di f f
o_c_di f f
( high-open) . Iopen;
( open- low) . Iopen;
( close-open) . /open;
h_c resample ( h_c_di f f ) ;
c_l resample ( c_l_di f f ) ;
o_c resample ( o_c_di f f ) ;
273
2 05
2 0 6
2 0 7
%Now generate new open using egarch
2 0 8 new_open_returns =
egarch_function ( 1 , open_returns , innovations . / sigma, coef f . C , coef f . M( 1 ) , coef f . A( 1 ) , coef f . K , coeff . GACH ( 1 ) , coef
f . ACH ( 1 ) , coef f . Leverage ( 1 ) , sigma) ;
2 0 9 new_open cumprod ( [ open ( 1 ) ; exp ( new_open_returns ( 2 : end) ) ) ) ;
2 1 0
2 1 1
212
2 1 3
2 14
2 1 5
2 1 6
2 1 7
2 1 8
2 1 9
2 2 0
2 2 1
new_high new_open + new_open . *h_c ;
new_low = new_open - new_open . * c_l ;
new_close = new_open + new_open . *o_c ;
%Correct days where series are out of order
%Get indexes of days that are wrong.
wrong_high = f ind ( new_high < max ( new_low, new_close) ) ;
wrong_low = f ind ( new_low - min ( new_high , new_close ) ) ;
2 2 2 f or k=1 : 1 ength ( wrong_high) ;
2 2 3 index = wrong_high ( k) ;
2 2 4 j = 0 ;
2 2 5 whi le j <1 0 0 0 & ( new_high ( index) < max ( [ new_low ( index) new_close ( index) ) ) I new_low ( index) -
min ( [ new_high ( index) new_close ( index) ) ) ) ;
2 2 6 new_high ( index) = new_open ( index) + new_open ( index) *h_c_dif f ( fix ( rand*T) +1 ) ;
2 2 7 new_close ( index) = new_open ( index) + new_open ( index) *o_c_dif f ( f ix ( rand*T) +1 ) ;
2 2 8 new_low ( index) = new_open ( index) - new_open ( index) * c_l_di f f ( f ix ( rand*T) + 1 ) ;
2 2 9 j = j + 1 ;
2 3 0
end;
2 3 1 end;
2 3 2
2 3 3 for k=1 : 1ength ( wrong_low) ;
2 3 4 index = wrong_low ( k) ;
2 3 5 j = 0 ;
2 3 6 whi le j <1 0 0 0 ( new_high ( index) < max ( [ new_low ( index) new_close ( index) ] ) I new_low ( index) -
min ( [ new_high ( index) new_close ( index) ) ) ) ;
274
2 3 7
2 3 8
2 3 9
2 40
2 41
2 42
2 43
244
245
246
247
2 48
2 49
2 5 0
2 5 1
%
2 5 2 end;
2 5 3
end;
end;
end;
new_low ( index) = new_open ( index) - new_open ( index) *c_l_di f f ( f ix ( rand*T) +1 ) ;
new_close ( index) = new_open ( index) + new_open ( index) *o_c_di f f ( fix ( rand*T) +1 ) ;
new_high ( index) = new_open ( index) + new_open ( index) *h_c_di f f ( f ix ( rand*T) + 1 ) ;
j = j + 1 ;
REMEMBER TO CHANGE BUY RETURN ARY TO OPEN RETURNS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M ( ( n- 1 ) *T+1 : n*T, : )
2 5 4 %%%%%% START TRADING RULE STEP %%%%%%
2 5 5
2 5 6
2 5 7
2 5 8
2 5 9
2 6 0
2 6 1
2 62
2 6 3
2 6 4
2 6 5
2 6 6
2 6 7
2 6 8
2 6 9
2 7 0
2 7 1
: )
for z=1 : numRules %Rule loop .
%Initialize the grandiosely named indicator functions , whi ch are j ust glorif ied counters
I_buy = 0 ;
I_buySigma : ,
counter = 0 ; %Count number of times no buy periods found .
%Bootstrap step starts .
for n=1 : N
new_open = M ( T* ( n- 1 ) +1 : T*n , 1 ) ;
new_high = M ( T* ( n- l ) +1 : T*n , 2 ) ;
new_low = M ( T* ( n- l } +1 : T*n , 3 ) ;
275
272
2 7 3
2 7 4
2 7 5
2 7 6
2 7 7
2 7 8
2 7 9
2 8 0
2 8 1
2 8 2
2 8 3
2 84
2 8 5
2 8 6
2 87
2 88
2 8 9
2 9 0
2 9 1
2 92
2 9 3
2 9 4
2 9 5
2 9 6
2 97
2 9 8
2 9 9
3 0 0
3 01
3 0 2
3 0 3
3 0 4
3 0 5
3 06
3 07
new_close = M( T* ( n-1 ) +1 : T*n , 4 ) ;
new_close_returns [ 0 ; diff ( log ( new_close) ) ] ;
new_open_returns = [ 0 ; di ff ( log ( new_open) ) ] ;
new_high_returns = [ 0 ; di f f ( log ( new_high) ) ] ;
new_Iow_returns = [ 0 ; dif f ( log ( new_low) ) ] ;
signalArray = zeros ( T, l ) ;
lwSig = lw ( new_open, new_high, new_low, new_close, t , u , v, w, x, y, z z ) ;
wmSig = wm( new_open , new_high, new_low, new_close, t , u , v, w, x, y, z z ) ;
cwmSig = cwm( new_open, new_high, new_low, new_close , t , u, v, w , x , y, z z ) ;
owSig = owm ( new_open, new_high , new_low, new_close , t , u , v, w, x, y, z z ) ;
ddSig = dd ( new_open, new_high , new_low, new_close, t , u , v, w, x , y, z z ) ;
wpuSig = wpu ( new_open, new_high, new_low, new_close, t , u, v, w , x , y, z z ) ;
bpuSig = bpu ( new_open, new_high, new_low, new_close , t , u , v, w, x, y, z z ) ;
hammerSig = hammer ( new_open, new_high , new_low, new_close , t , u, v, w , x , y, z z ) ;
bul l engSig bul leng ( new_open, new_high , new_low, new_close, t , u, v, w, x, y, z z ) ;
piel ineSig = piel ine ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
bullharSig = bul lhar ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
thriupSig = thriup ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
throupSig = throup ( new_open, new_high, new_low, new_close , t , u , v , w, x, y, z z ) ;
twbotSig = twbot ( new_open, new_high, new_low, new_close, t , u, v, w, x , y, 2Z ) ;
IbSig = Ib ( new_open, new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
bmSig = bm ( new_open, new_high, new_low, new_close , t , u, v, w, x , y, z z ) ;
cbmSig = cbm( new_open, new_high, new_low, new_close , t , u , v, w , x , y, z z ) ;
obmSig = obm( new_open, new_high, new_low, new_close , t , u, v, w , x , y, z z ) ;
gdSig = gd ( new_open , new_high, new_low, new_close, t , u , v, w, x, y, z z ) ;
wssSig = wss ( new_open, new_high, new_low, new_close , t , u , v, w , x , y, zz ) ;
bssSig = bss ( new_open, new_high, new_low, new_close , t , u, v, w , x , y, z z ) ;
hangmanSig = hangman ( new_open, new_high, new_low, new_close, t , u , v, w , x , y, z z ) ;
bearengSig = beareng ( new_open , new_high, new_low, new_close, t , u, v, w, x, y, z z ) ;
dccSig = dcc ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
bearharSig = bearhar ( new_open, new_high , new_low, new_close , t , u, v, w, x, y, z z ) ;
thridnSig thridn ( new_open, new_high , new_low, new_close, t , u , v, w, x, y, zz ) ;
throdnSig = throdn ( new_open, new_high, new_low, new_close , t , u, v, w , x , y, 2Z ) ;
276
3 0 8
3 0 9
3 1 0
3 1 1
3 1 2
3 1 3
3 1 4
3 1 5
3 1 6
3 1 7
3 1 8
3 1 9
3 2 0
3 2 1
3 2 2
3 2 3
3 2 4
3 2 5
3 2 6
3 2 7
3 2 8
3 2 9
3 3 0
3 3 1
3 3 2
3 3 3
3 3 4
3 3 5
3 3 6
3 3 7
3 3 8
3 3 9
3 4 0
3 41
3 42
3 43
twtopSig = twtop ( new_open, new_high, new_low, new_close , t , u, v, w, x, y, z z ) ;
expma = ema ( new_close , emaf ) ;
%%%%%%%%%% RULES %%%%%%%%%%
if z==l %Rule 1 .
rule ( z ) = 1 ;
for i=2 : T-2
end;
end;
i f lwSig ( i )
signalArray ( i +tlag)
end;
if z==2 %Rule 2 .
rule ( z ) = 2 ;
for i=2 : T-2
if wmSig ( i )
signalArray ( i+tlag)
end;
end;
end;
i f z==3 %Rule 3 .
rule ( z ) = 3 ;
for i=2 : T-2
end;
end;
i f cwmSig ( i )
signalArray ( i +tlag)
end;
i f z==4 %Rule 4 .
rule ( z ) = 4 ;
for i=2 : T-2
if owSig ( i )
signalArray ( i +tlag)
end;
end;
1 ;
1 ;
1 ;
1 ;
277
3 44
3 45
3 46
347
348
3 4 9
3 5 0
3 5 1
3 52
3 5 3
3 5 4
3 5 5
3 5 6
3 5 7
3 58
3 5 9
3 6 0
3 6 1
3 6 2
3 6 3
3 6 4
3 6 5
3 6 6
3 6 7
3 6 8
3 6 9
3 7 0
3 7 1
3 7 2
3 7 3
3 7 4
3 7 5
3 7 6
3 7 7
3 7 8
3 7 9
end;
i f z==5 %Rule 5 .
rule ( z ) = 5 ;
for i=2 : T-2
end;
end;
i f ddSig ( i )
signalArray ( i+tlag)
end;
i f z==6 %Rule 6 .
rule ( z ) = 6 ;
for i=2 : T-2
end;
i f wpuSig ( i )
signalArray ( i+tlag)
end;
end;
i f z==7 %Rule 7 .
rule ( z ) = 7 ;
for i=2 : T-2
1 ;
1 ;
i f bpuSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
end;
i f z==8 %Rule 8 .
rule ( z ) = 8 ;
for i=3 : T-3
end;
end;
if close ( i -2 ) ^ expma ( i- 2 ) & hammerSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==9 %Rule 9 .
rul e ( z ) = 9 ;
for i=3 : T-3
278
3 80
3 8 1
3 82
3 83
3 84
3 85
386
3 8 7
3 8 8
3 89
3 9 0
3 9 1
3 9 2
3 9 3
3 9 4
3 9 5
3 9 6
3 97
3 9 8
3 9 9
40 0
4 0 1
4 02
403
404
405
406
407
40 8
40 9
4 1 0
41 1
41 2
413
414
4 1 5
end;
end;
i f close ( i - 2 ) expma ( i - 2 ) & bullengSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==10 %Rule 1 0 .
rule ( z ) = 1 0 ;
for i=3 : T-3
end;
end;
i f close ( i -2 ) expma ( i - 2 ) & pielineSig ( i )
signalArray ( i+tlag) = 1 ;
end;
i f z==ll %Rule 1 1 .
rule ( z ) = 1 1 ;
for i=3 : T-3
end;
end;
i f close ( i - 2 ) expma ( i -2 ) & bullharSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==12 %Rule 1 2 .
rule ( z ) = 1 2 ;
for i=4 : T-4
end;
end;
i f close ( i - 3 ) expma ( i - 3 ) & thriupSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==13 %Rule 1 3 .
rule ( z ) = 1 3 ;
for i=4 : T-4
i f c lose ( i - 3 ) expma ( i - 3 ) & throupSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
279
416
417
418
419
42 0
42 1
422
423
424
42 5
426
42 7
42 8
42 9
4 3 0
4 3 1
43 2
433
434
435
436
43 7
43 8
4 3 9
440
441
442
443
444
445
446
447
448
449
4 5 0
4 5 1
end;
i f z==14 %Rule 14 .
rule ( z ) = 14 ;
for i=4 : T-4
if close ( i- 3 ) expma ( i- 3 ) & twbotSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
end;
i f z==15 %Rule 15 .
rule ( z ) = 1 5 ;
for i=2 : T-2
end;
end;
i f IbSig ( i )
signalArray ( i +tlag)
end;
if z==16 %Rule 1 6 .
rule ( z ) = 1 6 ;
for i=2 . T-2
end;
if bmSig ( i )
signalArray ( i +tlag)
end;
end;
if z==17 %Rule 17 .
rule ( z ) = 17 ;
for i=2 : T-2
end;
end;
i f cbmSig ( i )
signalArray ( i +tlag)
end;
i f z==18 %Rule 1 8 .
rule ( z ) = 1 8 ;
for i=2 : T-2
1 ;
1 ;
1 ;
280
452
453
454
455
45 6
457
4 5 8
4 5 9
4 6 0
46 1
462
46 3
464
46 5
466
467
468
469
470
471
472
473
474
47 5
476
477
47 8
47 9
480
481
482
483
484
485
486
487
i f obmSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
end;
i f z==19 %Rule 1 9 .
rule ( z ) = 1 9 ;
for i=2 : T-2
end;
end;
i f gdSig ( i )
signalArray ( i +tlag)
end;
i f z ==2 0 %Ru1e 2 0 .
rule ( z ) = 2 0 ;
for i=2 : T-2
end;
i f wssSig ( i )
signalArray ( i +tlag)
end;
end;
if z==21 %Rule 2 1 .
rule ( z ) = 2 1 ;
for i=2 : T-2
end;
i f bssSig ( i )
signalArray ( i +tlag)
end;
end;
if z==22 %Rule 2 2 .
rule ( z ) = 2 2 ;
for i=3 : T-3
1 ;
1 ;
1 ;
i f close ( i -2 ) - expma ( i - 2 ) o hanwnanSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
28 1
488
489
4 9 0
4 9 1
4 9 2
4 9 3
4 9 4
4 9 5
4 9 6
4 9 7
49 8
4 9 9
5 0 0
5 0 1
5 0 2
5 03
504
505
506
507
508
509
5 1 0
O 1 1
5 1 2
5 1 3
5 1 4
5 1 5
5 1 6
5 1 7
5 1 8
5 1 9
5 2 0
5 2 1
5 2 2
5 2 3
end;
i f z==23 %Rule 2 3 .
rule ( z ) = 2 3 ;
for i=3 : T-3
end;
end;
i f close ( i- 2 ) - expma ( i -2 ) & bearengSig ( i )
signalArray ( i +tlag) = 1 ;
end;
i f z==24 %Rule 2 4 .
rule ( z ) = 2 4 ;
for i=3 : T-3
end;
end;
i f close ( i- 2 ) - expma ( i- 2 ) & dccSig ( i )
signalArray ( i+tlag) = 1 ;
end;
i f z==25 %Rule 2 5 .
rule ( z ) = 2 5 ;
for i=3 : T-3
end;
i f close ( i - 2 ) - expma ( i- 2 ) & bearharSig ( i )
signalArray ( i+tlag) = 1 ;
end;
end;
i f z==26 %Rule 2 6 .
rule ( z ) = 2 6 ;
for i=4 : T-4
end;
end;
i f close ( i - 3 ) - expma ( i - 3 ) & thridnSig ( i )
signalArray ( i +tlag) = 1 ;
end;
if z==27 %Rule 2 7 .
rule ( z ) = 2 7 ;
for i=4 : T-4
282
5 2 4
5 2 5
5 2 6
5 2 7
5 2 8
5 2 9
5 3 0
5 3 1
5 3 2
5 3 3
5 3 4
5 3 5
5 3 6
5 3 7
5 3 8
5 3 9
5 4 0
5 4 1
542
543
544
545
546
547
548
549
550
5 5 1
5 5 2
5 5 3
5 5 4
5 5 5
5 5 6
5 5 7
5 5 8
5 5 9
end;
i f close ( i- 3 ) - expma ( i - 3 ) & throdnSig ( i )
signalArray ( i +tlag) = 1 ;
end;
end;
i f z==28 %Rule 2 8 .
rule ( z ) = 2 8 ;
for i=4 : T-4
end;
end;
i f close ( i- 3 ) - expma ( i - 3 ) & twtopSig ( i )
signalArray ( i +tlag) = 1 ;
end;
%Reprocess to remove double signals
for i =HP+l : T-HP+1
end;
i f signalArray ( i ) == 1 & max ( signalArray ( i-HP : i - 1 ) )
signalArray ( i ) = 0 ;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Profit calcs
%Iterate through buy/sell points calculating prof it .
buys 0 ;
buyCoun ter 0 ;
buyRetArray [ 1 ;
for i=l : T-HP-1
1
283
5 6 0
5 6 1
5 6 2
563
5 6 4
5 6 5
5 6 6
5 6 7
5 6 8
5 6 9
5 7 0
5 7 1
572
573
5 7 4
5 7 5
5 7 6
5 7 7
5 7 8
5 7 9
5 8 0
5 8 1
5 8 2
5 83
5 84
5 8 5
5 8 6
5 87
5 8 8
5 8 9
5 9 0
5 9 1
5 9 2
5 9 3
5 9 4
5 9 5
end;
%Calculate buy profit
i f signalArray ( i ) 1
end;
%Write all returns into array for s iga calc .
buyRetArray [ buyRetArray; new_open_returns ( i : i +HP-1 ) ] ; % *
buys = buys + 1 ;
%plot ( new_close)
%hold on
numBuys ( n) = buys ;
i f buys==O
end;
i f n==l
errorFlag ( l , z )
break;
end;
1 ;
convergence ( n, : , z , l ) [ I_buy/ ( n- 1 - counter) I_buySiga/ ( n- 1- counter) ] ;
counter = counter + 1 ;
continue ;
buySiga = std ( buyRetArray) ;
buyRet = mean ( buyRetArray) ;
i f n==l %First time through record profit as original Dow prof it .
origBuyRet = buyRet ;
origBuySiga = buySiga;
end;
284
5 9 6
5 9 7
5 9 8
5 9 9
600
6 0 1
6 0 2
6 0 3
604
605
606
607
6 0 8
6 0 9
6 1 0
6 1 1
612
613
614
6 1 5
616
617
6 1 8
6 1 9
620
6 2 1
622
6 2 3
624
6 2 5
626
627
6 2 8
6 2 9
6 3 0
%Compare returns t o original
if buyRet - origBuyRet & n-=l
I_buy I_buy + 1 ;
end;
i f buySigma - origBuySigma & n-=l
I_buYSigma = I_buySigma 1 ;
end;
%%
i f n-=l
convergence ( n , : , z , l ) = [ I_buy/ ( n-1-counter) I_buySigma/ ( n- 1- counter) ] ;
bootstrapMeans ( l * ( n- 1 ) , : , z ) = [ buyRet buySigma] ;
end;
%%
end;
if n-=l
i f errorFlag ( l , z ) 0
f irst time through gets Dow resul t .
probability_buy I_buy/ ( N- 1 - counter ) ; %N- 1 correction since
probabi li ty_buySigma I_buySigma/ ( N- 1 - counter) ;
end;
output ( 1 , : , z ) [ probabi l ity_buy probabili ty_buySigma N- 1-counter] ;
origMeans ( l , : , z ) = [ origBuyRet origBuySigma] ;
%%%%NEW AGGREGATE CODE%%%%
aggregate ( 1 , : , z ) [ I_buy I_buySigma] ;
%%%%%%%%%%%%%%%%%%%%%%%%%%
285
6 3 1
6 3 2
6 3 3 end;
634
635 end;
6 3 6
6 3 7 for z=l : numRules
6 3 8
6 3 9 i f rule ( z ) < 1 0
end;
640 fid = fopen ( strcat ( ' output\c_egarch_rule ' , char ( rule ( z ) +4 8 ) , ' . csv ' ) , ' w ' ) ; %Changed this l ine 10
Jan 04
641 else
642 fid
fopen ( strcat ( ' output\c_egarch_rule ' , char ( f loor ( rule ( z ) / 1 0 ) +48 ) , char ( mod ( rule ( z ) , 1 0 ) +4 8 ) , ' . csv ' ) , ' w ' ) ;
%Changed this l ine 1 0 Jan 04
643 end;
644
645
646 fprintf ( fid, ' %s\n\n ' , ' BOOTSTRAP RESULTS : ' ) ;
647 fprintf ( fid, ' %s\n ' , ' , buy, sigma buy, num bootstraps ' ) ;
6 48 for i=l : size ( output , l )
6 49 i f errorFlag ( i , z ) == 0
6 5 0 fprintf ( fid, ' %s , % f , % f , %f \n ' , tickers ( i , : ) , output ( i , : , z ) ) ;
6 5 1 else
6 5 2 fprintf ( fid, ' %s , %s\n ' , tickers ( i , : ) , ' Error : No signal on original series . ' ) ;
6 5 3 end;
6 5 4 end;
6 5 5
6 5 6 %%%NEW AGGREGATE CODE%%%%
6 5 7 fprintf ( fid, ' \n%s \n\n ' , ' AGGREGATE RESULTS : ' ) ;
6 5 8 fprintf ( fid, ' \n%s , % f , % f , %f \n\n ' , ' Aggregate ' , sum ( aggregate ( : , : , z ) ) / sum( output ( : , 3 , z ) ) ) ;
6 5 9 %%%%%%%%%%%%%%%%%%%%%%%%%
6 6 0
6 6 1 bsMean = bootstrapMeans ( : , : , z ) i %%
6 6 2 oMean = origMeans ( : , : , z ) ; %%
6 6 3 averages = [ sum( bsMean) / length ( bsMean ( bsMean-=O ) ) ; sum( oMean) / length ( oMean ( oMean-=O ) ) ] ; %%
286
664
6 6 5 %averages = [ mean ( bootstrapMeans ( : , : , z ) ) ; mean ( origMeans ( : , : , z ) ) ) ;
666
6 67 fprintf ( fid, ' \n%s\n\n ' , ' AVERAGES : ' ) ;
6 6 8 fprintf ( f id, ' %s\ n ' , ' , buy, siga buy ' ) ;
6 6 9 fprintf ( f id, ' %s , % f , % f \n ' , ' mean ' , averages ( 1 , 1 ) , averages ( l , 2 ) ) ;
670 fprintf ( f id, ' %s , % f , %f\ n ' , ' dow ' , averages ( 2 , l ) , averages ( 2 , 2 ) ) ;
671
672 %T-stat count
673
674 tCount = zeros ( l , 7 ) ;
6 7 5 for i =l : size ( tickers , l )
676 tCount = tCount ^ ( abs ( Tstats ( i , l : end- 1 ) ) - Tstats ( i , end) ) ;
6 7 7 end
6 7 8 Tstats ( end, l : end- l ) = tCount ;
6 7 9
6 8 0 fprintf ( fid, ' \n%s\n\n ' , ' PARAMETER SIGNIFICANCE COUNT : ' ) ;
6 81 fprintf ( fid, ' %s \n ' , ' , C , MA, AR , K , GARCH , ARCH , LEVERAGE , Tc ' ) ;
682 for i =l : size ( Tstats , l ) - l
683 fprint f ( fid, ' %s , %f , % f , %f , %f , %f , %f , %f , %f \n ' , tickers ( i , : ) , Tstats ( i , : ) ) ;
684 end;
685 fprintf ( f id, ' %s , % f , %f , %f , %f , % f , % f \n ' , ' COUNT ' , tCount ) ;
6 86
6 87 fc1ose ( f id) ;
688
689 end;
6 9 0
6 9 1 %%%%%% CONVERGENCE OUTPUT %%%%%%
6 92 fid = fopen ( ' output\ c_eg_convergence . csv ' , ' w ' ) ;
693 fprintf ( f id, ' Rule , , ) ;
6 9 4 for 1 = l : size ( tickers , l ) - l
6 9 5 fprintf ( fid, ' Ticker , P_b, P_sigab, , ' ) ;
6 9 6 end;
6 9 7 fprintf ( f id, ' Ticker , P_b, P_siga_b\n ' ) ;
6 9 8 for z = l : nurules
6 9 9 for n=l : N
287
7 0 0
7 0 1
7 02
fprintf ( fid, ' % f , ' , z ) ;
for 1 = 1 : size ( tickers , 1 ) -1
fprintf ( f id, ' %s , % f , % f ,
7 03 end;
tic. kers ( 1 , . ) , convergence ( n , 1 , z , 1 ) , convergence ( n, 2 , z , 1 ) ) ;
7 0 4 fprintf ( fid, ' %s , % f , %f \ n ' , tickers ( size ( tickers , 1 ) , : ) , convergence ( n, 1 , z , size ( tickers , 1 ) ) ,
convergence ( n, 2 , z , size ( tickers , 1 ) ) ) ;
7 0 5 end;
7 0 6 fprintf ( f id, ' \n ' ) ;
707 end;
7 0 8 fclose ( fid) ;
288