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

Re: [amibroker] [Fwd: Error:Andrew Pitchfork ??]


  • Date: Sat, 26 Dec 2009 18:26:15 +0530
  • From: "Prashanth" <prash454.ta@xxxxxxxxx>
  • Subject: Re: [amibroker] [Fwd: Error:Andrew Pitchfork ??]

PureBytes Links

Trading Reference Links



Ashish,
 
It has been recommended by several members that you are usign a Antique and Old Version. Either upgrade or be satifsfied with the AFL's that it can run.
 
The AFL does not have a Eror. If you are getting a error, this formula contains syntaxes that is not recognized in the version you use.
 
Cheers
 
Prashanth
----- Original Message -----
From: Asis Ghosh
Sent: Saturday, December 26, 2009 18:17 PM
Subject: [amibroker] [Fwd: Error:Andrew Pitchfork ??]



-------- Original Message --------
Subject: Error:Andrew Pitchfork ??
Date: Sat, 26 Dec 2009 18:12:50 +0530
From: Asis Ghosh <subhamedicalsjpg@xxxxxxxxx>
Reply-To: subhamedicalsjpg@xxxxxxxxx
Organization: Subha Medicals
To: amibroker@xxxxxxxxxxxxxxx


I have ERROR: Variable TOP being used without being initialized---for this AFL: AB-4.8--how to fix it ?

/ Andrews Pitchfork V3.3
//
// Use Peak() & Trough() to get peaks & troughs.
// This version deals with adjacent peaks and adjacent
// troughs, i.e. two peaks without an intervening trough or vice-versa.
// It goes backwards from the selected bar until it has a set of
// peak,trough,peak or trough,peak,trough points to use for calulating
// the pitchfork. When 2 or more peaks or 2 or more troughs are adjacent
// it only uses the last one, i.e. the rightmost one, of the series.
//
// This version only uses the zigzag peak troughs after they have been
// revealed by the subsequent price action. i.e. the price has to have
// moved off the high/low by the zigzag pct before the peak or trough will
// be used.
//
// This version plots the trendlines as exponential curves that plot as
// straight lines on an semilog chart.
//

SetBarsRequired( 999999,999999);

bi=
BarIndex();
sbi=
SelectedValue(bi);

// Pct threshhold for peak() & trough()

Zigpct=
Param("Zigpct",4.6,1.0,30.0,0.1,0);

// Since the Zig function only works on a single array, to get a true
// High/Low peak/trough have to approximate it by an EMA choosing the
// High/Low based on the direction the EMA is moving. Very occasionally
// it misses the correct High/Low. To just use value, for example the close,
// just change zpr=IIf(ROC(zema,1) > 0,H,L); to zpr=C;
zema=
EMA(C,14);
zpr=
IIf(ROC(zema,1) > 0,H,L);
zag=
Zig(zpr,zigpct);
tr=
Ref(zag,-1) > zag AND zag < Ref(zag,1);
pk=
Ref(zag,-1) < zag AND zag > Ref(zag,1);
pkprice=
ValueWhen(pk,zpr);
trprice=
ValueWhen(tr,zpr);

// This bit is still valid at the right edge. If price moves far enough in 1
Day to show
// a peak or trough on the last bar, the peak or trough won't go away later.
The pk_id
OR
// tr_id (below) will appear on the same bar. Normally peaks & troughs appear
in 'the past',
// e.g. the high 10 days ago wasn't a peak yesterday but today it is because
the price dropped
// enough to make it a peak.
pklast=
IIf(BarsSince(pk) < BarsSince(tr),1,0);
trlast=
IIf(BarsSince(tr) < BarsSince(pk),1,0);

