PureBytes Links
Trading Reference Links
|
Dimitri, Hermann,
Thanks for all these codes, I'll "eat" them and come back to you.
Stephane
> 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/
|