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

[amibroker] Portfolio Testing and RANK() [was Bugged out ]



PureBytes Links

Trading Reference Links

Rich:

Like you, I am looking forward to a function like RANK(). Hopefully 
it will not be too long before AB gets new abilities for ranking and 
portfolio testing.

Adding items like RANK() will take AB to a new level of usefulness - 
but it will not be a trival task. As users we are fortunate that 
that a man with Tomasz's talents and dedication is developing AB. 

Some months ago, Tomasz explained that adding functions that do 
ranking is not a simple task. If my memory is correct, the challenge 
has to do with giving AB new procedures for processing data. Right 
now AB is oriented to look at only 1 stock at a time. This has 
several advantages for the user. First it allows AB to be very fast 
at drawing charts, calculating indicators, and doing backtesting on 
individual stocks. It means that AB can run very well on computers 
that do not have 2 or more GBs of RAM. There are advantages for disk 
storage as well.

In addition to AB, I use another stock program that has been 
oriented from the ground up for Ranking stocks. That program is 
lightening fast at ranking: less than 1 second to rank 7,000 stocks. 
Compare that to how long it takes an AB scan to rank 7,000 stocks. 
However, all is not perfect with my other program - it is VERY slow 
at charting. Unbelievably slow! The reason is its data base design 
was optimized for ranking. The by produce is slow charting (and slow 
indicator calcuations). 

The other by product of that program is limited stock history. To be 
optimized for ranking, the other program has all of its data in one 
large database. This approach quickly outgrows database limits. My 
other program recently had to be upgraded from a MS Access structure 
with a 1 GB limit to an MS SQL server structure (with a 2 GB limit - 
larger available for higher cost). The 1 GB database can not hold 
much more than 3 years of data. The newer one has a twice the limit, 
but appears to be less efficent in storage: it takes about 1/3 to 
1/2 GB/year of data, so its maximum is 4-5 years of data - not a lot 
more than what it replaced! Compare that to the virtually unlimited 
data that AB can hold due to its 1 file per stock approach to data 
storage. 

Over all, AB's approach is much to be preferred in my view. However, 
that approach is, at its heart, to treat one stock at a time, both 
for storage on the hard disk and for charting and for testing. 
Adding a function like RANK() that you suggest, would add new 
requirements to AB, including:

1. AB will have to syncronize dates between all the stocks -- it 
currently does not have to do this for most charting and testing, 
expect in a limited way when making a Foreign() call or using 
AddToComposite().

2. AB will have to have some new internal arrays to store the 
rankings. That will be mean least one array for every data bar, 
which might not sound like much if a user just wants the top 5, 10, 
20 or 50 rankings for each day (data bar), but it can add up very 
quickly if the user wants ALL the stocks ranked for every data bar. 
That could be a 2D array with 7,000 (stocks) in one direction and 
nearly 4,000 (15 years of 250 days) in the other: 28 million cells. 
And what if the user wants to test the interactions of 3 different 
ranking arrays. Demands for RAM (and CPU power for sorting) could be 
at a premium and intelligent programming a must. 

3. There are probably many more issues that would need to be 
overcome.

In short, as users we are fortunate that that a man with Tomasz's 
talents and dedication is developing AB. Adding items like RANK() 
will take AB to a new level of usefulness - but it will not be a 
trival task. 

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


like RANK()
--- In amibroker@xxxxxxxxxxxxxxx, "rlb21079" <rlb21079@xxxx> wrote:
> Thanks for the tips.  I have read the Users Guide twice and have 
> searched it for specifics often.  The ROC() is a useful funtion, 
but 
> right now will not be of much use.  My problem biggest problem has 
> been my inability to compare one ticker to another, or more 
> specifically one ticker's volume to the volume of all other 
tickers 
> in a market.  This seems to be the essential aspect to creating a 
> ranking of stocks, as per volume, change in price, ROC(), or 
> whatever.  There doesn't seem to be a function like say RANK(), 
the 
> parameters of which might be: "Ticker for 
> comparison," "Group/Market/Watchlist for comparing," "Array to 
> compare"
> 
> There, of course, could be many variations on a function such as 
this 
> and I haven't thought them through - but it would be useful.
> 
> It would allow for the creation of Composite Tickers based on such 
> popular measures as Most Active per Volume, per percentage change, 
> per percentage increase in volume, etc.
> 
> Thankyou for your time,
> -Rich
> 
> --- In amibroker@xxxxxxxxxxxxxxx, Udo.Harke@xxxx wrote:
> > Rich,
> > 
> > maybe you should devise a selection of those particular stocks 
> based on the AFL library function ROC() by comparing today's 
progress 
> ( > 0) versus the preceding day's change of price (> 0 too) 
expressed 
> as percentage?
> > 
> > Some information about this function is also contained in the 
> User's Guide which is a companion product issued with AmiBroker!
> > 
> > Best regards,
> > 
> > Udo
> > 
> >   -----Ursprüngliche Nachricht----- 
> >   Von: rlb21079 
> >   An: amibroker@xxxxxxxxxxxxxxx 
> >   Gesendet: Sonntag, den 25. Mai 2003 22:58 Uhr
> >   Betreff: [amibroker] Re: Bugged out (1)
> > 
> > 
> >   I'm very sorry to all reading my previous posts.  Esp. 
Tomasz.  I 
> >   wanted to create a composite ticker holding each day a single 
> value 
> >   comprised of the sum of the direction of change for the 15 
most 
> >   active stocks of that given day.  If the 15 most actively 
traded 
> >   stocks were all positive, then value would be +15, if all but 
one 
> >   then value would be +13...etc.  I inteded the requirement of 
the 
> >   rangefrom and rangeto dates to be the same b/c I figured I 
needed 
> to 
> >   run the explore once for every day I wanted to calculate the 
> number.  
> >   The code wasn't done, this was just the first couple steps to 
> isolate 
> >   the 15 most actives, but I really can't figure any other way.  
> I'll 
> >   get more practice with something easier and hopefully be able 
to 
> do 
> >   this later.
> >   All the best,
> >   Rich
> > 
> > 
> > 
> > 
> >         Yahoo! Groups Sponsor 
> >        
> >        
> > 
> >   Send BUG REPORTS to bugs@xxxx
> >   Send SUGGESTIONS to suggest@xxxx
> >   -----------------------------------------
> >   Post AmiQuote-related messages ONLY to: 
amiquote@xxxxxxxxxxxxxxx 
> >   (Web page: http://groups.yahoo.com/group/amiquote/messages/)
> >   --------------------------------------------
> >   Check group FAQ at: 
> http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
> > 
> >   Your use of Yahoo! Groups is subject to the Yahoo! Terms of 
> Service.


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get A Free Psychic Reading! Your Online Answer To Life's Important Questions.
http://us.click.yahoo.com/Lj3uPC/Me7FAA/CNxFAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

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