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