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 [email protected], "Ara Kaloustian" <[EMAIL PROTECTED]> 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" <[EMAIL PROTECTED]> > To: <[email protected]> > 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 [email protected], "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: <[email protected]> > >> Sent: Monday, June 25, 2007 11:01 PM > >> Subject: [amibroker] Re: Ranking of MG Industry Groups > >> > >> > >> > --- In [email protected], "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 > > > > > > >
