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

[amibroker] Re: Code (In Progress) for Bulkowski and the CPI


  • Date: Sun, 21 Feb 2010 13:51:57 -0000
  • From: "touini" <touini@xxxxxxxxx>
  • Subject: [amibroker] Re: Code (In Progress) for Bulkowski and the CPI

PureBytes Links

Trading Reference Links


I did give it a shot some while back, until I gave up since I couldn't match his results. I will post the code to get you started. As a warning, it is UNFINISHED WORK IN PROGRESS. 

You are welcome to check and make it work for you. If you do please let me know.
I am a begginer in amibroker so bear with me.... I actually tried a modified version of the following script to track recent Volume accumulation/Distribution but without  luck....

 Do not backtest this. The results are unrealistic (see bulkowski for explanation).

Two scripts: One to calculate the composite and one to plot the results.


First Script: Run as SCAN on watchlist of Companies (i.e. SP500)
////////////////////////////////////
_SECTION_BEGIN("CPI Calc");
range=H-L;
NR7=range<Ref(range,-1) AND range<Ref(range,-2) AND range<Ref(range,-3) AND 
range<Ref(range,-4) AND range<Ref(range,-5) AND range<Ref(range,-6);

lnr7=LLV(L,7);
lnr7bar=LLVBars( L, 7 );
Hnr7=HHV(H,7);
Hnr7bars=HHV(H,7);




bullbrkt=C>Ref(Hnr7,-1) AND BarsSince(nr7)<=7 ;
bullbrkt=ExRem(bullbrkt,nr7);


bearbrkt=C<Ref(lnr7,-1) AND BarsSince(nr7)<=7 ;
bearbrkt=ExRem(bearbrkt,nr7);

////////////////////
bullsignal=0;
bearsignal=0;
pendingbrkt=0;
for( i = 9; i < BarCount; i++ ) 
{
	if (bullbrkt[i]) ///if bull breakout
		{
			bullsignal[i]=1; ///set bullsignal to 1 for //this bar
			for( n = 0; n < 8; n++ ) //go back 7 bars and //find NR7 signal
				{
				if (nr7[i-n]==0) // go backwards and //keep setting bullsignal to 1 until NR7
					{
						bullsignal[i-n]=1; ///set bullsignal to all bars between Breakout bar and NR7 bar
						bullsignal[i-n-1]=1; //include NR7 bar
						pendingbrkt[i]=0;
					}
				else
					n=9;  //
				}
			}
	else if (bearbrkt[i])
		{
			bearsignal[i]=1; ///set bearsignal to 1 for //this bar
			for( n = 0; n < 8; n++ ) //go back 7 bars and //find NR7 signal
				{
				if (nr7[i-n]==0) //
					{
						bearsignal[i-n]=1; ///set bullsignal to all bars between Breakout bar and NR7 bar
						bearsignal[i-n-1]=1; //include NR7 bar
						pendingbrkt[i]=0;
					}
				else
					n=9;  //
				}
			}
	else
		{
			bullsignal[i]=0;
			bearsignal[i]=0;
			pendingbrkt[i]=nr7[i];
		}
}

pendingbrkt=Flip(pendingbrkt,bullsignal OR bearsignal);

////////////////////
AddToComposite(bullsignal,"~nr7bull","V");
AddToComposite(bearsignal,"~nr7bear","V");
AddToComposite(pendingbrkt,"~nr7PendingBrkts","V");
AddToComposite(1,"~nr7count","V");
Buy=0;




Plot(Hnr7,"",colorBlack);

PlotShapes(IIf(NR7,shapeStar,shapeNone),colorRed,0,H);
PlotShapes(IIf(bullbrkt,shapeUpArrow,shapeNone),colorGreen,0,L);
PlotShapes(IIf(bearbrkt,shapeDownArrow,shapeNone),colorRed,0,H);

Plot(bullsignal,"",colorGreen,styleOwnScale+styleHistogram);
Plot(bearsignal,"",colorRed,styleOwnScale+styleHistogram);


//"pending bkrt" + pendingbrkt;
_SECTION_END();

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); 
_SECTION_END();

/////////////////

Second Script: PLOT COMPOSITE & Stats:
/////////////////////////////////////////


_SECTION_BEGIN("CPI PLOT");
CPI= 100 * Foreign ("~nr7bull","V") / (Foreign ("~nr7bull","V")+ Foreign ("~nr7bEAR","V"));

Plot(CPI,"CPI",colorBlack);
Plot(65,"BULLISH",colorGreen);
Plot(35,"BEARISH",colorRed);
/////////////////////////////////////////////////


Buy=Cross(CPI,65);
Short=Cross(35,CPI);


Sell=Short;
Cover=Buy;


shape = Buy * shapeUpArrow + Sell * shapeDownArrow;

PlotShapes( shape, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, CPI, CPI) );
_SECTION_END();


Title =  "{{DATE}} - CPI= "
+"bullish Percent breakout="
+" "
+Cpi
+ "   Bullish Breakouts= "
+Foreign ("~nr7bull","V")
+""
+ "   Bearish Breakouts= "
+Foreign ("~nr7bear","V")
+""
+ "   Pending Breakouts= "
+Foreign ("~nr7PendingBrkts","V")
+""
+ "   % of companies Pending Signal= "
+100 * Foreign ("~nr7PendingBrkts","V") / Foreign ("~nr7count","V")
+"%";
/////////////////end of 2nd script///////////////////////////////

Good Luck,
Vangelis


--- In amibroker@xxxxxxxxxxxxxxx, "droskill" <droskill@xxx> wrote:
>
> Appreciate the feedback - I was interest if anyone had programmed the core of the CPI to check it on, say, the S&P500.
> 
> --- In amibroker@xxxxxxxxxxxxxxx, Jeff Henderson <jeffro861@> wrote:
> >
> > Bulkowski is a joke. CPI is a joke because hr doesn't update it till after the fact.  I've tried to duplicate his experiments with data only to realize after we communicated via email that he preselects his stock universe using subjective opinion!  This guy is every person in sales that I despise.  The majority of his results were obtained in a bull market. Your better off looking on ssrn.com for good research.
> >
>




------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    amibroker-digest@xxxxxxxxxxxxxxx 
    amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

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