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

RE: Andrews Pitchfork



PureBytes Links

Trading Reference Links

MT
Thanks to you and Greg Wood. By cursory look it appears this is more in-dept
and also more usefull than I would have written.

Best Regards
Jerry

> -----Original Message-----
> From: multitrak@xxxxxxxxxxxxxxxx [mailto:multitrak@xxxxxxxxxxxxxxxx]
> Sent: Saturday, December 08, 2001 1:42 PM
> To: omega-List@xxxxxxxxxx
> Subject: Re: Andrews Pitchfork
>
>
> See below....this was written and posted to the Omega List by
> Greg Wood for
> TS4.
>
> MT
>
> Jerry wrote:
> >Before I set out to write this code myself, does anyone have
> a "MANUAL"
> >Andrews pitchfork indicator. Where the three points of price
> and time can
> >manually be entered to plot the the pitchfork. I need to do
> this to move
> >longer term pitchforks drawn with a different charting
> package to my entry
> >and exit shorter term charts on TS.
>
>
> Greg Woods Andrews Pitchforks
>
> Origin: omega-list
> Written by: Greg Wood
> Date found: 24 oct 97
> --------------------------------------------------------------
> ----------
> { ======================================
> This is my implementation of some aspects of Andrews
> Pitchforks. You are
> welcome to use this code freely.  You may redistribute it provided you
> include this comment block, plus a description of any changes
> you make.
>
> If you extend it, or adapt it to other uses, I'd appreciate a
> look at what
> you've done.  Thanks.
>
>       Gregory Wood
>       SwissFranc@xxxxxxxxxxxxxxxx
>
> 12/18/96 v1.0 - Initial distribution
> 01/08/96 v1.1 - Added median lines
> 01/15/96 v1.2 - Added TL_Thick, user-customizable colors (see
> "SET COLORS
> HERE")
> 01/16/96 v1.3 - Removed projections to make room for up to 7
> pitchforks
> ========================================}
>
> {
> SETUP
>
> Set Plot1 and Plot2 to be large points.
> Note that the trendlines use the default trendline settings
>
> USAGE
>
> Use the text tool to label swing high/lows with "A", "B" and "C", then
> refresh the indicator (clicking "Status" twice causes the indicator to
> recalculate).  Be sure to put the label above the bar's high
> for a swing
> high, and below the low for a swing low.
>
> You can display other groups of points by using labels "Ax",
> "Bx" and "Cx",
> where 'x' is 1, 2, or 3, e.g. "A3", "B3", "C3".
>
> Note that you can use the pointer tool to move the points
> anytime. Then to
> view the new Pitchfork, refresh the indicator.
>
> Use the Proj values to place a dot at a time expansion.  Try
> values like
> .618, 1.0, 1.618 etc.  Then use Diff to control how near the
> dot needs to
> be to the close for it to be seen. (This keeps the chart from
> shrinking.)
>
> Use Median to add median lines.
>
> Set MyColor (below) to be the colors for each Pitchfork
> }
>
> input: {proj1(0), proj2(0), proj3(0), proj4(0), diff(10), }
> Median(false),
> TL_Thick(1);
>
> if currentbar = 1 then begin { initialize control arrays }
>     array:abc[3]("");  { The basic point labels }
>        abc[0] = "A";
>        abc[1] = "B";
>        abc[2] = "C";
>     array:nums[7]("");  { The way to distinguish one series
> of points from
> another, A-B-C, A1-B1-C1, etc }
>        nums[0] = "";
>        nums[1] = "1";
>        nums[2] = "2";
>        nums[3] = "3";
>        nums[4] = "4";
>        nums[5] = "5";
>        nums[6] = "6";
>        var: inums(7);
> {   array: proj[5](0);  /* fibonacci extensions along a level
> line - "0"
> means "unused" */
>        proj[0] = proj1;
>        proj[1] = proj2;
>        proj[2] = proj3;
>        proj[3] = proj4;
>        var: iproj(4);
> }
>     array: MyColor[7](0);
>        MyColor[0] = tool_red;        { <=========== SET COLORS HERE }
>         MyColor[1] = tool_blue;
>         MyColor[2] = tool_yellow;
>         MyColor[3] = tool_cyan;
>         MyColor[4] = tool_green;
>         MyColor[5] = tool_white;
>         MyColor[6] = tool_darkyellow;
> end;
>
> array:dd[3,7](0),tt[3,7](0),vv[3,7](0),bb[3,7](0),hh[3,7](0);
> array:fb[7,4](0),fv[7,4](0); {fb[nums,proj], fv[nums,proj]}
> var: tft(0), fdd(0), fvv(0), ptt(0), pdd(0), pvv(0), fbb(0),
> pbb(0), pvv2(0);
> var: ii(0), jj(0), mm(0);
> var: handl(0), handlA(0), handlB(0), handlC(0), handlB1(0),
> handlC1(0),
> handlB2(0), handlC2(0);
> var: ss("");
> var: y1(0), y2(0);
>
> if currentbar = 1 then begin { examine all the text strings
> and save some
> info about the ones we recognize }
>     handl = text_getfirst(2);
>     while handl > 0 begin
>        ss = text_getstring(handl);
>        for ii = 0 to inums - 1 begin
>           for jj = 0 to 2 begin { look for well-formed strings }
>              if ss = abc[jj] + nums[ii] then begin { save the
> item's date,
> time, value and handle }
>                 tt[jj,ii] = text_gettime(handl);
>                 dd[jj,ii] = text_getdate(handl);
>                 vv[jj,ii] = text_getvalue(handl);
>                 hh[jj,ii] = handl;
>              end;
>           end;
>        end;
>        handl = text_getnext(handl,2); { IMPORTANT -- infinite
> loop if this
> is missing!  }
>     end;
> end;
>
> for ii = 0 to inums - 1 begin { check each series... }
>     for jj = 0 to 2 begin { check each point }
>        if time = tt[jj,ii] and date = dd[jj,ii] then begin

> we've found a
> selected point }
>           bb[jj,ii] = currentbar; { remember where we found it }
>           if vv[jj,ii] > c then begin { move the label above
> the bar and
> center it }
>              vv[jj,ii] = h;
>
> Text_SetLocation(hh[jj,ii],text_GetDate(hh[jj,ii]),text_GetTim
> e(hh[jj,ii]),h);
>              Text_SetStyle(hh[jj,ii],2,1);
>           end else begin { move the label below the bar and
> center it }
>              vv[jj,ii] = l;
>
> Text_SetLocation(hh[jj,ii],text_GetDate(hh[jj,ii]),text_GetTim
> e(hh[jj,ii]),l);
>              Text_SetStyle(hh[jj,ii],2,0);
>           end;
>           plot1(vv[jj,ii],"Selection"); { show the user which
> point we used
> for the calculations }
>           if jj = 2 then begin { we're at the third point,
> generally the Cx }
>               handl =
> TL_New(dd[0,ii],tt[0,ii],vv[0,ii],dd[1,ii],tt[1,ii],vv[1,ii]);
>              TL_SetExtLeft(handl,false);
>              TL_SetExtRight(handl,false);
>               TL_SetColor(handl,MyColor[ii]);
>               handl =
> TL_New(dd[0,ii],tt[0,ii],vv[0,ii],dd[2,ii],tt[2,ii],vv[2,ii]);
>              TL_SetExtLeft(handl,false);
>              TL_SetExtRight(handl,false);
>               TL_SetColor(handl,MyColor[ii]);
>
>              fbb = bb[1,ii] / 2 + bb[2,ii] / 2;
>              fvv = vv[1,ii] / 2 + vv[2,ii] / 2;
>              pvv = TLValue(vv[0,ii],bb[0,ii],fvv,fbb,currentbar);
>              handlA =
> TL_New(dd[0,ii],tt[0,ii],vv[0,ii],date,time,pvv);
>              TL_SetExtRight(handlA,true);
>               TL_SetColor(handlA,MyColor[ii]);
>               TL_SetSize(handlA, TL_Thick);
>
>              { show the related trident channel }
>              pvv =
> TLValue(vv[1,ii],bb[1,ii],fvv+vv[1,ii]-vv[0,ii],fbb+bb[1,ii]-b
> b[0,ii],curren
> tbar);
>              handlB =
> TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
>              TL_SetExtRight(handlB,true);
>               TL_SetColor(handlB, MyColor[ii]);
>               TL_SetSize(handlB, TL_Thick);
>               if Median then begin { save for later }
>                       handlB1 =
> TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
>                     TL_SetExtRight(handlB1,true);
>                       TL_SetColor(handlB1, MyColor[ii]);
>                       TL_SetSize(handlB1, TL_Thick);
>                       handlB2 =
> TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
>                     TL_SetExtRight(handlB2,true);
>                       TL_SetColor(handlB2, MyColor[ii]);
>                       TL_SetSize(handlB2, TL_Thick);
>               end;
>              pvv =
> TLValue(vv[0,ii]-(fvv-vv[2,ii]),bb[0,ii]+(bb[2,ii]-fbb),vv[2,i
> i],bb[2,ii],bb
> [1,ii]);
>              handlC =
> TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
>              TL_SetExtRight(handlC,true);
>               TL_SetColor(handlC, MyColor[ii]);
>               TL_SetSize(handlC, TL_Thick);
>               if Median then begin { save for later }
>                       handlC1 =
> TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
>                     TL_SetExtRight(handlC1,true);
>                       TL_SetColor(handlC1, MyColor[ii]);
>                       TL_SetSize(handlC1, TL_Thick);
>                       handlC2 =
> TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
>                     TL_SetExtRight(handlC2,true);
>                       TL_SetColor(handlC2, MyColor[ii]);
>                       TL_SetSize(handlC2, TL_Thick);
>               end;
>
>               if Median then begin { sorry these are
> hard-coded... you know
> what they
> say about quick + dirty! }
>                       { show the median lines }
>                       y1 = TL_GetValue(handlB, dd[1,ii], tt[1,ii]);
>                       y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
>                       TL_SetBegin(handlB1, dd[1,ii],
> tt[1,ii], (y1 + y2) / 2);
>                       y1 = TL_GetValue(handlB, dd[2,ii], tt[2,ii]);
>                       y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
>                       TL_SetEnd(handlB1, dd[2,ii], tt[2,ii],
> (y1 + y2) / 2);
>
>                       y1 = TL_GetValue(handlB, dd[1,ii], tt[1,ii]);
>                       y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
>                       TL_SetBegin(handlB2, dd[1,ii],
> tt[1,ii], y1 + y1- (y1
> + y2) / 2);
>                       y1 = TL_GetValue(handlB, dd[2,ii], tt[2,ii]);
>                       y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
>                       TL_SetEnd(handlB2, dd[2,ii], tt[2,ii],
> y1 + y1 - (y1
> + y2) / 2);
>
>                       y1 = TL_GetValue(handlC, dd[1,ii], tt[1,ii]);
>                       y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
>                       TL_SetBegin(handlC1, dd[1,ii],
> tt[1,ii], (y1 + y2) / 2);
>                       y1 = TL_GetValue(handlC, dd[2,ii], tt[2,ii]);
>                       y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
>                       TL_SetEnd(handlC1, dd[2,ii], tt[2,ii],
> (y1 + y2) / 2);
>
>                       y1 = TL_GetValue(handlC, dd[1,ii], tt[1,ii]);
>                       y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
>                       TL_SetBegin(handlC2, dd[1,ii],
> tt[1,ii], y1 + y1 -
> (y1 + y2) / 2);
>                       y1 = TL_GetValue(handlC, dd[2,ii], tt[2,ii]);
>                       y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
>                       TL_SetEnd(handlC2, dd[2,ii], tt[2,ii],
> y1 + y1 - (y1
> + y2) / 2);
>               end;
>
> {            for mm = 0 to iproj-1 begin { for each projection }
>                 if proj[mm] > 0 then begin { calculate the fibonacci
> price/time points }
>                    fb[ii,mm] = IntPortion(fbb + (fbb -
> bb[0,ii]) * proj[mm]);
>                    fv[ii,mm] =
> TLValue(vv[0,ii],bb[0,ii],fvv,fbb,fb[ii,mm]);
>                 end;
>              end;
> }
>           end;
>        end;
>     end;
> end;
>
> { find out if this bar needs to show a time/price point }
> {
> for ii = 0 to inums - 1 begin
>     for mm = 0 to iproj - 1 begin
>        if fb[ii,mm] = currentbar then begin
>           if c + diff > fv[ii,mm] and c - diff < fv[ii,mm] then
>              plot2(fv[ii,mm],"Projection");
>        end;
>     end;
> end;
> }
> --------------------------------------------------------------
> ----------
>