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