[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Paul Ho: Memory Challenges with Great Ranking Tool



PureBytes Links

Trading Reference Links

At risk of muddying what appears to be a confused thread...

I believe that the point that he is trying to make is that he wants 
to run a backtest to *validate* his strategy, not as an integral 
*part* of his strategy.

His proposed process is:
- Select 500 symbols before market open (i.e. new set every day).
- Apply strategy only to those symbols, intraday.

His question is:
- How can he validate this process from a single backtest operation 
over the last [month, year, decade, ...] to see how well/poorly it 
would have performed?

The brute force answer would be:
- Apply the backtest over the entire 8000+ stocks, generating an 
ordered PositionScore in the range 1..8000+, then add custom 
backtester logic to cancel buy signals on a bar by bar basis for any 
symbol whose PositionScore was below 500 for that bar, since that 
symbol would not have been traded in practice.

Mike

--- In amibroker@xxxxxxxxxxxxxxx, ftonetti@xxx wrote:
>
> 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@xxxxxxxxxxxxxxx
> 
> > 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@xxxxxxxxxxxxxxx
> > >
> > > > 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@xxxxxxxxxxxxxxx
> > > > >
> > > > > > 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@xxxxxxxxxxxxxxx
> > > > > > >
> > > > > > > > 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@xxxxxxxxxxxxxxx
> > > > > > > > >
> > > > > > > > > > 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
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > 
> > >
> >
>



------------------------------------

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

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/