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

Re: [amibroker] Re: AmiBroker, ^NDX, and TRIN



PureBytes Links

Trading Reference Links

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.



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