[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] Re: Easiest way to scan for rising/falling/flat stocks



PureBytes Links

Trading Reference Links

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@xxxxxxxxxxx]
  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/

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