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

[amibroker] Re: The Reverse Engine Bollinger Bands Problem, IV



PureBytes Links

Trading Reference Links

Hi,

I would characterize your definition of upper or lower breakout as a 
continuation signal not a breakout.  

In my opinion an upper breakout always starts from the lower Bband 
and a lower breakout always starts from the upper Bband.  The trick 
there is to find that particular value of the Z-Score (+/-2)that will 
detect the breakout or counter-trend pullback.  It is made much 
easier by calculating a range of Z-Scores with different moving 
averages (2-21) & performing a check on it using StochZ(50) & StochZ
(200).

The Bollinger Bands are Standard Deviation Bands.  It's superiority 
is in showing your investments volatility along with the likely 
support and resistance areas (Z=0).  The extremes of the band (+/-2)
are considered "unusual".  Every time you see an investment reach the 
extremes, it is said to be at the "Bollinger Band".  However, it is 
also a key turning point.  The price can be expected to be anywhere 
within the 95% confidence band at any time.  The moment the 
investment hits the extremes, it is now statistically significant and 
something has caused this new valuation and it is time to search for 
a signal using your favorite Entry/Exit Trading Signal Detection 
system.

But, sometimes a breakout becomes a counter-trend pullback & vice-
versa.  The trick there is to detect the volatility.  You may find 
that the volatility characteristics are quite different for these two 
types of market conditions.

Regards,

Pal
--- In amibroker@xxxxxxxxxxxxxxx, "Dimitris Tsokakis" <TSOKAKIS@xxxx> 
wrote:
> 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;
> Buy=Cross(C,bt);Buy=ExRemSpan(Buy,t);Sell=Ref(Buy,-t);
> SetTradeDelays( 1, 1, 1, 1 ) ;
> e2=Equity(1,3,1030101,1030924);
> 
> 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;
> Buy=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);
> 
> 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 method
> Buy=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 method
> Buy=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: Dimitris Tsokakis 
> To: 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
> // 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
> // Explore the database for the 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));
> AddColumn(y,"f="+WriteVal(f,1.1),1.0);
> }
> Filter=1;
>  
> 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: Dimitris Tsokakis 
> To: 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.  
> From the mathematical point of view, both crosses come from the 
same 2nd degree equation A2*X^2+A1*X+A0=0
> Dimitris Tsokakis
> [to be continued]
> 
> ----- Original Message ----- 
> From: Dimitris Tsokakis 
> To: amibroker@xxxxxxxxxxxxxxx 
> Sent: Monday, September 22, 2003 11:26 AM
> Subject: The Reverse Engine Bollinger Bands Problem
> 
> 
> What is the necessary next bar Close to see prices below the next 
bar BBandbot ?
> Steve Karnish is responsible for the question [and 
the ...headache], some time ago.
> The following code is dedicated to him.
> Paste in IB the
> 
> // Anticipating the next bar BBandbot cross, by D. Tsokakis, Sept 
2003
> 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);
> b=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;
> x2=(-A1+sqrt(A1^2-4*A2*A0))/(2*A2);
> Plot(X2,"",colorBlue,1);Plot(C,"C",1,8);Plot(b,"BBandBot",7,1);
> PlotShapes(shapeUpArrow*Cross(x2,Ref(C,1)),colorWhite);
> PlotShapes(shapeDownArrow*(Cross(b,C)),colorRed);
> Title="The next "+Name()+" Close should be <="+WriteVal(x2)+
> "\nActual Next Close = "+WriteIf(Cum(1)!=LastValue(Cum(1)),WriteVal
(Ref(C,1)),"?");
> 
> The solution is the X2 array.
> For visual verification, a white arrow is plotted when the X2 
crosses the next bar close and a red arrow points the actual cross.
> 
> Dimitris Tsokakis
> [to be continued]


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/