Sorry, a couple of typos in the formula. It should be: n = HHVBars(High, periods); avX = MA(x, n); avY = MA(y, n); avXY = MA(x*y, n); avXX = MA(x*x, n);
b = (avXY - avX*avY) / (avXX - avX*avX); a = avY - b*avX; GP --- In [email protected], "gp_sydney" <[EMAIL PROTECTED]> wrote: > > Louis, > > I gather you want to use regression to get a best-fit line from the > most-recent HHV, not just draw a line between the end points. From my > understanding of regression though, which isn't a lot, I gather that > such a line may not actually pass through either end point, so may not > go "from the HHV" exactly or end at the current bar exactly (to get > that, just draw a line between those two points as previously > mentioned). Once you have the line though, you could offset it > vertically to get it to pass exactly through the HHV or current bar > (but not both of course). > > From a response Tomasz gave you in another thread about how to > calculate Rsquared without a loop: > > http://finance.groups.yahoo.com/group/amibroker/message/129392 > > you can similarly do the regression itself. According to Tomasz, > LinRegSlope already accepts variable periods (ie. arrays), so to get > the slope you should be able to just use that function. Or to > calculate both coefficients yourself, then something like this (based > on the formula given at http://www.educalc.net/2104083.page): > > n = HHVBars(High, periods); > avX = MA(x, n); > avY = MA(y, n); > avXY = MA(x*y, n); > axXX = MA(x*x, n); > > b = (avXY - avX*avY) / (avXX - avX*avX); > a = axY - b*avX; > > Hopefully I've got that right (I haven't tested it). The line formula > is then: > > line = a + b*x; > > The slope is 'b' and the intercept 'a'. The slope is in dollars per > bar. I'm not sure what you want by a percentage slope though, as the > 'x' and 'y' axes are in completely different units. > > Also note that the calculated lines would only be straight on a linear > price scale (if they were plotted). If you use semi-log, then the > formula for a straight line is different - and how to do regression > for it would take some figuring out. > > Hope this helps. > > Regards, > GP > > > --- In [email protected], "Louis P." <rockprog80@> wrote: > > > > Hi, > > > > I need the gradient of the slope, and for each bar. This is where it is > > difficult... > > > > Thanks, > > > > Louis > > > > 2008/9/19 Tony Grimes <Tonez.Email@> > > > > > Louis, > > > > > > If your looking for the slope & difference between HHV of 20 bars > & the > > > current close, all you should need is this: > > > > > > Pds=20; > > > > > > LastHighBar = HHVBars(High, Pds); > > > LastHighVal = HHV(High, Pds); > > > > > > Slope = IIf(LastHighBar,(Close - LastHighVal) / LastHighBar,0); > > > CloseDiff = Close - Ref(Close, -LastHighBar); > > > > > > > > > On Fri, Sep 19, 2008 at 4:51 PM, Louis P. <rockprog80@> wrote: > > > > > >> Hi Tony, > > >> > > >> Thank you a lot for your response. I'm still very weak with > loops. Last > > >> time experimented with one, I had to reboot my computer! :) So > do you know > > >> how such a loop could work? And if I run, let's say 2 minutes > bar for one > > >> year, wouldn't that be really really long to deal with? I have > PIV with 1.5 > > >> GHz ram. > > >> > > >> I am looking for a line that ends at each bar and that starts > from the HHV > > >> of 20 bars, and I want to do things with this bar: e.g. compare > the closes > > >> between current bar and the HHV to the bar and establish the > gradient of > > >> that linear regression bar for each bar. > > >> > > >> Thanks a lot! > > >> > > >> Louis > > >> > > >> 2008/9/19 Tony Grimes <Tonez.Email@> > > >> > > >>> Hi Louis, > > >>> > > >>> A loop will work, but how slow - it depends (Speed of your computer, > > >>> number of bars loaded, how many loops your using etc...). > Without seeing > > >>> what your actually looking for (The end result), I think you > could do it > > >>> with one loop, with only one pass through the loop. The speed > should be OK. > > >>> > > >>> Good Luck. > > >>> > > >>> Tony > > >>> > > >>> On Fri, Sep 19, 2008 at 2:47 PM, Louis P. <rockprog80@> wrote: > > >>> > > >>>> Hi Tony, > > >>>> > > >>>> Thanks for the tips. Basically, I'd need a loop and use it on > each and > > >>>> every bar of the array to determine the LR, right? > > >>>> > > >>>> That will slow down my computer a lot, don't you think? > > >>>> > > >>>> Thanks, > > >>>> > > >>>> Louis > > >>>> > > >>>> 2008/9/16 Tony Grimes <Tonez.Email@> > > >>>> > > >>>>> SelectedValue takes an array ( of numbers) and returns a single > > >>>>> number based on the bar that is selected in the chart. > > >>>>> > > >>>>> The first formula worked because SelectedValue was giving you a > > >>>>> number. > > >>>>> > > >>>>> Look at it this way: Array --> SelectedValue ---> Number. > > >>>>> > > >>>>> Remove SelectedValue: Array---->Array. > > >>>>> > > >>>>> You can draw a line with single numbers, but not arrays. > > >>>>> > > >>>>> You can always use a loop. > > >>>>> > > >>>>> You might want to read: Understanding how AFL works, in the > Amibroker > > >>>>> users guide. Until you really understand AFL & array > processing, you are > > >>>>> going to keep running into these problems, which will just > slow you down. > > >>>>> > > >>>>> > > >>>>> On Tue, Sep 16, 2008 at 10:34 PM, Louis P. <rockprog80@>wrote: > > >>>>> > > >>>>>> Hi Tony, > > >>>>>> > > >>>>>> Why was the first formula working (the one with > selectedvalue) and not > > >>>>>> the second one? Why simply deleting the "selectedvalue" > makes it an array > > >>>>>> that will not be accept in "linearray"? > > >>>>>> > > >>>>>> Is there any way to draw a line without using lastvalue or > > >>>>>> selectedvalue? Do I need to use a loop? > > >>>>>> > > >>>>>> Thanks, > > >>>>>> > > >>>>>> Louis > > >>>>>> > > >>>>>> 2008/9/16 Tony Grimes <Tonez.Email@> > > >>>>>> > > >>>>>>> Louis, > > >>>>>>> > > >>>>>>> All of the variables you are creating for the LineArray > function are > > >>>>>>> arrays themselves. Although LineArray generates an array, it > does not accept > > >>>>>>> any arrays as inputs. Additionally, your error message was > probably > > >>>>>>> different. It probably went from complaining about argument > #4 having the > > >>>>>>> incorrect type (which you corrected) to argument #3 having > the incorrect > > >>>>>>> type. > > >>>>>>> > > >>>>>>> On Tue, Sep 16, 2008 at 9:10 PM, Louis P. <rockprog80@>wrote: > > >>>>>>> > > >>>>>>>> Hi, > > >>>>>>>> > > >>>>>>>> Thank you for your help. > > >>>>>>>> > > >>>>>>>> @Ara: > > >>>>>>>> > > >>>>>>>> If in > > >>>>>>>> > > >>>>>>>> barhh1 = HHVBars( High, Periods ) ; > > >>>>>>>> bi1 = BarIndex(); > > >>>>>>>> y11 = LinearReg( C, barhh1 ) ; > > >>>>>>>> y01 = LinRegIntercept( C, barhh1 ) ; > > >>>>>>>> sl1 = LineArray( bi1-barhh1+0, y01, bi1, y11, 0, True ); > > >>>>>>>> > > >>>>>>>> I replace > > >>>>>>>> > > >>>>>>>> sl1 = LineArray( bi1-barhh1+0, y01, bi1, y11, 0, True ); > > >>>>>>>> > > >>>>>>>> by > > >>>>>>>> > > >>>>>>>> sl1 = LineArray( bi1-barhh1+0, y01, bi1, LastValue(y11), 0, > True > > >>>>>>>> ); > > >>>>>>>> > > >>>>>>>> I still have the same error message. I don't know from > where it is > > >>>>>>>> coming.. unfortunately! > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> @gp_sydney: > > >>>>>>>> > > >>>>>>>> That was a typo, you are right; I arranged that by adding a > 1. But > > >>>>>>>> still, the problem remains: the last line does not work. > > >>>>>>>> > > >>>>>>>> One day, I asked support if I needed a loop to do such LR > and they > > >>>>>>>> said I should not need one. > > >>>>>>>> > > >>>>>>>> Here is the original code: > > >>>>>>>> > > >>>>>>>> barhh = SelectedValue( HHVBars( High, Periods ) ); > > >>>>>>>> bi = SelectedValue( BarIndex() ); > > >>>>>>>> y1 = SelectedValue( LinearReg( C, barhh ) ); > > >>>>>>>> y0 = SelectedValue( LinRegIntercept( C, barhh ) ); > > >>>>>>>> sl = LineArray( bi-barhh+0, y0, bi, y1, 0, True ); > > >>>>>>>> > > >>>>>>>> What I want to do is simply eliminate the "selectedvalue" > part and > > >>>>>>>> use the code not only for the selected data but for the > whole data. I want > > >>>>>>>> to be able to draw a line from each HHV to each bar and > then work with the > > >>>>>>>> result. > > >>>>>>>> > > >>>>>>>> If it can't be done without a loop, I feel like I'll be > lost in time > > >>>>>>>> again; last time I tried to run a loop on my computer it > freezed and after 2 > > >>>>>>>> minutes I decided to shut down AB... > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> Thanks for the help, > > >>>>>>>> > > >>>>>>>> Louis > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> 2008/9/16 gp_sydney <gp.investment@> > > >>>>>>>> > > >>>>>>>>> As Ara said, in the shown code snippet you don't have > "barhh" > > >>>>>>>>> defined, > > >>>>>>>>> only "barhh1". > > >>>>>>>>> > > >>>>>>>>> Beyond that, you have the same issue I mentioned > originally, that > > >>>>>>>>> the > > >>>>>>>>> linear regression functions and LineArray function take scalar > > >>>>>>>>> values > > >>>>>>>>> (ie. single numbers) as parameters, not arrays. > > >>>>>>>>> > > >>>>>>>>> I gather you're trying to create a line from the > most-recent HHV > > >>>>>>>>> value > > >>>>>>>>> using the subsequent close data for every bar on the > chart. As I > > >>>>>>>>> don't > > >>>>>>>>> think the linear regression functions can take arrays for the > > >>>>>>>>> period, > > >>>>>>>>> I think you'd need to use a loop and do the linear regression > > >>>>>>>>> yourself > > >>>>>>>>> at each bar (you could call the array functions within the > loop, > > >>>>>>>>> but > > >>>>>>>>> since they fill a whole array each time, they would do a > lot of > > >>>>>>>>> unnecessary work). If you do that yourself inside the > loop, then at > > >>>>>>>>> each bar you'd have scalar 'x' and 'y' values to calculate > the line > > >>>>>>>>> slope and so on. > > >>>>>>>>> > > >>>>>>>>> For what it's worth, the BarIndex function simply gives > you the bar > > >>>>>>>>> number. It provides a way of using the current bar number > in array > > >>>>>>>>> formula. > > >>>>>>>>> > > >>>>>>>>> Regards, > > >>>>>>>>> GP > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> --- In [email protected] > <amibroker%40yahoogroups.com>, > > >>>>>>>>> "Louis P." <rockprog80@> wrote: > > >>>>>>>>> > > > >>>>>>>>> > Hi, > > >>>>>>>>> > > > >>>>>>>>> > Sorry, You can replace "periods" by 50 if you wish. I > just forgot > > >>>>>>>>> to > > >>>>>>>>> > include that. > > >>>>>>>>> > > > >>>>>>>>> > barhh1 = HHVBars( High, *50* ) ; > > >>>>>>>>> > bi1 = BarIndex() ; > > >>>>>>>>> > y11 = LinearReg( C, barhh ) ; > > >>>>>>>>> > y01 = LinRegIntercept( C, barhh ) ; > > >>>>>>>>> > sl1 = LineArray( bi1-barhh1+0, y01, bi1, y11, 0, True ); > > >>>>>>>>> > > > >>>>>>>>> > Still, it is not working, even if barhh1 is defined... > > >>>>>>>>> > > > >>>>>>>>> > Louis > > >>>>>>>>> > > > >>>>>>>>> > 2008/9/16 Ara Kaloustian <ara1@> > > >>>>>>>>> > > > >>>>>>>>> > > y11 and y01 use "barhh" which is not defined. > > >>>>>>>>> > > > > >>>>>>>>> > > You have defined "barhh1" > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> > > ----- Original Message ----- > > >>>>>>>>> > > *From:* Louis P. <rockprog80@> > > >>>>>>>>> > > *To:* [email protected] > <amibroker%40yahoogroups.com> > > >>>>>>>>> > > *Sent:* Tuesday, September 16, 2008 2:46 PM > > >>>>>>>>> > > *Subject:* [amibroker] What is wrong? > > >>>>>>>>> > > > > >>>>>>>>> > > Hi, > > >>>>>>>>> > > > > >>>>>>>>> > > What is wrong in the following formula? > > >>>>>>>>> > > > > >>>>>>>>> > > barhh1 = HHVBars( High, Periods ) ; > > >>>>>>>>> > > bi1 = BarIndex() ; > > >>>>>>>>> > > y11 = LinearReg( C, barhh ) ; > > >>>>>>>>> > > y01 = LinRegIntercept( C, barhh ) ; > > >>>>>>>>> > > sl1 = LineArray( bi1-barhh1+0, y01, bi1, y11, 0, True ); > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> > > Thanks, > > >>>>>>>>> > > > > >>>>>>>>> > > Louis > > >>>>>>>>> > > > > >>>>>>>>> > > p.s. There was "Selectedvalue" in the first four lines > but I > > >>>>>>>>> don't > > >>>>>>>>> want to > > >>>>>>>>> > > plot it on the chart based on where I am on that > chart, but > > >>>>>>>>> simply > > >>>>>>>>> set the > > >>>>>>>>> > > variable so I can use the stuff later. > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> > > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > >> > > > > > > > > >
