Fred, This is very helpful code. This is something I have been wanting to do since I left Excel for AB.
For explorations it appears to work great. But I am having trouble using this in a backtest, what seems to happen is it only will enter trades for the first date specified on the backtest and that is it. I cannot seem to find where the limitation is within your code so that it is not working with backtests.. Any help is very appreciated. Thanks! -RadMobile --- In [email protected], Fred Tonetti <ftone...@...> wrote: > > Ken, > > > > This could be generalized even more but it suffices for proof of concept > with two metrics. > > > > You can do the rest . > > > > AB = CreateObject("Broker.Application"); > > AA = AB.Analysis; > > WL = AA.Filter(0, "WatchList"); > > > > WLSyms = CategoryGetSymbols(categoryWatchlist, WL); > > > > rsSymNo = rsScore = rsiSymNo = rsiScore = rocSymNo = rocScore = Cum(0); > > rsScore[0] = rsiScore[0] = rocScore[0] = 1e100; > > > > procedure Rank_Sym (rsSymNoX, rsScoreX) > > { > > rsSymNo = IIf(rsScoreX > rsScore, IIf(rsScoreX <= Ref(rsScore, -1), > rsSymNoX, Ref(rsSymNo, -1)), rsSymNo); > > rsScore = IIf(rsScoreX > rsScore, IIf(rsScoreX <= Ref(rsScore, -1), > rsScoreX, Ref(rsScore, -1)), rsScore); > > } > > > > if (Name() == StrExtract(WLSyms, 0)) > > { > > WLQty = 0; > > for (i = 0; (Symbol = StrExtract(WLSyms, i)) != ""; i++) > > { > > WLQty = WLQty + 1; > > SetForeign(Symbol); > > RSIx = SelectedValue(RSI(14)); > > ROCx = SelectedValue(ROC(C, 14)); > > RestorePriceArrays(); > > > > rsSymNo = rsiSymNo; > > rsScore = rsiScore; > > Rank_Sym (i, RSIx); > > rsiSymNo = rsSymNo; > > rsiScore = rsScore; > > > > rsSymNo = rocSymNo; > > rsScore = rocScore; > > Rank_Sym (i, ROCx); > > rocSymNo = rsSymNo; > > rocScore = rsScore; > > } > > for (i = 1; i <= WLQty; i++) > > { > > StaticVarSet("RSI_Rank_" + NumToStr(RSISymNo[i], 1.0), i); > > StaticVarSet("ROC_Rank_" + NumToStr(ROCSymNo[i], 1.0), i); > > } > > } > > > > for (i = 0; i <= 1000; i++) > > { > > if (Name() == StrExtract(WLSyms, i)) > > break; > > } > > > > RSI_Rank = StaticVarGet("RSI_Rank_" + NumToStr(i, 1.0)); > > ROC_Rank = StaticVarGet("ROC_Rank_" + NumToStr(i, 1.0)); > > Tot_Rank = RSI_Rank + ROC_Rank; > > > > Filter = BarIndex() == SelectedValue(BarIndex()); > > AddColumn(RSI_Rank, "RSI", 1.0); > > AddColumn(ROC_Rank, "ROC", 1.0); > > AddColumn(Tot_Rank, "Tot", 1.0); > > > > > > _____ > > From: [email protected] [mailto:[email protected]] On Behalf > Of Ken Close > Sent: Saturday, May 10, 2008 7:41 AM > To: [email protected] > Subject: RE: [amibroker] Re: Greybeard Topic - Sorting and Ranking Arrays > > > > Droskill: Thanks for your suggestion. I did not explain exactly what I > am trying to accomplish, so this is a little away from my objective. > > As I put in another reply (to Tomasz) on this subject, > > "What I need to achieve is equivalent to using the Excel Function RANK, > which allows the specification of a Range (a column for say, stochastics for > 100 funds), then getting in another column the Ordinal Position of that > ticker relative to all others for the result of stochastics. Then, another > column might have an indicator, say RSI14, and another column using RANK > that shows the Ordinal Position of each RSI value for all tickers. I then > take a final column and say, sum the two ordinal values for each ticker to > get a Master Ranking column. My situation is more complex than this (more > columns and a more complex combining method) but this is the basic idea. > > This can all be done in Excel, but a tremendous labor saving step is to > accomplish it all in AB. Imagine trying to do this on 1000s of stocks on a > daily or even hourly basis." > > Thus, I am left with trying to manipulate the various columns, perhaps with > an ATC for each column, but the looping I envision will be necessary will > likely make this kind of an approach too slow. > > Another way to get to a master ranking of ordinal positions of two or more > indicators is to take each indicator and multiply them together for each > ticker (RSI times stochastics times etc) and use the overall product as a > ranking "score". However, the Ordinal Position for each intermediate > indicator has appeal in a display that others look at, even as all issues > are sorted by this so-called MasterRanking parameter. Thus this > multiplication route, while it "might" work, loses some functionality from > the overall output. > > I appreciate you making the suggestion. Any other ideas? > > Ken > > -----Original Message----- > From: amibro...@yahoogrou <mailto:amibroker%40yahoogroups.com> ps.com > [mailto:amibro...@yahoogrou <mailto:amibroker%40yahoogroups.com> ps.com] On > Behalf > Of droskill > Sent: Friday, May 09, 2008 5:19 PM > To: amibro...@yahoogrou <mailto:amibroker%40yahoogroups.com> ps.com > Subject: [amibroker] Re: Greybeard Topic - Sorting and Ranking Arrays > > I'll take a different tact - let me assume you just want to display the > ranking on the screen rather than a backtest - so that's an Exploration. > > Here's quick sample Exploration - I'm not saying there is any value to these > measurements - they are for demonstration only. > > MAShort = MA (C,20); > MALong = MA (C,100); > PS = ROC(C,250); > MAps = MA(PS,50); //Do a calculation based on another number > > BuySignal = MAShort > MALong; > SellSignal = MAShort < MALong; > > Filter = Status("lastbarinrange"); //Filter to only show last bar AddColumn( > BuySignal,"Buy"); AddColumn( SellSignal,"Sell"); AddColumn( C, "Close"); > AddColumn( MAShort,"MAShort"); AddColumn( MALong,"MALong"); AddColumn( > PS,"PositionScore"); AddColumn( MAps,"MA of PS"); SetSortColumns(-3); //this > sets the sorting column > > --- In amibro...@yahoogrou <mailto:amibroker%40yahoogroups.com> ps.com, "Ken > Close" <ken45140@> wrote: > > > > It has been fun to search the yahoo archives back to 2002 and see > names of a > > lot of the original folks who got on the Amibroker bandwagon back in > > the early days, many of whom are no longer around (at least not > > posting like they used to). Boy, how the program has evolved and > > improved over these many years. > > > > I was looking back there in the archives for messages on the Osaka > Plugin > > (which is still on my hard drive since 2002 but which I have never > used). > > Maybe now...... > > > > I have a need to take a watchlist and position rank several columns of > > calculations and determine the postion rank of the ticker for that > > calculation; then do the same for another column (calculation), get > > the position rank for that additional column, and then combine the > > position ranking numbers for the columns for each ticker, sort of to > > get a Master ranking parameter. > > > > My question is: what new features in AB might help accomplish this? > Surely > > the Osaka Plugin (2002 vintage) is not the only way to do what I > want. I > > have not really studied nor used Static and Dynamic variables---is > this the > > set of commands that I would use with looping to get position ranks of > > a watchlist? > > > > I did find and just tested some code from the Library which used > just these > > tools (variables and looping) and it was painfully slow and would > not really > > work for the application I have in mind. I am uncertain if the code > in that > > example can be modified to make it faster. > > > > Any suggestions about this age-old question/problem, given the many > advances > > of Amibroker since 2002?? > > > > Thanks for any ideas (the more specific the better). > > > > Ken > > > > ------------------------------------ > > 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.amibroke <http://www.amibroker.com/devlog/> r.com/devlog/ > > For other support material please check also: > http://www.amibroke <http://www.amibroker.com/support.html> > r.com/support.html > Yahoo! Groups Links > > No virus found in this incoming message. > Checked by AVG. > Version: 8.0.100 / Virus Database: 269.23.14/1425 - Release Date: 5/9/2008 > 12:38 PM >
