Thanks guys. I will work with the suggestions. Some amazing help available on this forum. When I get better at this whole AFL thing, I hope to one day give back as much as I've gotten!
--- In [email protected], "gp_sydney" <[EMAIL PROTECTED]> wrote: > > Try something like this. For the sake of the example, the signals are > based on 30 & 60 day EMA crossovers. > > ************************** > GraphXSpace = 10; > Plot(Close, "Price", -1, styleCandle); > > period = 4; > > e30 = EMA(Close, 30); > e60 = EMA(Close, 60); > Buy = Cross(e30, e60); > Sell = Cross(e60, e30); > Short = Sell; > Cover = Buy; > > slope = LinRegSlope(Close, period); > intercept = LinRegIntercept(Close, period); > y2 = intercept + slope * (period-1); // > > fb = Max(Status("firstVisibleBar"), period-1); > lb = Status("lastVisibleBar"); > > RegLineL = Null; > RegLineS = Null; > for (i = fb; i <= lb; i++) { > if (Buy[i]) { > rlines = LineArray(i-period+1, intercept[i], i, y2[i]); > RegLineL = IIf(!IsNull(rlines), rlines, RegLineL); > } > if (Short[i]) { > rlines = LineArray(i-period+1, intercept[i], i, y2[i]); > RegLineS = IIf(!IsNull(rlines), rlines, RegLineS); > } > } > > Plot(RegLineL, "RegLineL", colorBrown, styleThick | styleDashed); > Plot(RegLineS, "RegLineS", colorBlue, styleThick | styleDashed); > > Plot(e30, "EMA(30)", colorOrange, styleLine); > Plot(e60, "EMA(60)", colorBlack, styleLine); > ************************** > > I used separate arrays for the long and short lines, so that they can > be displayed in different colours. Also note the use of "period-1" for > the 'x' distance. When regressing over 4 bars, the distance between > them is only 3 bars (so delta 'x' is 3, not 4). > > There seems to be some confusion with the intercept. The intercept is > not for absolute index zero, but for the first bar of the regression > range. So when regressing over 4 bars, the intercept is for the bar 3 > bars ago. Consequently, Y2 is not intercept+slope*X2, but rather > intercept+slope*(period-1), and Y1 is just the intercept. > > So the four coordinates of the line at any bar 'i' are: > > X1 = i-period+1; (ie. 3 bars ago if period is 4) > X2 = i; > Y1 = intercept[i]; (the y value 3 bars ago) > Y2 = Y1+slope[i]*(period-1); > > The value of Y2 is just Y1+slope*deltaX, and rearranging would give > slope = (Y2-Y1)/deltaX = deltaY/deltaX as required. > > Regards, > GP > > > --- In [email protected], "ozzyapeman" <zoopfree@> 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 [email protected], "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); > > > > > > } > > > > > >
