[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] The Reverse Engine Bollinger Bands Problem, IV



PureBytes Links

Trading Reference Links




Here is an application of the method.
Suppose we trade BBands and suppose we buy at the upper 
breakout and sell some, say 8, days later.
The usual code would be, from 1/1/2003 till now
 
// Without the 
method
t=8;<FONT 
face="Times New Roman">
Buy=Cross(C,bt);Buy=ExRemSpan(Buy,t);Sell=Ref<FONT 
face=Verdana>(Buy,-t);<FONT 
face=Verdana>
SetTradeDelays( 1, 1, 1, 1<FONT 
face="Times New Roman" size=2> ) ;<FONT 
face="Times New Roman">
e2=Equity(1,3,1030101,1030924<FONT 
face="Times New Roman">);
 
where bt is the 
BBandTop(C,n,f) upper Bollinger Band
Buy/Sell at Open 
with delay +1.
 
Now we know in 
advance the critical level X1 to have a BB breakout tomorrow. 

We may use it as a 
BuyPrice and set Buy delay to 0.
The new system would 
be
 
// With the method
t=8;<FONT 
face="Times New Roman">
Buy=Cross(C,bt);Buy=<FONT 
size=2>ExRemSpan(Buy,t);Sell=<FONT 
size=2>Ref(Buy,-t);BuyPrice=<FONT 
size=2>Ref(x1,-1<FONT 
face=Verdana size=2>);<FONT 
face=Verdana size=2>
SetTradeDelays( 0<FONT 
size=2>, 1, <FONT 
size=2>1, 1 ) 
;e1=Equity(<FONT 
size=2>1,3<FONT 
size=2>,1030101,<FONT 
size=2>1030924<FONT 
face="Times New Roman">);
 
The att. gif gives an outline of the 
improvement.
Of course, nothing is free in this world, we 
have to decide, when the price reach the critical level X1, that it will close 
higher !!
Explore the database for the n=1 last 
quotations with
 
 n=10; 
