PureBytes Links
Trading Reference Links
|
Hi,
Note that LastValue always looks at the end of the array. That's not
what you want since you are wanting the regression at each signal,
not only at the last bar in the series. That's one reason why your
first attempt failed.
Also, note that LinRegSlope and LinRegIntercept take arrays as their
first argument, not a single element (i.e. not C[b] as in your
example). That's one reason why your second attempt failed.
Try something along the following, which uses the regression values
of the current bar (when current bar is a signal bar), or the bar of
the next signal, as the case may be.
You will need to do the math to double check it all. But, the
important thing to note is that you must dynamically select the bar
for your regression values as each signal occurs, not just using the
values of the last bar in the data (i.e. not LastValue(...)).
LookBack = 4;
Slope = LinRegSlope(Close, LookBack);
Intercept = LinRegIntercept(Close, LookBack);
TestSignalLong = Cross(MA(Close, 5), MA(Close, 25));
NextSignalBar = ValueWhen(TestSignalLong, BarIndex(), 0);
M = IIF(TestSignalLong, Slope, ValueWhen(TestSignalLong, Slope, 0));
X = IIF(TestSignalLong, LookBack, LookBack - (NextSignalBar - BarIndex
()));
B = IIF(TestSignalLong, Intercept, ValueWhen(TestSignalLong,
Intercept, 0));
Y = M * X + B;
Plot(Close, "Close", colorLightGrey, styleBar);
PlotShapes(IIF(TestSignalLong, shapeUpArrow, null), colorGreen, 0,
Close);
Plot(IIF(X > 0 && X <= LookBack, Y, null), "LinReg", colorRed);
Mike
--- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@xxx> wrote:
>
> I also tried putting everything inside the BarCount loop but now I
get
> an error with LineArray (Error 5 - the function expects a different
> argument type here):
>
>
> // Plot the Linear Regression Lines
> if (ParamToggle("Show slope signals", "No|Yes", True))
> {
>
> for (b = LinePeriod; b < BarCount; b++)
> {
>
> if (slopeSignalLong[b])
> {
> X2 = b;
> X1 = b - LinePeriod;
> Intercept = LinRegIntercept(C[b], LinePeriod);
> Slope = LinRegSlope(C[b], LinePeriod);
> Y2 = Slope * X2 + Intercept;
> Y1 = Slope * X1 + Intercept;
> RegLine = LineArray( X1, Y1, X2, Y2,0 );
> Plot(RegLine, "RegLine", colorBrown, styleThick |
styleDashed);
> }
>
> if (slopeSignalShort[b])
> {
> X2 = b;
> X1 = b - LinePeriod;
> Intercept = LinRegIntercept(C[b], LinePeriod);
> Slope = LinRegSlope(C[b], LinePeriod);
> Y2 = Slope * X2 + Intercept;
> Y1 = Slope * X1 + Intercept;
> RegLine = LineArray( X1, Y1, X2, Y2,0 );
> Plot(RegLine, "RegLine", colorTurquoise, styleThick |
> styleDashed);
> }
> }
> }
>
>
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> >
> > I've been trying to plot linear regression lines, with no luck.
Hoping
> > someone can point out my error.
> >
> > When I am determining to enter a trade, my trading formula tests
> against
> > the slope of the linear regression line over the last 4 Closes (in
> > addition to other tests). For visual tracking purposes, I want to
plot
> > these linear regression lines.
> >
> > Part of my trading formula resides in a BarCount loop, and inside
this
> > loop I successfully populate arrays, TestSignalLong and
> TestSignalShort.
> > When these arrays are true, I want to plot the linear regression
> lines.
> >
> > Here is what I tried coding but it does not properly plot the
lines. I
> > get weird results:
> >
> >
> >
> > X2 = Cum
(1);
> //
> > 2nd X-coordinate in Cartesian line formula: Y = M*X + B
> > LinePeriod =
4; //
> > look-back period for linear regression line
> > X1 = LastValue(X2) -
LinePeriod;
> //
> > 1st X-coordinate in Cartesian line formula: Y = M*X + B
> > Slope = LastValue( LinRegSlope(C,
LinePeriod) ); //
> > this is the 'M' in Cartesian line formula: Y = M*X + B
> > Intercept = LastValue( LinRegIntercept(C, LinePeriod) ); //
this
> > is the 'B' in Cartesian line formula: Y = M*X + B
> > Y2 = Slope * X2 +
Intercept;
> //
> > 2nd Y-coordinate in Cartesian line formula: Y = M*X + B
> > Y1 = Slope * X1 +
Intercept;
> //
> > 1st Y-coordinate in Cartesian line formula: Y = M*X + B
> >
> >
> > // Barcount Loop
> > for (i = LinePeriod; i < BarCount; i++)
> > {
> >
> >
> //------------------------------------------------------------------
----\
> \
> >
> --------------------------------------------------------------------
----
> > // MY TRADING FORMULA GOES HERE. DURING THE FORMULA, ARRAYS ARE
FILLED
> > FOR:
> > // TestSignalLong[i] AND TestSignalShort[i], for use in the
Indicator
> > below
> >
> //------------------------------------------------------------------
----\
> \
> >
> --------------------------------------------------------------------
----\
> \
> > -
> > }
> >
> >
> > if (Status("action") == 1 /* Indicator */)
> > {
> >
> > // Plot Linear Regression Lines for each TestSignal
> > if (ParamToggle("Show slope signals", "No|Yes", True))
> > {
> > firstVisibleBar = Status("firstVisibleBar");
> > lastVisibleBar = Status("lastVisibleBar");
> > for (b = firstVisibleBar; b < BarCount AND b <=
lastVisibleBar;
> b++)
> > {
> > if (TestSignalLong[b])
> > {
> > RegLine = LineArray( X1[b], Y1[b], X2[b], Y2[b] );
> > Plot(RegLine, "RegLine", colorBrown, styleThick |
> styleDashed);
> > }
> > if (TestSignalShort[b])
> > {
> > RegLine = LineArray( X1[b], Y1[b], X2[b], Y2[b] );
> > Plot(RegLine, "RegLine", colorTurquoise, styleThick |
> > styleDashed);
> > }
> > }
> > }
> >
> > Plot(C, "Close", colorGreen, styleThick);
> >
> > }
> >
>
------------------------------------
**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
*********************
TO GET TECHNICAL SUPPORT from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
*********************
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
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/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> 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/
|