| 
 PureBytes Links 
Trading Reference Links 
 | 
  
 
 
-------- Original Message --------
 
 
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/ 
 
  
     
    
 
      
   
__,_._,___
 |   
 |