f=2;Qn=Sum(C^2,n);Qn_1=Sum(C^2,n-1);Sn=Sum(C,n);Sn_1=Sum(C,n-1);Mn=Sn/n;Mn_1=Sn_1/(n-1);Kn=(1/n)*sqrt(n*Qn-Sn^2);Kn_1=(1/(n-1))*sqrt((n-1)*Qn_1-Sn_1^2);bb=Mn-f*Kn;bt=Mn+f*Kn;S=Sn_1;Q=Qn_1;A2=(n-1)*(f^2-n+1);A1=-2*(f^2+1-n)*S;A0=f^2*n*Q-f^2*S^2-S^2;x1=(-A1-sqrt(A1^2-4*A2*A0))/(2*A2);x2=(-A1+sqrt(A1^2-4*A2*A0))/(2*A2);Plot(C,"C",1,8);Plot(X1,"",colorBlue,1);Plot(X2,"",colorBlue,1);Plot(bb,"BBandBot",7,1);Plot(bt,"BBandTop",7,1);PlotShapes(shapeDownTriangle*Cross(x2,Ref(C,1)),colorPink);PlotShapes(shapeDownArrow*(Cross(bb,C)),colorRed);PlotShapes(shapeUpTriangle*Cross(Ref(C,1),x1),colorAqua);PlotShapes(shapeUpArrow*(Cross(C,bt)),colorBrightGreen);Title="The 
next "+Name()+" Close should be "+"\n *below"+WriteVal(x2)+" [ 
"+WriteVal(100*(-1+x2/C))+"% ] for a BBandBot Cross"+"\n 
*above"+WriteVal(x1)+" ["+WriteVal(100*(-1+x1/C))+"% ] for a BBandTop 
Cross"+"\n  Actual Next Close = 
"+WriteIf(Cum(1)!=LastValue(Cum(1)),WriteVal(Ref(C,1)),"?");t=8;// With 
the 
methodBuy=Cross(C,bt);Buy=ExRemSpan(Buy,t);Sell=Ref(Buy,-t);BuyPrice=Ref(x1,-1);SetTradeDelays( 
0, 1, 1, 1 ) ;e1=Equity(1,3,1030101,1030924);// Without the 
methodBuy=Cross(C,bt);Buy=ExRemSpan(Buy,t);Sell=Ref(Buy,-t);SetTradeDelays( 
1, 1, 1, 1 ) 
;e2=Equity(1,3,1030101,1030924);Filter=e1>e2;AddColumn(e2,"e 
Without");AddColumn(e1,"e With");AddColumn(100*(-1+e1/e2),"Profits % 
Increment");
 
to get an idea of probable 
applications.
Dimitris Tsokakis
 
 
 
 
 
----- Original Message ----- 
From: <A 
href="" title=tsokakis@xxxxxxxxx>Dimitris Tsokakis 

To: <A href="" 
title=amibroker@xxxxxxxxxxxxxxx>amibroker@xxxxxxxxxxxxxxx 
Sent: Tuesday, September 23, 2003 1:15 PM
Subject: Fw: The Reverse Engine Bollinger Bands Problem, 
III


If you expect a BBandBot(C,10,3) to cross CSCO Close, perhaps 
you should wait for long. 
This type of cross never occurred the last 
45 months !!
There are some resctrictions in BBandbot(C,n,f) parameters. 

A. f upper limit
For a given n, the values of f are limited.
This limit is not universal, it varies from stock to 
stock.
In AA window, explore the current stock for the last n=1 bars 
with
 
// f upper limit for a given n<FONT 
face=Verdana size=2>
// Explore ONLY current stock, n=1 last 
quotations
SetOption ("NoDefaultColumns" 
,True);AddTextColumn(Name(),"Name");n=10;for(f=1.5;f<=3;f=f+0.1){b=BBandBot(C,n,f);x=Cross(b,C);y=LastValue(Cum(x));if(y>0){AddColumn(y,"f="+WriteVal(f,1.1),1.0);}}Filter=1;
 
You may see the # of Cross(b,C) per f value. the last column 
gives the upper limit of f for a given n.
For the database it is better to use the code
 
// f upper limit for a given n<FONT 
face=Verdana size=2>
// Explore the database for the n=1 last 
quotations
SetOption<FONT 
size=2> ("NoDefaultColumns"<FONT face=Verdana 
size=2> ,True);<FONT 
face=Verdana size=2>
AddTextColumn(Name<FONT 
size=2>(),"Name"<FONT face=Verdana 
size=2>);
n=10<FONT 
face="Times New Roman">;<FONT 
face="Times New Roman">
for(f=1.5<FONT 
size=2>;f<=3;f=f+<FONT 
size=2>0.1<FONT 
face="Times New Roman">)
{
b=BBandBot<FONT 
face="Times New Roman">(C,n,f);
x=Cross(b,C);y=<FONT 
size=2>LastValue(Cum<FONT 
face=Verdana size=2>(x));<FONT 
face=Verdana size=2>
AddColumn(y,"f="<FONT 
size=2>+WriteVal(f,<FONT 
size=2>1.1),1.0<FONT 
face=Verdana size=2>);
}
Filter=1<FONT 
face="Times New Roman">;
 
For the N100 
database no stock exceeded f=3 since Jan2000.
 
B. n lower limit
For a given f there 
is a lower limit for n, also variable from stock to stock.
 
// n lower limit for a given f
// Explore the database for the n=1 last quotations
 SetOption ("NoDefaultColumns" 
,True);AddTextColumn(Name(),"Name");f=2.5;for(n=3;n<20;n=n+1){b=BBandBot(C,n,f);x=Cross(b,C);y=LastValue(Cum(x));AddColumn(y,"n="+WriteVal(n,1.0),1.0);}Filter=1;
 
You will see that n should be greater than n=8 for a probable 
Cross(b,C)
 
C. fmax for various n
For your BBandBot parameters selection you should know the fmax for various 
n.
// fmax for various n
SetOption ("NoDefaultColumns" 
,True);AddTextColumn(Name(),"Name");for(n=10;n<210;n=n+10){for(f=1.5;f<=5;f=f+0.1){b=BBandBot(C,n,f);x=Cross(b,C);y=LastValue(Cum(x));if(y>0){fmax=f;}}Filter=1;// 
explore for the n=1 last 
quotations.AddColumn(fmax,"n="+WriteVal(n,1.0),1.1);}
 
In the attached gif you may see the fmax distribution for a group of stocks 
[test period Jan2000 till now]
It is better to know the mutual f,n limitations before using the Reverse 
Engine BBands mechanism.
Dimitris 
Tsokakis
 
----- Original Message ----- 
From: <A 
href="" title=tsokakis@xxxxxxxxx>Dimitris Tsokakis 

To: <A href="" 
title=amibroker@xxxxxxxxxxxxxxx>amibroker@xxxxxxxxxxxxxxx 
Sent: Monday, September 22, 2003 1:53 PM
Subject: The Reverse Engine Bollinger Bands Problem, II

Here is the complete IB formula for BBandTop, 
BBandbot.
 

// Anticipating the next bar BBandBot or BBandTop cross, by D. 
Tsokakis, Sept 2003
n=20; 
f=2;Qn=Sum(C^2,n);Qn_1=Sum(C^2,n-1);Sn=Sum(C,n);Sn_1=Sum(C,n-1);Mn=Sn/n;Mn_1=Sn_1/(n-1);Kn=(1/n)*sqrt(n*Qn-Sn^2);Kn_1=(1/(n-1))*sqrt((n-1)*Qn_1-Sn_1^2);bb=Mn-f*Kn;bt=Mn+f*Kn;S=Sn_1;Q=Qn_1;A2=(n-1)*(f^2-n+1);A1=-2*(f^2+1-n)*S;A0=f^2*n*Q-f^2*S^2-S^2;x1=(-A1-sqrt(A1^2-4*A2*A0))/(2*A2);x2=(-A1+sqrt(A1^2-4*A2*A0))/(2*A2);Plot(C,"C",1,8);Plot(X1,"",colorBlue,1);Plot(X2,"",colorBlue,1);Plot(bb,"BBandBot",7,1);Plot(bt,"BBandTop",7,1);PlotShapes(shapeDownTriangle*Cross(x2,Ref(C,1)),colorPink);PlotShapes(shapeDownArrow*(Cross(bb,C)),colorRed);PlotShapes(shapeUpTriangle*Cross(Ref(C,1),x1),colorAqua);PlotShapes(shapeUpArrow*(Cross(C,bt)),colorBrightGreen);Title="The 
next "+Name()+" Close should be "+"\n *below"+WriteVal(x2)+" for a BBandBot 
Cross"+"\n *above"+WriteVal(x1)+" for a BBandTop Cross"+"\n  Actual 
Next Close = "+WriteIf(Cum(1)!=LastValue(Cum(1)),WriteVal(Ref(C,1)),"?");
 
The formula gives quite accurate results. Sometimes it is 
useful.
At point Z1, the price should be below 13.845 and the next bar close was 
13.840.
At point Z2, the price should be above 20.840 and the next bar close was 
20.850.