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" <[EMAIL PROTECTED]> 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" <[EMAIL PROTECTED]> >> 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 > > >
