What exactly does it mean when the third parameter to ValueWhen is 0? Is this a reference to a future array element?
> NextSignalBar = ValueWhen(TestSignalLong, BarIndex(), 0); --- In [email protected], "Mike" <[EMAIL PROTECTED]> wrote: > > 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 [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); > > > > > > } > > > > > >
