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

[amibroker] Using VIX as a trigger


  • To: <amibroker@xxxxxxxxxxxxxxx>
  • Subject: RE: [amibroker] Re: any ideas to reduce runtime for the price RS ranking code?
  • From: "Herman van den Bergen" <psytek@xxxxxxxx>
  • Date: Tue, 3 Aug 2004 05:22:41 -0700

PureBytes Links

Trading Reference Links

can you outline the action in a few words? I would save me from having to
study your code in detail...

When you say  "I need to compare the price performance of each stock to all
other
stocks in order to rank the relative performance strength."
do you mean a simple sort? The best of the group?

Do you want only the last value of the RS?
Or do you want a chart showing historical RS?

I have had some codes that took many hours to complete and in the end I
managed to have them run in minutes, it is worthwhile to explore different
approaches.

herman




 -----Original Message-----
From: firstview2000 [mailto:firstview2000_1999@xxxxxxxxx]
Sent: Tuesday, August 03, 2004 12:47 AM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: any ideas to reduce runtime for the price RS
ranking code?


  Herman,

  I need to compare the price performance of each stock to all other
  stocks in order to rank the relative performance strength. I an not
  sure how I can avoid the StrExtract() to make comparisons with other
  stocks in the database. Can you explain a bit more on how to avoid
  the StrExtract() loop?


  Thanks

  Charles

  --- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen"
  <psytek@xxxx> wrote:
  > 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 ;-)
  >
  > herman.
  >
  >
  >   -----Original Message-----
  >   From: firstview2000 [mailto:firstview2000_1999@x...]
  >   Sent: Sunday, August 01, 2004 6:46 PM
  >   To: amibroker@xxxxxxxxxxxxxxx
  >   Subject: [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 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);
  >   }
  >
  >
  >
  >
  >   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.



  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/