PureBytes Links
Trading Reference Links
|
RS, I have the same code but it also has the following message attached
which indicates it was written by Greg Wood. Perhaps yours doesn't have this
attachment. For such a nice piece of code, it is important to give credit
where credit is due.
{ ======================================
This is my implementation of Linear Regression Channels. 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
01/26/97 v1.0 - Initial distribution
========================================}
-----Original Message-----
From: R S <randall21@xxxxxxxxxxx>
To: omega-list@xxxxxxxxxx <omega-list@xxxxxxxxxx>
Date: Thursday, November 23, 2000 1:54 PM
Subject: Indicator works in TS4 but not in TS2000
>Below is the .ela code (incl function) for a very clever Linear Regression
>Channel indicator (very similar to Advanced Get's channels).
>
>This was written for TS4 several years ago, but for some reason it will not
>work with TS2000.
>
>Perhaps someone can figure out why?
>
>Thank you.
>
>
>{Indicator: Linear Regression Channel
>
>USAGE:
>
>Use the text tool to indicate the beginning and end of the channel(s) you
>want. The default uses "R"s (upper case, no quotes). Then to show the
>channel(s), go to Format Analysis Techniques, select this indicator, and
>press the "Status" button two times (this is not a double-click, really
>press it two times).
>
>The channel is based on Price, which defaults to Close, but you can change
>it to High or Low.
>
>You can set the color and thickness of the channels.
>
>You can show a series of channels by putting more "R"s on the chart. Each
>pair of "R"s will get its own channel.
>
>If you want separate channels or different colors, you can add the
indicator
>multiple times. Be sure to give each one a different labTL value.}
>
>
>input: price(c), labTL("R"), colorTL(tool_yellow), thickTL(0);
>
>array: dd[20](0),tt[20](0),vv[20](0),bb[20](0);
>var: iMax(20), ix(0), hh(0), ll(0), hhbb(0), llbb(0);
>var: pvv1(0), pbb1(0), pvv2(0), pbb2(0), x1(0), x2(0), y1(0), y2(0);
>var: ii(0), jj(0), kk(0), hval(0), lval(0);
>var: handl(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
> if text_getstring(handl) = labTL then begin { save the item's date,
>time, value and handle }
> if ix < iMax - 1 then begin
> tt[ix] = text_gettime(handl);
> dd[ix] = text_getdate(handl);
> vv[ix] = text_getvalue(handl);
> ix = ix + 1;
> end;
> end;
> handl = text_getnext(handl,2); { IMPORTANT -- infinite loop if this
is
>missing! }
> end;
>end;
>
>for ii = 0 to ix - 1 begin { check each point }
> if time = tt[ii] and date = dd[ii] then begin { we've found a selected
>point }
> bb[ii] = currentbar; { remember where we found it }
> plot1(price,""); { show the user which point we used for the
>calculations }
> if ii > 0 then begin { need at least 1 point }
> { The regression line passes through (x1,y1) and (x2,y2) }
> x1 = bb[ii];
> x2 = bb[ii-1];
> y1 = LinearRegValue(price, x1-x2 ,0);
> y2 = LinearRegValue(price, x1-x2, x1-x2);
>
> { Draw the regression line }
> handl = TL_New(date[currentbar-x2],time[currentbar-x2],y2,
>date[currentbar-x1],time[currentbar-x1],y1 );
> TL_SetExtRight(handl, true);
> TL_SetExtLeft(handl, false);
> TL_SetSize(handl, thickTL);
> TL_SetColor(handl, colorTL);
>
> { find the max excursion on each side of the line }
> hval = 0;
> lval = 0;
> for kk = x2 to x1 begin
> value1 = pnt2line(x1,y1,x2,y2, barnumber[currentbar-kk],
>high[currentbar-kk]);
> if value1 > 0 and hval < value1 then begin
> hval = value1;
> hh = h[currentbar-kk];
> hhbb = kk;
> end;
> value2 = pnt2line(x1,y1,x2,y2, barnumber[currentbar-kk],
>low[currentbar-kk]);
> if value2 < 0 and lval > value2 then begin
> lval = value2;
> ll = l[currentbar-kk];
> llbb = kk;
> end;
> end;
>
> { Now draw the channel lines }
> plot2[currentbar-hhbb](hh,"");
> pvv1 = TLValue(ll,llbb, ll-(y2-y1), llbb-(x2-x1), x1);
> pvv2 = TLValue(ll,llbb, ll-(y2-y1), llbb-(x2-x1), x2);
> handl = TL_New(date[currentbar-x2],time[currentbar-x2],pvv2,
>date[currentbar-x1], time[currentbar-x1],pvv1);
> TL_SetExtRight(handl, true);
> TL_SetExtLeft(handl, false);
> TL_SetSize(handl, thickTL);
> TL_SetColor(handl, colorTL);
>
> plot3[currentbar-llbb](ll,"");
> pvv1 = TLValue(hh,hhbb, hh-(y2-y1), hhbb-(x2-x1), x1);
> pvv2 = TLValue(hh,hhbb, hh-(y2-y1), hhbb-(x2-x1), x2);
> handl = TL_New(date[currentbar-x2],time[currentbar-x2],pvv2,
>date[currentbar-x1], time[currentbar-x1],pvv1);
> TL_SetExtRight(handl, true);
> TL_SetExtLeft(handl, false);
> TL_SetSize(handl, thickTL);
> TL_SetColor(handl, colorTL);
>
> end;
> end;
>end;
>
>
>
>{Function: pnt2line}
>
>input: x1(numericsimple), y1(numericsimple),
> x2(numericsimple), y2(numericsimple),
> x(numericsimple), y(numericsimple);
>
>{ returns the distance from (x,y) to the line formed by (x1,y1) (x2, y2) }
>
>var: qq(0), m1(0), m2(0);
>
>if x-x2 <> 0 then begin
> m1 = (y1-y2) / (x1-x2);
> m2 = (y-y2) / (x-x2);
> qq = SquareRoot(Square(y-y2)+Square(x-x2));
> value1 = qq * sine( arctangent( (m2-m1) / (1 + m1*m2)));
>end else
> value1 = 0;
>
>pnt2line = value1;
>
>
|