PureBytes Links
Trading Reference Links
|
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 ;-)
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>herman.
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Tahoma
size=2>-----Original Message-----From: firstview2000
[mailto:firstview2000_1999@xxxxxxxxx]Sent: Sunday, August 01, 2004
6:46 PMTo: amibroker@xxxxxxxxxxxxxxxSubject: [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
arrayfunction 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 symbolOwnVal =
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
$compxCurrentDay = Now(3);
// get system date with dateNum
formatCurrDayAgo = 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
explorationSetOption("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:<A
href="">http://www.amibroker.com/Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
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
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 the Yahoo! Terms of Service.
|