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

[amibroker] Re: Ranking of MG Industry Groups - Bruce



PureBytes Links

Trading Reference Links

Ara -

Glad to hear about the time improvement.  I don't know what all is in
your application, but my gut reaction is it is still too slow.  I can
only offer this point of reference.  Reading 200 tickers, calculating
a score such as ROC's, ranking and sorting 18+ years of data to get a
daily rank takes well under a minute in AFL.  TJ's fast implementation
of arrays stands some traditional sorting approaches on their head.  I
guess that I'll have to write this up in detail when I get a chance.

-- Bruce


--- In amibroker@xxxxxxxxxxxxxxx, "Ara Kaloustian" <ara1@xxx> wrote:
>
> Bruce,
> 
> Thanks for the info you provided. I was able to do the sector
ranking on ROC 
> and adapt it to my application. A backtest run takes about 10 minutes 
> instead of 80 minutes compared to prior code.
> 
> Now starts the "hard work" of making ideas pay off.
> 
> I am considering taking this down to the industry level, but the
code gets a 
> bit unweildy due to the sheer number of industries. Maybe I'll wait
till we 
> get dynamic arrays to keep things managable.
> 
> Ara
> ----- Original Message ----- 
> From: "bruce1r" <brucer@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Tuesday, June 26, 2007 9:49 AM
> Subject: [amibroker] Re: Ranking of MG Industry Groups
> 
> 
> > Ara -
> >
> > Maybe I can help a little on this one.  When I get some time maybe
> > I'll write up a full routine, but the following should be enough to
> > get you going.
> >
> > BOTTOM LINE - YOU DON'T NEED TO SORT IN ORDER TO RANK IF THE NUMBER OF
> > THINGS TO RANK IS A SUBSET
> >
> > It is a common misconception that you do.  Let me offer a brief
> > example to illustrate.
> >
> > Let's say that you have 50 arrays with one tick per day.  Each entry
> > might be the relative strength of that ticker vs. an index.  So, you
> > have different, unbounded numbers for each day for each of the 50
tickers.
> >
> > To find the rank of reference ticker #1 on any given day, I just need
> > to compare it to the other 49 arrays and add 1 to each for each day
> > that it is greater.  When I'm done, if ticker #1 is the top ranked, it
> > will have 49 for that entry.  So, I subtract the array from the number
> > of tickers (50) to get the rank.
> >
> > You have to do this for each reference ticker.  But, in most cases,
> > you are only interested in the top few.  In this example, it might be
> > the top (or bottom) 5 out of the 50.  If you have to do it for every
> > reference ticker, it is still faster than other approaches because of
> > the very fast array comparison operations in AB.  There is a way to
> > cut those comparisons in half - but it is more involved and is another
> > story for another day.
> >
> > I won't guarantee the following code, but it might look something
like -
> >
> > symcount = 50;
> > //  Let's say that you've read in the data via a Foreign() call to
> > //  array1 through array50 and the reference array is array1
> > refnum = 1;
> > count = 0;
> > refarray = varget( "array" + refnum );
> > for ( i = 0; i < symcoung; i++ )
> > {
> >    count = IIf( refarray > varget( "array" + i ), count++, count )
> > }
> > rank = symcount - count;
> > //  Rank is now the rank of the reference ticker on each day
> > //  It is usually normalized to a percentage
> > pcnt = 100 - ( rank - 1 ) / ( symcount - 1 );
> >
> >
> >
> > Hope this helps,
> >
> > -- Bruce R.
> >
> > P.S. The other major use of ranking is to normalize then combine
> > unbounded indicators.  For example, say you wanted to rank a group of
> > tickers based on weighted scores of relative strength, momentum, etc.
> > You would just combine the weighted, (percentage) normalized scores.
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "Ara Kaloustian" <ara1@> wrote:
> >>
> >> Here is a sort function that I got from the AB board,
> >>
> >> function sort(value)
> >> {
> >> //Value is array for same bar from all sectors
> >> //12 data points (Sectors 2 through 13, based on Quotes Plus)
> >> //
> >> for(i = 13; i>=2; i--)
> >> {
> >>  for (j = 3; j <= i; j++)
> >>  {
> >>  if (value[j-1] > value[j])
> >>   {
> >>   tempvalue  = value[j-1];
> >>   value[j-1] = value[j];
> >>   value[j]   = tempvalue;
> >>   }
> >>  }
> >> }
> >> SortList = Value;
> >> //list now sorted
> >> //sortid = ID for top sector
> >>
> >> return SortList;
> >> }
> >>
> >>
> >> ----- Original Message ----- 
> >> From: "marketmonk777" <RedEyes777@>
> >> To: <amibroker@xxxxxxxxxxxxxxx>
> >> Sent: Monday, June 25, 2007 11:01 PM
> >> Subject: [amibroker] Re: Ranking of MG Industry Groups
> >>
> >>
> >> > --- In amibroker@xxxxxxxxxxxxxxx, "Gordon Sutherland" <gosuth@>
wrote:
> >> >>
> >> >> Check-out the function:
> >> >>
> >> >> SetSortColumns( col1, col2, .... )
> >> >>
> >> >> Cheers,
> >> >>
> >> >> Gordon Sutherland
> >> >
> >> > Hi Gordon,
> >> >
> >> > That is a good solution for multi column sorting but I really am
> >> > looking to rank each industry group based on various time frames.
> >> >
> >> > Here is an excerpt from an Automatic Analysis that I had to
change to
> >> > vertical in order to properly show it in this posting:
> >> >
> >> >
> >> > Ticker MG851
> >> > Date/Time 6/22/2007
> >> > Name            Internet Service Providers
> >> > Close  24.2
> >> > 1P % -0.4
> >> > 1P R 38      I inserted this 1 Day change rank
> >> > 5P % 0.3
> >> > 21P % 2       Want to add 5 day, 21 day, 63 day and 255 day Ranks
> >> > 63P % 35
> >> > 255P % 116
> >> > NL 21 No
> >> > ATR5 0.39
> >> > ADR5 0.39
> >> > HC 732.34
> >> > L YR C 13.78
> >> > YTD % 75.6
> >> > YTD R 1         Another row I inserted to show YTD Rank
> >> >
> >> > So all I am trying to do is rank each of the percentage change
columns
> >> > from 1 to 240 (best to worst) in this one AA report.
> >> >
> >> > Any help would be appreciated.
> >> >
> >> > Regards,
> >> >
> >> > Dave
> >> >
> >> >
> >> >
> >> > 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
> >> >
> >> >
> >> >
> >>
> >
> >
> >
> >
> > 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
> >
> >
> >
>




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/