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

Re: [amibroker] Andrews Pitchfork



PureBytes Links

Trading Reference Links

yes, this example plots straight line on log chart


fLine12 = exp( LineArray( fx2, ln(fP2), fx1, ln(fP1), 1, 1 ) );
Plot( fLine12, "Sup Trend", colorViolet, styleLine|styleThick|styleNoRescale );

the variables are defined elsewhere in my overall code, but this
example shows where/how to use the LN and EXP functions

On 7/21/05, Bob Johnson <bjohnson314@xxxxxxxxx> wrote:
> I wrote this over the last couple of weeks and wanted to share it and ask
> for some help.
> 
> It uses peak and trough with variable lookback and variable pk/trough pct to
> plot Andrews Pitchfork
> relative to the selected bar.  It seems to do a good job of plotting the
> pitchfork on a linear chart using
> the linear equation for a line.
> 
> My question is:
> 
>  Is there an exponential equation that would allow plotting the pitchfork
> as a curve that appears
>  as straight line on a semilog chart?
> 
>  My algebra, trig & calc courses are too far in the past to figure that out
> without a few weeks of reading
>  old textbooks.
> 
> A couple of usage notes:
> 
>   The shift parameter works fine to offset the pitchfork, but it's a lot
> faster to use if you 'eyeball' the shift
>   you want and type it in.  Then fine tune with the slider.  Just
> activating the slider sometimes shifts it
>   clear out of sight since the hi/lo of the shift param is very wide.
> 
>   You can't put more than one on a chart.  The variables used in
> calculating the pitchforks would be overwrite
>   each other.
> 
>   That actually raises a second question that I think I've seen answered in
> this forum before.  Is there an
>   accessable variable Amibroker uses to add '1', '2'  etc. to the standard
> indicators?
>   The pitchfork afl could be modified to use varget() & varset() with that
> to allow reuse in a chart.
> 
> Regards,
> 
> Bob.
> 
> The indicator:
> 
> // Andrews Pitchfork V.2
> // 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.
> 
> SetBarsRequired( 999999,999999);
> bi=BarIndex();
> sbi=SelectedValue(bi);
> 
> // How many bars to wait before believing the pivot.
> Lookbk=Param("LookBack",5,1,200,1);
> 
> // Pct threshhold for peak() & trough()
> Zigpct1=Param("Zigpct1",3.0,1.0,30.0,0.1,0);
> 
> // How many bars to extend the pitchfork past the selected bar.
> xtsn=Param("Extension",62,1,200,1);
> 
> // Shift to move pitchfork up/down from original position one penny at time.
> shift=Param("Shift",0,-2000,2000,0.01);
> 
> // The peak/trough lines will be used to determine the y coordinates
> // of the pitchfork's 3 determining points.
> pline1=Peak(H,Zigpct1,1);
> tline1=Trough(L,Zigpct1,1);
> 
> // 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, 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];
>           }
>       }
>   }
> }
> 
> // Calculate the Pitchfork itself
> tslope=0;
> tline=0;
> midx=0;
> midy=0;
> Handle=0;
> Top=0;
> Bot=0;
> 
> // 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]=zagy1[sbi] + (zagy2[sbi]-zagy1[sbi]) / 2;
> tslope[sbi]=(midy[sbi]-zagy3[sbi]) / (midx[sbi]-zagx3[sbi]);
> 
> // Handle first
> for ( j=zagx3[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
>   Handle[j]=zagy3[sbi] + n*tslope[sbi] + shift;
> }
> 
> // High & low median lines.
> if ( zagy2[sbi] > zagy1[sbi] ) { // Which one is top?
>   for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
>      top[j]=zagy2[sbi] + n*tslope[sbi] + shift;
>   }
>   for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
>      bot[j]=zagy1[sbi] + n*tslope[sbi] + shift;
>   }
> } else {
>   for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
>      bot[j]=zagy2[sbi] + n*tslope[sbi] + shift;
>   }
>   for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {
>      top[j]=zagy1[sbi] + n*tslope[sbi] + shift;
>   }
> }
> 
> // I'm using a white background, adjust to your own preferred background
> color
> Hcolor=IIf(Handle==0,colorWhite,IIf(Ref(handle,-1)== 0 AND handle != 0,
> colorWhite,colorRed));
> Tcolor=IIf(Top==0,colorWhite,IIf(Ref(top,-1)== 0 AND top != 0,
> colorWhite,colorRed));
> Bcolor=IIf(Bot==0,colorWhite,IIf(Ref(bot,-1)== 0 AND bot != 0,
> colorWhite,colorRed));
> Plot(Handle,"\nAndrews: pct="+Zigpct1+" lookback="+lookbk+" shift="+shift+"
> Handle",Hcolor,styleLine+styleDashed+styleNoRescale);
> Plot(Top,"MLH",Tcolor,styleLine+styleDashed+styleNoRescale);
> Plot(Bot,"MLL",Bcolor,styleLine+styleDashed+styleNoRescale);
> 
> 
> 
> 
> 
> Please note that this group is for discussion between users only.
> 
> To get support from AmiBroker please send an e-mail directly to
> SUPPORT {at} amibroker.com
> 
> For other support material please check also:
> http://www.amibroker.com/support.html
> 
> 
> Yahoo! Groups Links
> 
> 
> 
> 
> 
> 
> 
> 


-- 
Cheers
Graham
http://e-wire.net.au/~eb_kavan/


------------------------ Yahoo! Groups Sponsor --------------------~--> 
Try Online Currency Trading with GFT. Free 50K Demo. Trade 
24 Hours. Commission-Free. 
http://us.click.yahoo.com/DldnlA/9M2KAA/U1CZAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.html

 
Yahoo! Groups Links

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

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