Hi, @Tony:Sorry I thought gradient was the good word. Maybe I meant angle, or degree? I want a LR slope of approx. 30-50 degrees. How can I do that? @gp_sydney: I need to go to work, but will check this tomorrow or Monday. I looked very quickly and was wondering where in that formula can I determine how steep the slope will be. That would help a lot!
Thank you you two a lot! Louis 2008/9/20 gp_sydney <[EMAIL PROTECTED]> > 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] <amibroker%40yahoogroups.com>, > "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] <amibroker%40yahoogroups.com>, "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> > > <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> > > <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. > > > >>>>>>>>> > > > > > >>>>>>>>> > > > > > >>>>>>>>> > > > > > >>>>>>>>> > > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > >> > > > > > > > > > > > > > > > >
