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

[amibroker] Re: What is wrong?



PureBytes Links

Trading Reference Links

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@xxx> 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@xxx>
> 
> >   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@xxx> 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@xxx>
> >>
> >>>   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@xxx> 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@xxx>
> >>>>
> >>>>>   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@xxx>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@xxx>
> >>>>>>
> >>>>>>>    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@xxx>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@xxx>
> >>>>>>>>
> >>>>>>>>>   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
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/