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

Re: [amibroker] Re: What is wrong?



PureBytes Links

Trading Reference Links

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 <gp.investment@xxxxxxxxx>

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 amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@xxx> 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 amibroker@xxxxxxxxxxxxxxx, "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 amibroker@xxxxxxxxxxxxxxx
> <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:* amibroker@xxxxxxxxxxxxxxx
> <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.
> > >>>>>>>>> > >
> > >>>>>>>>> > >
> > >>>>>>>>> > >
> > >>>>>>>>> >
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>
> > >>>>
> > >>>
> > >>
> > >
> > >
> >
>


__._,_.___

Please note that this group is for discussion between users only.

To get 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




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___