Why do you need it to run it in BackTest ? Are you trying to run this using todays data every few minutes during the day ?
Even if that's the case TWO AFL's to the job will be the easiest solution tied together with a script ... AFL 1 - calclates the values using EXPLORE AFL 2 - Uses the Watchlist of the top 500 to run BackTest The script - Runs AFL 1 ( Explore ) to get the metric of all - Exports the results - Chooses the top 500 and flags them to be included in whatever watchlist - Runs AFL 2 ( BackTest ) based on the Watchlist built above ----- Original Message ----- From: Louis Préfontaine Date: Monday, July 14, 2008 5:39 pm Subject: Re: [amibroker] Re: Paul Ho: Memory Challenges with Great Ranking Tool To: amibroker@yahoogroups.com > I think you don't understand. As I said like 10 times, this is > the easiest > part. I need to find a code that will implement this in a > backtest. It is > *easy* to create a watchlist every night and use that watchlist > the next day > in intraday. What is more difficult is to have a code that will > automatically rank the 8000 tickers *each day* and then use the > 500 best as > the universe of tickers to which the intraday code will be applied. > > 2008/7/14 : > > > Since you stated I described it accurately I don't think I > need to > > scroll up ... > > > > So as I said ... Create a watchlist with the top 500 ... I > assume this > > process only needs to be run once per day i.e. at end of day > yesterday or > > beginning of day today ... But in any case even if you run it > every n > > minutes it would still seem like the simplest way to get this done. > > > > After that you can use the Watchlist as the driving factor for > whatever> else you are doing intraday > > > > ----- Original Message ----- > > From: Louis Préfontaine > > Date: Monday, July 14, 2008 5:30 pm > > Subject: Re: [amibroker] Re: Paul Ho: Memory Challenges with > Great Ranking > > Tool > > To: amibroker@yahoogroups.com > > > > > Yes, this is exactly what I need. A code that will get the 500 > > > tradableseach day and add this as a condition for the intraday > > > trading of the day > > > after that. Just scroll up; all the details are there. > > > > > > > > > > > > 2008/7/14 : > > > > > > > > > Scuse me ? ... I thought what you wanted was a list of the > > > 500 tradables > > > > that were closest to their 52 Week High as of today ... What > > > did I miss ? > > > > > > > > ----- Original Message ----- > > > > From: Louis Préfontaine > > > > Date: Monday, July 14, 2008 5:17 pm > > > > Subject: Re: [amibroker] Re: Paul Ho: Memory Challenges with > > > Great Ranking > > > > Tool > > > > To: amibroker@yahoogroups.com > > > > > > > > > This is not possible. I have to backtest each daily bar > > > > > considering the top > > > > > 500 has been chosen. > > > > > > > > > > > > > > > 2008/7/14 : > > > > > > > > > > > > > > > So create a watchlist with the top 500 > > > > > > > > > > > > ----- Original Message ----- > > > > > > From: Louis Préfontaine > > > > > > Date: Monday, July 14, 2008 4:56 pm > > > > > > Subject: Re: [amibroker] Re: Paul Ho: Memory > Challenges with > > > > > Great Ranking > > > > > > Tool > > > > > > To: amibroker@yahoogroups.com > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > The problem I see using PositionScore is that > PositionScore> > > > > > considers the > > > > > > > number of signals in real-time to determine how many to > > > consider> > > > when there > > > > > > > are too many, but this is not possible for me because > > > the goal > > > > > > > is to limit > > > > > > > the number of tickers from which to take the signals > because> > > > > > with real-time > > > > > > > data I can't process more than 500... Or maybe > PositionScore> > > > > > can be used to > > > > > > > get those 500 tickers in the first place?! > > > > > > > > > > > > > > Louis > > > > > > > > > > > > > > p.s. Glenn: I asked to be a member and will try to > download> > > > > > osaka ASAP. I > > > > > > > will get back to you with this. Thanks! > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2008/7/14 : > > > > > > > > > > > > > > > > > > > > > Is there some reason that PositionScore doesn't > work ? i.e. > > > > > > > assuming> daily data then something to the effect of ... > > > > > > > > > > > > > > > > PositionScore = C / HHV(C, 252); > > > > > > > > > > > > > > > > The number of tradables can be limited in other > ways ... > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > > > > From: Louis Préfontaine > > > > > > > > Date: Monday, July 14, 2008 2:48 pm > > > > > > > > Subject: Re: [amibroker] Re: Paul Ho: Memory > > > Challenges with > > > > > > > Great Ranking > > > > > > > > Tool > > > > > > > > To: amibroker@yahoogroups.com > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > Glenn: Do I have to be a member of amibroker-dll to > > > get the > > > > > > > OSAKA_105> > plugin? It sure seems like a nice > > > feature... So, > > > > > > > you believe it > > > > > > > > > would do > > > > > > > > > exactly what I need, I mean: it will select the 500 > > > > > stocks by > > > > > > > > > ranking based > > > > > > > > > on my conditions for EOD day 1 then apply my > system for > > > > > day 2, > > > > > > > > > then do it > > > > > > > > > again for EOD day 2 and apply the resulting 500 > tickers> > > > to day > > > > > > > > > 3, etc.? > > > > > > > > > That would be awesome! > > > > > > > > > > > > > > > > > > Chris: This look like a good idea too, but what > do you > > > > > mean by > > > > > > > > > whether it is > > > > > > > > > on the list or not? I export all the results of the > > > > > daily scan > > > > > > > > > to a .csv > > > > > > > > > with the EOD data for the best 500 tickers, then... > > > > > what? It > > > > > > > > > sure looks > > > > > > > > > like a good idea if I can understand a little > better how > > > > > to do > > > > > > > > > it. But do I > > > > > > > > > have to do that for each day, and how to put the > > > information> > > > > > back into AB? > > > > > > > > > But so far your idea seems like the easiest to > do, even > > > > > if it > > > > > > > > > would take > > > > > > > > > forever for data going back to last year (but still, > > > taking> > > > > > forever is > > > > > > > > > better than losing all my money with an unsound > strategy)> > > > > > > > > > > > > > > > > Ken: " *Are you saying that you want to BACKTEST > > > 8000 symbols > > > > > > > > > and "select", > > > > > > > > > based on profitability, the top 500 most > profitable ones > > > > > to use > > > > > > > > > in your next > > > > > > > > > day's trading.*" No; I want to select the 500 tickers > > > > > which are > > > > > > > > > closest to > > > > > > > > > their 52 weeks HHV and use those tickers for > > > intraday trading > > > > > > > > > the next day. > > > > > > > > > It is easy to do in live trading, but I need to > find a > > > > > way to > > > > > > > > > include it in > > > > > > > > > backtesting so when I test my strategy I am not > > > using 8000 > > > > > > > > > tickers but > > > > > > > > > "only" the 500 closest to HHV based on their > > > daily(yesterday)> > > > > > EOD close. > > > > > > > > > > > > > > > > > > Thanks all for your help. I really feel like > this is going > > > > > > > somewhere!> > > > > > > > > > > Louis > > > > > > > > > > > > > > > > > > > > > > > > > > > 2008/7/13 glennokb : > > > > > > > > > > > > > > > > > > > > > > > > > > > If I understand what you are trying to do, maybe > > > this method > > > > > > > > > - Osaka! > > > > > > > > > > > > > > > > > > > > It creates a composite which you can reference > in your > > > > > > > system for > > > > > > > > > > backtesting > > > > > > > > > > > > > > > > > > > > Note that the 500 may not be precise due to data > > > holes (as > > > > > > > Graham> > > mentioned). Plus I just added HHV(H,100) > as an > > > > > > > example but > > > > > > > > > this need > > > > > > > > > > to be replaced with your rank. > > > > > > > > > > > > > > > > > > > > Also, check the categoryGroup or Watchlist is > > > correct in > > > > > > > the code. > > > > > > > > > > > > > > > > > > > > // Add To Composite RankValue based on Ranking > > > calculation.> > > > > > > /*------------------------ > > > > > > > > > > Notes: > > > > > > > > > > 1. Install OSAKA_105.zip ranking located here: > > > > > > > > > > http://groups.yahoo.com/group/amibroker-dll/ > > > > > > > > > > 2. Use CURRENT SYMBOL - an index > > > > > > > > > > (ie: symbol with no data holes). > > > > > > > > > > 3. Select date range > > > > > > > > > > 4. SCAN > > > > > > > > > > --------------------------*/ > > > > > > > > > > > > > > > > > > > > osInitialize(); > > > > > > > > > > #pragma nocache > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // User Variables - enter here > > > > > > > > > > // ---------------------------------- > > > > > > > > > > sGroup = 0; // set to desired watchlist. > > > > > > > > > > Rank_No = 500; // set the depth to rank to. > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // USER variables - Used for consistency & Ease > > > > > > > > > > // ---------------------------------- > > > > > > > > > > sov1 = 100; > > > > > > > > > > sov2 = 0; // not currently used > > > > > > > > > > sov3 = 0; // not currently used > > > > > > > > > > sov4 = 0; // not currently used > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // AddToComposite name > > > > > > > > > > // ---------------------------------- > > > > > > > > > > > > > > > > > > > > ATCName = "~HHV_Rank"; > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // Ranking Calculation > > > > > > > > > > // ---------------------------------- > > > > > > > > > > > > > > > > > > > > function Ranking(Sov1,Sov2,Sov3,Sov4) > > > > > > > > > > { > > > > > > > > > > > > > > > > > > > > TO = HHV(H,Sov1); > > > > > > > > > > > > > > > > > > > > return TO; > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // End Ranking Calculation > > > > > > > > > > // ---------------------------------- > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // End User Variables > > > > > > > > > > // ---------------------------------- > > > > > > > > > > StartBar = LastValue( ValueWhen( > > > Status("firstbarinrange"),> > > > > > > BarIndex() ) ); > > > > > > > > > > FinishBar = LastValue( ValueWhen( > > > Status("lastbarinrange"),> > > > > > > BarIndex() ) ); > > > > > > > > > > RankValue = 0; // initialise Rank Value array > > > > > > > > > > List = GetCategorySymbols( categoryGroup, sGroup); > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // Create Ranking Table > > > > > > > > > > // ---------------------------------- > > > > > > > > > > > > > > > > > > > > sRank = osTabCreate(); > > > > > > > > > > // Initialize Ranking Columns > > > > > > > > > > // Use loop to add columns to cover # of bars > ranked.> > > > > > > > > i = StartBar; > > > > > > > > > > while (i <= FinishBar) > > > > > > > > > > { > > > > > > > > > > osTabAddColumn("RROR", 1, sRank); > > > > > > > > > > i = i + 1; > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // Load table with Ranking data > > > > > > > > > > // ---------------------------------- > > > > > > > > > > for (j=0; (sTicker = StrExtract( List,j)) != > ""; j++) > > > > > > > > > > { > > > > > > > > > > SetForeign(sTicker); > > > > > > > > > > Rank = Ranking(Sov1,Sov2,Sov3,Sov4); > > > > > > > > > > k = StartBar; > > > > > > > > > > i = 0; > > > > > > > > > > while (k <= Finishbar) > > > > > > > > > > { > > > > > > > > > > osTabSetNumber(Rank[k], j, i, sRank); > > > > > > > > > > i = i + 1; > > > > > > > > > > k = k + 1; > > > > > > > > > > } > > > > > > > > > > RestorePriceArrays(); > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > // ---------------------------------- > > > > > > > > > > // Sorting rank calculations > > > > > > > > > > // ---------------------------------- > > > > > > > > > > > > > > > > > > > > k = StartBar; > > > > > > > > > > i = 0; > > > > > > > > > > while (k <= Finishbar) > > > > > > > > > > { > > > > > > > > > > osTabSort(sRank, i, False, True); > > > > > > > > > > RankValue[k] = osTabGet(Rank_No-1, i, sRank); > > > > > > > > > > i = i + 1; > > > > > > > > > > k = k + 1; > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > // --------------------------------------- > > > > > > > > > > // clean up - delete srank table > > > > > > > > > > // --------------------------------------- > > > > > > > > > > osTabDelete(srank); > > > > > > > > > > > > > > > > > > > > AddToComposite(rankvalue, ATCName, "x",23); > > > > > > > > > > > > > > > > > > > > Buy=Sell=1; > > > > > > > > > > Filter=1; > > > > > > > > > > AddColumn(RankValue, "Rank value",1.0); > > > > > > > > > > //END > > > > > > > > > > // --------------------------------------- > > > > > > > > > > > > > > > > > > > > Then place this code in your system for backtesting: > > > > > > > > > > > > > > > > > > > > HHV_Symbol = Foreign("~HHV_Rank","C"); > > > > > > > > > > HHV_Rank = HHV(H,100) > HHV_Symbol; > > > > > > > > > > > > > > > > > > > > Buy = HHV_Rank and cond1 and cond2 etc > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >