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

[amibroker] Re: Blind Freddy trend



PureBytes Links

Trading Reference Links

Herman,

I need all available values for the RS ranking for backtesting 
purpose. I could plot a chart showing the rs ranking if I need so.

My code performs the following loops:

the outer loop is for all 700 stocks in database to have their 
rankings;
the inner loop is for comparing one stock to every other 700 stocks

So, there are 700x700=490,000 loops. I don't know if we can reduce 
the number of loops here.

In addition, if stock quotes are 1000 bars in length, this ranking 
formula will have 490K x 1000 = 490 million calculations to complete.

It takes over 40 minutes to complete, which suggests about 10 
million RS calculations per minute. I don't know if this is a 
reasonable rate, but I just think 40minutes is too long.

Thank for your help.
Charles




--- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen" 
<psytek@xxxx> wrote:
> can you outline the action in a few words? I would save me from 
having to
> study your code in detail...
> 
> When you say  "I need to compare the price performance of each 
stock to all
> other
> stocks in order to rank the relative performance strength."
> do you mean a simple sort? The best of the group?
> 
> Do you want only the last value of the RS?
> Or do you want a chart showing historical RS?
> 
> I have had some codes that took many hours to complete and in the 
end I
> managed to have them run in minutes, it is worthwhile to explore 
different
> approaches.
> 
> herman
> 
> 
> 
> 
>  -----Original Message-----
> From: firstview2000 [mailto:firstview2000_1999@x...]
> Sent: Tuesday, August 03, 2004 12:47 AM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Re: any ideas to reduce runtime for the price 
RS
> ranking code?
> 
> 
>   Herman,
> 
>   I need to compare the price performance of each stock to all 
other
>   stocks in order to rank the relative performance strength. I an 
not
>   sure how I can avoid the StrExtract() to make comparisons with 
other
>   stocks in the database. Can you explain a bit more on how to 
avoid
>   the StrExtract() loop?
> 
> 
>   Thanks
> 
>   Charles
> 
>   --- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen"
>   <psytek@xxxx> wrote:
>   > The StrExrtract() is slow and you may do better to run a single
>   Explore of
>   > your 700 stock watch list, i.e. remove the StrExtract() loop 
from
>   your code.
>   > if your code only generates two result arrays you should be 
able
>   to use
>   > composites for those. Create you 700 watchlist and develop your
>   code one
>   > section at a time, i find using DebugView nice to give me a
>   relative
>   > indication of where the code takes too much time. I haven't
>   analyzed your
>   > code in detail but i expect getting rid of the StrExtract() 
will
>   speed up
>   > your code a hundred times, well, just being hopeful here ;-)
>   >
>   > herman.
>   >
>   >
>   >   -----Original Message-----
>   >   From: firstview2000 [mailto:firstview2000_1999@x...]
>   >   Sent: Sunday, August 01, 2004 6:46 PM
>   >   To: amibroker@xxxxxxxxxxxxxxx
>   >   Subject: [amibroker] any ideas to reduce runtime for the 
price
>   RS ranking
>   > code?
>   >
>   >
>   >   Hi,
>   >
>   >   With the following code, it takes me over 40 minutes to run a
>   >   database of 700 tickers. This code calculates 2 ratings, one 
for
>   >   stocks and one for indices.
>   >
>   >   Can anyone suggest some good ways to reduce the runtime ?
>   >
>   >   TIA.
>   >   Charles
>   >
>   >   /*
>   >   ** Price Relative Strength Ranking
>   >   **
>   >   */
>   >
>   >   // use this function to calculate self relative strength
>   >   // The funciton takes care of stocks with several quote 
length
>   >   // It returns the calculated relative strength array
>   >   function selfRelStrength (myArray)
>   >   {
>   >         sRelStren = IIf((IsNull(ROC(myArray, 260)) == False),
>   >
>   >                                       ROC(myArray,
>   >   260) + ROC(myArray, 195) + ROC(myArray, 130) + 2 * ROC
(myArray,
>   65),
>   >
>   >               IIf (      (IsNull(ROC(myArray, 195)) == False),
>   >
>   >
>   >         ROC(myArray, 195) + 2 * ROC(myArray, 130) + 2 * ROC
>   >   (myArray, 65),
>   >
>   >         2 * ROC(myArray, 130) + 3 * ROC(myArray, 65) ));
>   >
>   >
>   >         return sRelStren;
>   >   }
>   >
>   >
>   >   //replace your watchlist number with 0
>   >   //list = CategoryGetSymbols( categoryWatchlist, 0 );
>   >   list = CategoryGetSymbols( categoryMarket , 0 ) +
>   CategoryGetSymbols
>   >   ( categoryMarket , 1 );
>   >
>   >
>   >   Count = 0;
>   >   rank = 0;
>   >   relval = 0;
>   >   n = 0;
>   >
>   >   CountIdx = 0;
>   >   rankIdx = 0;
>   >   relvalIdx = 0;
>   >   nIdx = 0;
>   >
>   >   // price change for the current symbol
>   >   OwnVal = selfRelStrength(C);
>   >
>   >   for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
>   >   {
>   >
>   >         SetForeign(sym);
>   >
>   >         if (IsIndex()) {
>   >               relValIdx      = Nz(selfRelStrength(C));
>   >
>   >               RestorePriceArrays();
>   >
>   >               nIdx               = Nz(IIf(relValIdx != 0, 1, 
0));
>   >               // count if there is a price change
>   >
>   >               // now, add up counts for all symbols with price
>   >   change in the specified period
>   >               CountIdx = CountIdx + nIdx;
>   >
>   >               rankIdx = IIf (relValIdx > OwnVal, rankIdx + 1,
>   >   rankIdx);
>   >         }
>   >         else {
>   >
>   >               relVal      = Nz(selfRelStrength(C));
>   >
>   >               RestorePriceArrays();
>   >
>   >               n               = Nz(IIf(relVal != 0, 1, 0));
>   >               // count if there is a price change
>   >
>   >               // now, add up counts for all symbols with price
>   >   change in the specified period
>   >               Count = Count + n;
>   >
>   >               rank = IIf (relVal > OwnVal, rank + 1, rank);
>   >         }
>   >   }
>   >
>   >   rankPerc = int(100 * (Count - rank) / Count);
>   >
>   >   rankPercIdx = int(100 * (CountIdx - rankIdx) / CountIdx);
>   >
>   >   // filter out any stocks that dont have recent quotes (1 
month)
>   >   // this is done via comparing with $compx
>   >   CurrentDay = Now(3);            // get system date with 
dateNum
>   >   format
>   >   CurrDayAgo = CurrentDay - 100;
>   >
>   >   LastDay = LastValue(DateNum());
>   >
>   >   // donot rank DATAONLY tickers (in Market #3)
>   >   Filter = (CurrDayAgo <= LastDay) AND (MarketID() != 3);
>   >
>   >   if (Status("action") == 4) {
>   >   // code running in exploration
>   >   SetOption("nodefaultcolumns", True );
>   >   AddTextColumn(Name(),"Ticker");
>   >   AddColumn(Close,"Close", 1.2);
>   >   // AddColumn(Count,"count", 1.0);
>   >   AddColumn(rank,"rank#", 1.0);
>   >
>   >   AddColumn(Ownval,"Perf",1.2);
>   >   AddColumn(rankPerc,"rank%",1.0);
>   >   AddTextColumn(IndustryID(1),"Industry");
>   >
>   >   AddColumn(rankIdx,"rankIdx#", 1.0);
>   >   AddColumn(rankPercIdx,"rankIdx%",1.0);
>   >   }
>   >
>   >
>   >
>   >
>   >   Check AmiBroker web page at:
>   >   http://www.amibroker.com/
>   >
>   >   Check group FAQ at:
>   > http://groups.yahoo.com/group/amibroker/files/groupfaq.html
>   >
>   >
>   >         Yahoo! Groups Sponsor
>   >               ADVERTISEMENT
>   >
>   >
>   >
>   >
>   >
>   > ---------------------------------------------------------------
----
>   ---------
>   > --
>   >   Yahoo! Groups Links
>   >
>   >     a.. To visit your group on the web, go to:
>   >     http://groups.yahoo.com/group/amibroker/
>   >
>   >     b.. To unsubscribe from this group, send an email to:
>   >     amibroker-unsubscribe@xxxxxxxxxxxxxxx
>   >
>   >     c.. Your use of Yahoo! Groups is subject to the Yahoo! 
Terms
>   of Service.
> 
> 
> 
>   Check AmiBroker web page at:
>   http://www.amibroker.com/
> 
>   Check group FAQ at:
> http://groups.yahoo.com/group/amibroker/files/groupfaq.html
> 
> 
>         Yahoo! Groups Sponsor
>               ADVERTISEMENT
> 
> 
> 
> 
> 
> -------------------------------------------------------------------
---------
> --
>   Yahoo! Groups Links
> 
>     a.. To visit your group on the web, go to:
>     http://groups.yahoo.com/group/amibroker/
> 
>     b.. To unsubscribe from this group, send an email to:
>     amibroker-unsubscribe@xxxxxxxxxxxxxxx
> 
>     c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms 
of Service.
> 
> 
> 
> [Non-text portions of this message have been removed]



------------------------ Yahoo! Groups Sponsor --------------------~--> 
Make a clean sweep of pop-up ads. Yahoo! Companion Toolbar.
Now with Pop-Up Blocker. Get it for free!
http://us.click.yahoo.com/L5YrjA/eSIIAA/yQLSAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Check AmiBroker web page at:
http://www.amibroker.com/

Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
Yahoo! Groups Links

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

<*> 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/