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.
|