PureBytes Links
Trading Reference Links
|
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);
}
------------------------ Yahoo! Groups Sponsor --------------------~-->
Yahoo! Domains - Claim yours for only $14.70
http://us.click.yahoo.com/Z1wmxD/DREIAA/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/
|