// A peak or trough is defined as the price moving X pct down or up from a high
OR Low.
// The identification point is when the price has actually moved that far. The
Peak/Trough
// will appear 'in the past' on the same day as the pk_id or tr_id appears on
the rightmost
// bar.
// Use 'OR tr/OR pk' because when the bar that reveals the pk/tr is also a
pk/tr the pklast/
// trlast will have flipped.
// Can't use cross of H or L in the 2nd AND because the H or L may not get
above
OR below the
// trigger price when the pk/tr occurs.
// The NOT conditions eliminate same-day pk/tr pk_id/tr_id cases. i.e. when the
Day's price
// range was >= zpct on the pk/tr day.
pk_id=((pklast
OR tr) AND pkprice*(1-(zigpct*0.01)) > L ) AND NOT ( pk AND (H -
L)/L >= 0.01 * zigpct);
tr_id=((trlast
OR pk) AND H > trprice*(1+(zigpct*0.01)) ) AND NOT ( tr AND (H -
L)/L >= 0.01 * zigpct);

// The pk_id/tr_id conditions can recur before the next pk or tr
pk_id=
ExRem(pk_id,tr_id);
tr_id=
ExRem(tr_id,pk_id);

pk_idlast=
IIf(BarsSince(pk_id) < BarsSince(tr_id),1,0);
tr_idlast=
IIf(BarsSince(tr_id) < BarsSince(pk_id),1,0);

Lookbk=
IIf(pk_idlast,BarsSince(pk),BarsSince(tr));

// How many bars to extend the pitchfork past the selected bar.
xtsn=
Param("Extension",62,1,2500,1);

// Shift to move pitchfork up/down from original position one penny at time.
shift=
Param("Shift",0,-2000,2000,0.01);

// Filter out cases when the angle of the median lines is too extreme,
// The loop will continue until it finds a pitchfork whose slope falls
// between +- the Angle Limit. Setting the angle limit to 90 effectively
// turns it off.
alimit=
Param("Angle Limit",40,1,180,1);

// bkgrndcolor should match your background color. It's used to mask the
// parts of the pitchfork arrays outside the calculated pitchfork from view.
bkgrndcolor=
ParamColor("Background Color",colorLightGrey);
pitchforkcolor=
ParamColor("Pitchfork Color",colorWhite);

// The peak/trough lines will be used to determine the y coordinates
// of the pitchfork's 3 determining points.

//pline1=Peak(H,Zigpct,1);
//tline1=Trough(L,Zigpct,1);
pline1=pkprice;
tline1=trprice;
// Identify the pivots.

pzag1=pline1 !=
Ref(pline1,-1);
tzag1=tline1 !=
Ref(tline1,-1);

// Get the x,y coordinates of the pivots skipping adjacent
// peaks and troughs. Go backwards from the current bar minus the lookback.

// These will hold the x,y coordinates of the pivot points in arrays at the
// sbi index.

zagx1=
0;
zagx2=
0;
zagx3=
0;
zagy1=
0;
zagy2=
0;
zagy3=
0;

