[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] ValueWhen(x, y, 0), WAS: Re: Help - Trying to plot linear regression lines



PureBytes Links

Trading Reference Links

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 amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> 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 amibroker@xxxxxxxxxxxxxxx, "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 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/