home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / t / tas412.zip / H&S.TAS < prev    next >
Text File  |  1991-11-14  |  3KB  |  90 lines

  1. { H&S.TAS 
  2.        Head and Shoulders recognition script. 
  3.  
  4.        Note : This script requires TAS 4.08 or later to run
  5.  
  6.        This script will locate a "head and shoulders" pattern 
  7.        in the closing prices. It will also draw a graph of the
  8.        closing price array along with a line drawn across the 
  9.        neckline of the h&s formation.
  10.  
  11.        The script presently does not locate the h&s with a volume
  12.        filter. That will be added at some point.
  13.  
  14.        Author : Martin Moore
  15.        Date   : Oct 1991
  16.        Revision 1.0 - Original script
  17.        Revision 1.1 - Modified to take account of the angle of the
  18.                       neckline. Command line parameter @NeckAngle=n
  19.                       will set the angle under which the H&S is 
  20.                       considered selected.
  21.                       Modified to eliminate those cases where the
  22.                       left shoulder is beyond the first day of data.
  23.                       Modified to find first trough between right
  24.                       shoulder and head.
  25.        
  26.        Invocation:
  27.               TAS H&S tickername @NG=g; NeckAngle=n, CutOff=f
  28.               where  'g' is 1 if no graphs are to be produced
  29.                      'n' is the angle under which the neckline must
  30.                          be drawn
  31.                      'f' is the ZigZag percentage movement to draw on
  32.                          the closing prices
  33. }
  34. #max_quotes 200
  35. #output_file h&s.lst
  36.  
  37. ziga is an array;
  38. neckline is an array;
  39.  
  40. if cutoff = 0 then
  41.        cutoff = 5;
  42. if NeckAngle = 0 then
  43.        NeckAngle = 3;
  44. ziga = zig(c,cutoff,'%');
  45. pkr = peak(ziga,1);
  46. pkh = peak(ziga,2);
  47. pkl = peak(ziga,3);
  48. nopeak = -(quote_count)+1;
  49. { Make sure that all peaks are found..if no peak found, then
  50.   peak returns a positive number, otherwise it returns the
  51.   days in the past that the peak occurred at. Also, check to
  52.   be sure that we have all three peaks.}
  53. if (pkr = nopeak) or (pkh = nopeak) or (pkl = nopeak) then
  54.        return;
  55. cr = c[pkr];    { close price on right shoulder}
  56. ch = c[pkh];    { close price on head }
  57. cl = c[pkl];    { close price on left shoulder}
  58. if (cl < ch) and (ch > cr) then  {we have a H & S}
  59. begin
  60.        trough_number = 0;
  61.        trr = 0;
  62.        while (pkr < trr)
  63.        begin
  64.               trough_number = trough_number+1;
  65.            trr = trough(ziga,trough_number);
  66.        end;              
  67.     trl = trough(ziga,trough_number+1);
  68.     ctrr = c[trr];  { close on right shoulder trough}
  69.     ctrl = c[trl];  { close on left shoulder trough}
  70.        dydx = (ctrl-ctrr)/(trl-trr);
  71.        { Create a line parallel to the neckline so we can use the 
  72.          angle function}
  73.        for i = 1; i <= quote_count; i = i+1;
  74.               neckline[i] = dydx * i;
  75.        angleOfneckline = angle(neckline);
  76.        { Skip those with too steep a neckline angle}
  77.        if (angleOfneckline > NeckAngle) or (angleOfneckline < -NeckAngle) 
  78.               then return;
  79.        {writeln(ticker,dydx,angle(neckline));}
  80.        if NG = 1 return;
  81.        opengraph(3);
  82.        sizegraph(5,1,1)
  83.        graph(1,ziga);
  84.        {drawline(15,trl,ctrl,trr,ctrr);}
  85.        drawline(15,trl,ctrl,trr,ctrr,trl-10,0);  { FOR TAS 5.0 only}
  86.        graph(v,'volume',tsf(v,5),'Volume TSF');
  87.        graph(obv(),'On Balance Volume');
  88.        closegraph();
  89. end;
  90.