PureBytes Links
Trading Reference Links
|
Stephane,
You may create first a topList as a comma-sepatated string.
Then you can work with this [variable] topList and calculate averages
or whatever.
SetBarsRequired(1000,0);
// create first the topList as a comma-separated string
list = CategoryGetSymbols( categoryWatchlist, 2 );
g=-100;t="";topList="";i1=0;
nt=5;// calibrate here the topX
for(n=1;n<=nt;n++)
{
for( i = 0; ( sym = StrExtract( list, i ) ) != "" ; i++ )
{
SetForeign(sym);
x=RSI();//the individual metric
t=WriteIf(x>g,sym,t);i1=IIf(x>g,i,i1);
g=Max(g,x);
}
topList=topList+t+",";L0="";
for( i = 0; ( sym = StrExtract( list, i ) ) != "" ; i++ )
{
SetForeign(sym);
L0=L0+ WriteIf(i!=i1,sym+",","");
}
List=L0;g=-100;
}
// the topList is already created.
// It is a comma-separated string, different for every bar, ready for
further use
// The average of the already created topList follows
Av=0;m=0;
for( i = 0; ( symb = StrExtract( topList, i ) ) != "" ; i++ )
{
SetForeign(symb);
y=StochD();// select your array here
Av=Av+y;m=m+1;
}
Title="The top"+WriteVal(nt,1.0)+"list for "+Date()+" is
{"+topList+"}. The Average is "+WriteVal(Av/m);
The average y is, of course, independent of the ranking metric.
You may rank stocks according to their RSI() and then calculate their
average StochD().
Dimitris Tsokakis
--- In amibroker@xxxxxxxxxxxxxxx, Stephane Carrasset
<s.carrasset@xxxx> wrote:
> Herman ,
>
> Ok i'll try it and come back on this subject in few days. it that
> represents for me one of the key of a EOD winning trading system.
> I send the attachment comparing osake hermann and manual.
>
> Thanks for your help.
>
> > Stephane,
> >
> > The simplest way to debug any code is to insert _TRACE()
statements inside
> > the loops and use DebugView. That way you will get a complete
report
> > of each
> > step through the code and each step through each loop.
> >
> > herman
> >
> >
> >
> > -----Original Message-----
> > From: Stephane Carrasset [mailto:s.carrasset@x...]
> > Sent: Tuesday, August 03, 2004 2:38 PM
> > To: amibroker@xxxxxxxxxxxxxxx
> > Subject: Re: [amibroker] average of top ranked tickers in a
given
> > watchlist
> >
> >
> > Hermann & All,
> >
> > I have tried two differents codes to built an average of top n
tickers
> > of a watchlist ( looks like a real time composite)
> > unfortunately the two codes return wrong results.
> >
> > I have tried your code and a Tomasz code written with osaka
plugin (
> > the formulas are below )
> > I have reduced The watchlist zero to 5 tickers and want the
average
> > for an idicator of the 3 first tickers for each bar.
> > I have choosen the RSI ( a positive indicator)
> > So i can check manually the result
> >
> > for example the image attached speak itself for the last bar .
> >
> > I hope the next pastis.dll will save us... ^_^ ( thanks dingo
for all
> > these information)
> >
> >
> >
> >
> > FORMULAS
> >
> > //////////OSAKA////////////
> > /*
> > As for hints: you would do the following:
> > 1. iterate through watch list and store scores (in case of
osaka plugin
> > osTabSetNumber)
> > 2. find top ranked symbols (this can be done even entriely in
AFL as
> > Dimitris has shown,
> > or using Osaka plugin sort capability - osTabSort function)
> > 3. create average from top ranked symbols.
> > Below is the code that uses Osaka plugin 1.4.
> >
> > */
> >
> > osInitialize();
> > List = GetCategorySymbols(categoryWatchlist, 0 ); // <-- change
wl
> > number here
> > table=osTabCreate();
> > // setup columns
> > osTabAddColumn( "Ticker", 2, table, 25 );
> > for( j = 0; j < BarCount; j++ )
> > {
> > osTabAddColumn( "Score"+j, 1, table );
> > osTabAddColumn( "Close"+j, 1, table );
> > }
> > // CALCULATING SCORES and saving them to the table
> > for(i=0; ( ticker = StrExtract( List, i ) ) != ""; i++)
> > {
> > SetForeign(ticker);
> > osTabSetString( ticker, i, 0, table );
> > score = RSIa(C,14); // YOUR SCORE CALCULATION HERE
> > for( j = 0; j < BarCount; j++)
> > {
> > osTabSetNumber( abs( Nz( score[ j ] ) ), i, 2 * j + 1, table );
> > osTabSetNumber( Close[ j ], i, 2 * j + 2, table ); // for
calculation of
> > average
> > }
> > }
> > // you can export for debugging
> > // osTabExport( "test.csv", ",", table );
> > // SORTING SCORES AND finding top ranks:
> > average = 0; // init avarage
> > for( j = 0; j < BarCount; j++)
> > {
> > osTabSort( table, 2 * j + 1, False );
> > average[ j ] = 0;
> > topnum = 3; // TOPNUM
> > for( k = 0; k < topnum ; k++ ) //
> > {
> > fc = osTabGet( k, 2 * j + 2, table );
> > average[ j ] = average[ j ] + fc;
> > }
> > average[ j ] = average[ j ]/topnum; // calculate average from
top N
> > symbols at given bar
> > }
> > osTabDelete( table );
> > Filter=1;
> > AddColumn(average, "AVG top10 (each bar different)" );
> > Plot( average, "AVG top10 (each bar different)", colorRed );
> >
> > ///////////END OSAKA //////////////////////////
> >
> >
> > ///////////////HERMAN/////////////////
> > function GetScore( )
> > {
> > return RSIa(C,14); // Substitute your function
> > }
> >
> > function padString( InString, Length )
> > {
> > SpaceFill = " ";
> > SL = StrLen(InString);
> > NS=StrLeft(SpaceFill, Length-SL);
> > return NS+Instring;
> > }
> >
> > procedure getPositionScores( WatchList, BarNum, NumTickers )
> > {
> > TickerList= GetCategorySymbols( categoryWatchlist, WatchList);
> > CurrentTicker = Name();
> > TickerScoreList = "";
> >
> > // Create Scores array
> > for( n=0; (Ticker=StrExtract( TickerList, n)) != ""; n++)
> > {
> > SetForeign(Ticker);
> > TickerScores[n] = LastValue(ValueWhen(BarIndex() == BarNum,
> > SelectedValue(GetScore())));
> > TickerIndex[n] = n;
> > }
> >
> > TickerCount= n;
> >
> > // Sort Tickers by rank
> > for(i = n; i>=0; i--)
> > {
> > for (j = 1; j <= i; j++)
> > {
> > if (TickerScores[j-1] > TickerScores[j])
> > {
> > temp = TickerScores[j-1]; TickerScores[j-1] = TickerScores
[j];
> > TickerScores[j] = temp;
> > temp = TickerIndex[j-1]; TickerIndex[j-1] = TickerIndex[j];
> > TickerIndex[j] = temp;
> > }
> > }
> > }
> >
> > TopTickerList = TopTickerNum = TopTickerScore = "";
> > i=0; P=10; TopComposite = 0;
> > if( NumTickers > TickerCount ) NumTickers = TickerCount;
> >
> > // Format Top numTickers and create composite
> > for(n=TickerCount; n>=TickerCount-NumTickers; n--)
> > {
> > T5[i++] = TickerIndex[n];
> > TopTickerList = TopTickerList +
> > PadString(StrExtract(Tickerlist,T5[i-1]),P)+",";
> > TopTickerScore = TopTickerScore +
> > PadString(NumToStr(TickerScores[n],1.3),P)+",";
> > TopTickerNum = TopTickerNum +
> > PadString(NumToStr(TickerIndex[n],1.0),P)+",";
> > TopComposite = TopComposite + getScore();
> > }
> >
> > VarSet("TopComposite",TopComposite/numtickers);
> > StaticVarSetText("TopTickerList",TopTickerList);
> > StaticVarSetText("TopTickerScore ",TopTickerScore );
> > StaticVarSetText("TopTickerNum ",TopTickerNum );
> > }
> >
> > WatchList = Param("WatchList",0,0,1,1);
> > BarNum = SelectedValue(BarIndex());
> > NthScore = Param("Nth TickerDown",3,0,100,1);
> > // TOPNUM
> > getPositionScores( WatchList, BarNum, NthScore );
> > TopTickerScore =StaticVarGet("TopTickerScore ");
> > TopTickerList=StaticVarGet("TopTickerList");
> > TopTickerNum =StaticVarGet("TopTickerNum ");
> > Plot(VarGet("TopComposite") ,"",2,1);
> >
> > Title =
> > TopTickerList + "\n"+
> > TopTickerScore + "\n"+
> > TopTickerNum + "\n"+
> > "Number "+NumToStr(NthScore+1,1.0)+" from the Top:
> > "+StrExtract(TopTickerList ,NthScore);
> > //////////////////END HERMAN/////////////////////////////
> >
> >
> >
> >
> > Check AmiBroker web page at:
> > http://www.amibroker.com/
> >
> >
------------------------ 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/
|