Guys, Guys!

I'm the one that said AB locks up. Said it twice on this forum and once to 
Support. Only one other guy said it was slow. And I've now learned why and have 
a coupla different fixes. So THANKS!

All these bruised ego's are helluava lot smarter'n me putting together some 
great stuff. Cut and paste can be quite tedious you know :)  

"Can we all just get along?"  Rodney King after LA riots said this I 
think....(didn't cut and paste this one)
Dave

 
  ----- Original Message ----- 
  From: vlanschot 
  To: [email protected] 
  Sent: Wednesday, June 06, 2007 8:06 AM
  Subject: [amibroker] Re: Corr Matrix via Gfx functions


  OK, you're right. My ego overreacted and I got over it now. Let's 
  move on.

  PS: As long as my ego does not get in the way of trading I should be 
  fine.

  --- In [email protected], "Tomasz Janeczko" <[EMAIL PROTECTED]> 
  wrote:
  >
  > Hello,
  > 
  > No offence intended. When I see the thread in which "AB locks up" 
  is repeated tens of times I
  > have to come up with solution and explanation what was wrong with 
  original code.
  > 
  > Each of my own releases and contributions, no matter how good it 
  is, 
  > faces tons of criticism, every hour, every day, 365 days a year 
  and somehow I live with that.
  > 
  > Fortunatelly I receive also some good feedback. And you did get 
  some positive ones too.
  > 
  > > (with explanation of how NOT to use it), 
  > 
  > As you may have noticed almost no-one is reading the docs.
  > 
  > Therefore it is better idea to implement limit inside code.
  > 
  > So instead of:
  > for( i = 0; (Ticker2 = StrExtract ( WLSymbols, i))!="" ; i++ )
  > 
  > it would be better to limit directly in the code instead of asking 
  users to remember
  > not to run on watch list that have more than 50 symbols.
  > 
  > for ( x = 0 ; (Ticker = StrExtract ( WLSymbols, x ))!="" AND x < 
  50 ; x++ ) 
  > 
  > 
  > for( i = 0; (Ticker2 = StrExtract ( WLSymbols, i))!="" AND i < 50; 
  i++ )
  > 
  > AA code I provided does not have two nested loops and user can 
  press "Cancel" 
  > during exploration so it is not the subject of above problem.
  > 
  > Best regards,
  > Tomasz Janeczko
  > amibroker.com
  > ----- Original Message ----- 
  > From: "vlanschot" <[EMAIL PROTECTED]>
  > To: <[email protected]>
  > Sent: Wednesday, June 06, 2007 9:54 AM
  > Subject: [amibroker] Re: Corr Matrix via Gfx functions
  > 
  > 
  > > Ouch, if that is not a slap in the face for contributing code 
  (with 
  > > explanation of how NOT to use it), I don't know what is.
  > > 
  > > Guess it was my last one.
  > > 
  > > PS
  > > --- In [email protected], "Tomasz Janeczko" <groups@> 
  > > wrote:
  > >>
  > >> Frankly speaking running correlation matrix inside INDICATOR 
  window
  > >> is a VERY VERY BAD idea. Gfx functions ARE NOT intended to be 
  used
  > >> in areas where better and less time-consuming methods exists for 
  > > years.
  > >> 
  > >> It makes no sense to put this into indicator code because
  > >> it will be re-computed with every refresh (mouse click on chart).
  > >> A rule for indicator code is that IT MUST be written so it 
  executes 
  > > BELOW 1 second.
  > >> Any formula that takes longer than 1 second to execute should 
  NOT 
  > > be used
  > >> as indicator.
  > >> 
  > >> Correlation matrices like that are WAY better to be done inside 
  AA 
  > > window.
  > >> 
  > >> Here is the formula (EXPLORATION):
  > >> 
  > >> symlist = CategoryGetSymbols( categoryWatchlist, 0 ); 
  > >> 
  > >> Filter = Status("lastbarinrange"); 
  > >> for( i = 0; ( sym = StrExtract( symlist, i ) ) != ""; i++ ) 
  > >> { 
  > >> Corr = Correlation( C, Foreign( sym, "C" ), 252 ); 
  > >> 
  > >> Clr = 32 + SelectedValue( Corr ) * 32; 
  > >> AddColumn( Corr, sym, 1.2, ColorHSB( 128+Clr, 255, 255 ) , 
  > > ColorHSB( Clr, 255, 255 ) ); 
  > >> } 
  > >> 
  > >> Best regards,
  > >> Tomasz Janeczko
  > >> amibroker.com
  > >> ----- Original Message ----- 
  > >> From: David Fitch 
  > >> To: [email protected] 
  > >> Sent: Tuesday, June 05, 2007 6:31 PM
  > >> Subject: Re: [amibroker] Re: Corr Matrix via Gfx functions
  > >> 
  > >> 
  > >> AB still locks up when I try this code. I cannot place it in a 
  > > pane. AB just stops. I'm wondering if it has anything to do with 
  the 
  > > use of "CategoryGetSymbols" function. According to help, it is 
  > > looking for watchlists 0 to 63. I have deleted the original 0 - 
  63 
  > > watchlists and replaced them with new ones that are 0-75. Could 
  not 
  > > using the original watchlists cause this problem?
  > >> Thanks
  > >> Dave
  > >> 
  > >> ----- Original Message ----- 
  > >> From: vlanschot 
  > >> To: [email protected] 
  > >> Sent: Tuesday, June 05, 2007 1:31 AM
  > >> Subject: [amibroker] Re: Corr Matrix via Gfx functions
  > >> 
  > >> 
  > >> Make sure you choose a watchlist (via 
  > >> Parameters) that has at least 2 but does not have too many 
  > > securities 
  > >> in it, say less than 50 if you use 1 pane.
  > >> 
  > >> Also, as is generally the case in AB, cross-sectional 
  analysis 
  > > (i.e. 
  > >> matrix calculations across stocks) is very computer 
  intensive.
  > >> 
  > >> PS
  > >> --- In [email protected], "jayhart_1972" 
  > > <jayhart_1972@> 
  > >> wrote:
  > >> >
  > >> > PS - thanks for sharing, looks interesting. BTW, has 
  anyone 
  > > got 
  > >> this 
  > >> > to work? When I applied the indicator I get nothing but a 
  > > blue 
  > >> screen
  > >> > 
  > >> > J
  > >> > 
  > >> > --- In [email protected], "vlanschot" <vlanschot@> 
  > > wrote:
  > >> > >
  > >> > > Thought I'd share the following code. 
  > >> > > 
  > >> > > PS
  > >> > > 
  > >> > > //Simple application of the new Gfx functions, basically 
  > >> calculating
  > >> > > //the correlation matrix of any WL of choice. You can 
  > > easily 
  > >> adjust
  > >> > > //this code to move to Var-Covar matrix, etc.
  > >> > > // PS 28/05/07
  > >> > > 
  > >> > > 
  > >> > > GfxSetOverlayMode(2); // Show Only Matrix
  > >> > > 
  > >> > > function NrSecs(ListType,ListNr)
  > >> > > {
  > >> > > global NrPosPrices;
  > >> > > 
  > >> > > if(ListType==1) ExtrList = CategoryGetSymbols
  > >> > > (categoryGroup,ListNr);
  > >> > > else if(ListType==2)ExtrList = CategoryGetSymbols
  > >> > > (categoryWatchlist,ListNr);
  > >> > > else if(ListType==3)ExtrList = CategoryGetSymbols
  > >> > > (categoryIndustry,ListNr);
  > >> > > 
  > >> > > NrSecurs=0;
  > >> > > NrPosPrices=0;
  > >> > > 
  > >> > > for( n=0; (Ticker=StrExtract( ExtrList, n))!= ""; n++)
  > >> > > {
  > >> > > NrSecurs=NrSecurs+1;
  > >> > > SetForeign(Ticker);
  > >> > > Prijs=C;
  > >> > > RestorePriceArrays();
  > >> > > NrPosPrices=NrPosPrices+IIf(Prijs!=Null AND 
  > >> > > Prijs>0,1,0);
  > >> > > }
  > >> > > return NrSecurs;
  > >> > > }
  > >> > > 
  > >> > > function PrintTxtInCell( Str, row, Col, CellWidth, 
  > > CellHeight, 
  > >> > > HorzAdj, VertAdj, Formaat ) 
  > >> > > { 
  > >> > > GfxDrawText( Str, Col * CellWidth + HorzAdj, row * 
  > > CellHeight + 
  > >> > > VertAdj, (Col + 1 ) * CellWidth, (row + 1 ) * 
  CellHeight, 
  > >> Formaat); 
  > >> > > } 
  > >> > > 
  > >> > > function PrintInCell( val, row, Col, CellWidth, 
  CellHeight, 
  > >> > HorzAdj, 
  > >> > > VertAdj ) 
  > >> > > { 
  > >> > > GfxDrawText( NumToStr(val), Col * CellWidth + HorzAdj, 
  row 
  > > * 
  > >> > > CellHeight + VertAdj, (Col + 1 ) * CellWidth, (row + 1 ) 
  * 
  > >> > > CellHeight, 1|32|4); 
  > >> > > } 
  > >> > > 
  > >> > > 
  > >> > > //CH = Param("CellH",20,10,100,5); 
  > >> > > //CW = Param("CellW",100,10,300,5);
  > >> > > HA=0;
  > >> > > VA=0;
  > >> > > 
  > >> > > String = "" ;
  > >> > > for ( x = 0 ; x < 200 ; x++ ) 
  > >> > > { 
  > >> > > WList = CategoryGetName( categoryWatchlist, x );
  > >> > > if (WList != "" )
  > >> > > {
  > >> > > String = String + WList +"," ;
  > >> > > // Creates a list of WatchLists, NOT symbols !!!
  > >> > > }
  > >> > > }
  > >> > > WatchList = ParamList ( "Watch List", String ); 
  > >> > > 
  > >> > > WLnr=CategoryFind(WatchList,categoryWatchlist);
  > >> > > WLSymbols = CategoryGetSymbols(categoryWatchlist,WLnr);
  > >> > > 
  > >> > > NrSymbs = NrSecs(2,WLNr);
  > >> > > 
  > >> > > CW= Status("pxwidth")/(NrSymbs+1);// In order to allow 
  > > Rowheadings
  > >> > > CH = Status("pxheight")/(NrSymbs+1);//Colheadings
  > >> > > 
  > >> > > //GfxSetTextAlign(6 | 24);
  > >> > > 
  > >> > > RetLB = Param("RetLB",1,1,100);
  > >> > > CorrLB = Param("CorrLB",30,5,256);
  > >> > > 
  > >> > > Start = BarCount-RetLB;
  > >> > > 
  > >> > > ActBar = Min(BarCount-1,LastValue(SelectedValue(BarIndex
  > > ())));
  > >> > > ActD = LastValue(SelectedValue(DateTime()));
  > >> > > 
  > >> > > GfxSelectFont( "MS Serif", CH/4,800);
  > >> > > PrintTxtInCell( "CorrM @:\n"+NumToStr
  (ActD,formatDateTime), 
  > > 0, 
  > >> > 0,CW, 
  > >> > > CH, HA, VA, 1);
  > >> > > 
  > >> > > for ( x = 0 ; (Ticker = StrExtract ( WLSymbols, x ))!
  ="" ; 
  > > x++ ) 
  > >> > > {
  > >> > > SetForeign(Ticker);
  > >> > > RetTick = ROC(C,RetLB);
  > >> > > FN = FullName();
  > >> > > RestorePriceArrays();
  > >> > > 
  > >> > > GfxSelectFont( "MS Serif", CH/4,800);
  > >> > > PrintTxtInCell( Ticker, 0, x+1 ,CW, CH, HA, VA,1|32|4 );
  > >> > > 
  > >> > > GfxSelectPen( colorBlue ); 
  > >> > > 
  > >> > > for( i = 0; (Ticker2 = StrExtract ( WLSymbols, i))!="" ; 
  > > i++ )
  > >> > > {
  > >> > > SetForeign(Ticker2);
  > >> > > RetTick2 = ROC(C,RetLB);
  > >> > > FN2 = FullName();
  > >> > > RestorePriceArrays();
  > >> > > 
  > >> > > if (Ticker2 == Ticker) Corr=1;
  > >> > > else Corr = Correlation(RetTick, RetTick2, CorrLB);
  > >> > > 
  > >> > > GfxSelectFont( "MS Serif", CH/4,800);
  > >> > > PrintTxtInCell( Ticker2, i+1, 0, CW, CH, HA, 
  > >> > > VA,1|32|4); 
  > >> > > GfxSelectFont( "MS Serif", CH/4);
  > >> > > Kleur = IIf(Corr[ActBar]>=0, colorGreen,colorRed);
  > >> > > GfxSetTextColor(Kleur);
  > >> > > PrintInCell( Corr[ ActBar ], i+1, x+1, CW, CH, HA, 
  > >> > > VA); 
  > >> > > //PrintInCell( Corr[ ActBar ] , i+1, x+1);
  > >> > > GfxSetTextColor(colorBlack);
  > >> > > 
  > >> > > GfxMoveTo( 0, (i+1) * CH); 
  > >> > > GfxLineTo( (x+2) * CW, (i+1) * CH );// Columns
  > >> > > } 
  > >> > > 
  > >> > > GfxMoveTo( 0, (x+1)*CH); // Move to end of last column
  > >> > > //GfxLineTo( 6 * CW, i * CH ); 
  > >> > > }
  > >> > > 
  > >> > > for( Col = 1; Col < NrSymbs+2; Col++ ) 
  > >> > > { 
  > >> > > GfxMoveTo( Col * CW, 0); 
  > >> > > GfxLineTo( Col * CW, (NrSymbs+1) * CH ); 
  > >> > > } 
  > >> > > 
  > >> > > 
  > >> > > Title="";
  > >> > >
  > >> >
  > >>
  > > 
  > > 
  > > 
  > > 
  > > Please note that this group is for discussion between users only.
  > > 
  > > To get support from AmiBroker please send an e-mail directly to 
  > > SUPPORT {at} amibroker.com
  > > 
  > > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
  > > http://www.amibroker.com/devlog/
  > > 
  > > For other support material please check also:
  > > http://www.amibroker.com/support.html
  > > 
  > > Yahoo! Groups Links
  > > 
  > > 
  > > 
  > > 
  > >
  >



   

Reply via email to