for ( i = sbi - Lookbk[sbi], zagfnd = 0, pzagfnd = 0, tzagfnd = 0 ; i >= 0 &&
zagfnd <
3; i-- ) {
if ( pzag1[i] || tzag1[i] ) {
if ( pzag1[i] && NOT pzagfnd ) {
zagfnd=zagfnd+
1;
pzagfnd=
1;
tzagfnd=
0;
if ( zagfnd == 1 ) {
zagx1[sbi]=i;
zagy1[sbi]=pline1[i];
}
else if (zagfnd == 2) {
zagx2[sbi]=i;
zagy2[sbi]=pline1[i];
}
else if (zagfnd == 3) {
zagx3[sbi]=i;
zagy3[sbi]=pline1[i];
}
}
else if ( tzag1[i] && NOT tzagfnd ) {
zagfnd=zagfnd+
1;
tzagfnd=
1;
pzagfnd=
0;
if ( zagfnd == 1 ) {
zagx1[sbi]=i;
zagy1[sbi]=tline1[i];
}
else if (zagfnd == 2) {
zagx2[sbi]=i;
zagy2[sbi]=tline1[i];
}
else if (zagfnd == 3) {
zagx3[sbi]=i;
zagy3[sbi]=tline1[i];
}
}
}

if ( zagfnd == 3 ) { // Got 3 candidate peak/trough points

echng=
0;
midx=
0;
midy=
0;
Handle=
0;
Top=
0;
Bot=
0;

// Determine Midpoint between the rightmost 2 pivots and the slope from
the
// leftmost pivot to the midpoint.

Midx[sbi]=zagx2[sbi] + (zagx1[sbi]-zagx2[sbi]) /
2;
Midy[sbi]=
exp( log(zagy1[sbi]) - ( log(zagy1[sbi])-log(zagy2[sbi]) ) /
2);
echng=(
log(midy[sbi])-log(zagy3[sbi]))/(midx[sbi]-zagx3[sbi]);

// Apply the Angle Limit filter

angle_rad =
atan(echng);//radians
angle_deg =
100 * angle_rad * 180/3.1416;//degrees

if ( angle_deg < -alimit || angle_deg > alimit ) { // Too steep, reset
the search
// to begin from the
2nd pivot found
if ( tzagfnd == 1 ) { // was tr,pk,tr so switch to pk,tr,pk
tzagfnd =
0;
pzagfnd =
1;
zagfnd =
1;
zagx1[sbi]=zagx2[sbi];
zagy1[sbi]=zagy2[sbi];
i = zagx1[sbi];
zagx2=
0;
zagx3=
0;
zagy2=
0;
zagy3=
0;
}
else { // was pk,tr,pk so switch to tr,pk,tr
tzagfnd =
1;
pzagfnd =
0;
zagfnd =
1;
zagx1[sbi]=zagx2[sbi];
zagy1[sbi]=zagy2[sbi];
i = zagx1[sbi];
zagx2=
0;
zagx3=
0;
zagy2=
0;
zagy3=
0;
}
}
}
}

// Calculate the Pitchfork itself

// Handle first

for ( j=zagx3[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
Handle[j]=
exp(log(zagy3[sbi]) + n*echng) + shift;
}

// High & low median lines.
if ( (exp(log(zagy2[sbi]) + (sbi-zagx2[sbi])*echng))
> (
exp(log(zagy1[sbi]) + (sbi-zagx1[sbi])*echng)) ) { // Which one is
top?
for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
top[j]=
exp(log(zagy2[sbi]) + n*echng) + shift;
}
for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
bot[j]=
exp(log(zagy1[sbi]) + n*echng) + shift;
}
}
else {
for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
bot[j]=
exp(log(zagy2[sbi]) + n*echng) + shift;
}
for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
top[j]=
exp(log(zagy1[sbi]) + n*echng) + shift;
}
}

Hcolor=
IIf(Handle==0,bkgrndcolor,IIf(Ref(handle,-1)== 0 AND handle != 0,
bkgrndcolor,pitchforkcolor));
Tcolor=
IIf(Top==0,bkgrndcolor,IIf(Ref(top,-1)== 0 AND top != 0,
bkgrndcolor,pitchforkcolor));
Bcolor=
IIf(Bot==0,bkgrndcolor,IIf(Ref(bot,-1)== 0 AND bot != 0,
bkgrndcolor,pitchforkcolor));
Htitle=
EncodeColor(pitchforkcolor)
+
StrFormat("nAndrews: pct=%g lkbk=%g shft=%g alimit=%g Angle=%3.2f
Handle=
",
Zigpct, Lookbk, shift, alimit, angle_deg);
Plot(Handle,Htitle,Hcolor,styleLine+styleDashed+styleNoRescale);
Plot(Bot,EncodeColor(pitchforkcolor)+"
Bot=
",Bcolor,styleLine+styleDashed+styleNoRescale);
Plot(Top,EncodeColor(pitchforkcolor)+"
Top=
",Tcolor,styleLine+styleDashed+styleNoRescale)



Asis



__._,_.___


**** 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/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___