Louis: The code needs additional statements added to it before it can be made into a backtestable system. The numbers represent ordinal rankings, and you intuitively think that low ranking values mean "better" symbols. Well, depending on what indicators you have chosen, the low value ranks may or may not be the best ones to buy. Thus, you really need to think of a set of conditions which should be in Buy situations and which should be in Sell situations. Another way to backtest such a system is to set up a Rotational Trading model and use the Rank as the PositionScore. Even in this, you have to alter the ranking (or reverse it) before it can be a good PositionScore variable. There are so many ways to possibily use this kind of ranking to make a trading system, that more specifics are hard to give. I know this is not what you wanted or expected to hear but that is what the situation is. HTH, Ken
_____ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Louis Préfontaine Sent: Saturday, July 05, 2008 8:17 PM To: [email protected] Subject: Re: [amibroker] What a Great Ranking Tool Hi everyone, This seem interesting. Is there a way to add this to a backtest so the backtest would consider let's say the 500 best results? I'll try to be more clear: if I can spot a condition for having a symbol in my watchlist but I want a maximum of 500 tickers in my watchlist, can I do this by using some ranking that would go automatically in the backtest? Thanks, Louis 2008/7/5 Ken Close <[EMAIL PROTECTED]>: Paul Ho has come up with a supurb ranking tool. I have expanded it to two indicators. Feel free to expand the code structure to any number of indicators. Possible next step: stick the Tot_Rank values into the OI field for the symbols, then Plot the Ranks for a visual representation of "where the symbol is over time". The possibilities are endless (or at least enlarged because of Paul's code idea). Thanks Paul for your creative input. Ken // Ranking_Alt01.afl KSC 07/05/2008 // Original code by Paul Ho, Amibroker list 07/05/2008 // Modifications and expansions by Ken Close 07/05/2008 // Will ordinal rank every symbol in watchlist for every bar. mOwnROC = ROC(C, 14); mOwnRSI = RSIa(C, 14); mRoc = 0; mRSI = 0; list = CategoryGetSymbols(categoryWatchlist, 16); ROCcount[0] = rocrank[0] = 0; RSIcount[0] = RSIrank[0] = 0; for(i = 0; (sym = StrExtract(list, i)) != ""; i++) { SetForeign(sym); mRoc = ROC(C, 14); mRSI = RSIa(C, 14); RestorePriceArrays(); n = !IsNull(mRoc); m = !IsNull(mRSI); roccount += n; rsicount += m; rocrank = IIf(Nz(mRoc) > mOwnROC, Rocrank + n, rocrank); rsirank = IIf(Nz(mRsi) > mOwnRSI, Rsirank + m, rsirank); Totrank = rocrank + rsirank; } ROCn = ROC(C, 14); RSIn = RSIa(C, 14); Filter = 1; Buy = Sell = 0; AddColumn(ROCn, "ROCn",1.2); AddColumn(RSIn, "RSIn",1.2); AddColumn(mRoc, "MROC", 1.2); AddColumn(ROCrank, "ROCRank", 1.0); AddColumn(RSIrank, "rsirank",1.0); AddColumn(Totrank, "Totrank", 1.0); // To check the sorting, run on a watchlist, then click once on the date column, // Then shift click on one of the indicators, ie, RSIn, and you will see the // ordinal values in order.
