Frankly speaking running correlation matrix inside INDICATOR window
is BAD idea. It makes no sense to put this into indicator code because
it will be re-computed with every refresh (mouse click on chart).

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: "jayhart_1972" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, June 05, 2007 10:29 PM
Subject: [amibroker] Re: Corr Matrix via Gfx functions


> Dave,
> 
> It'll take about a minute or so before AB will "unlock".  Once it 
> unlocks, right click on the pane and hit parameters.  From there you 
> can adjust the watchlist you want.  Make sure there aren't too many 
> tickers in the WL....i've found the optimal number of tickers is 
> between 5-10.  Great code, today I checked out the correlations 
> between Profunds' short real estate fund (SRS) with the 10 year bond 
> yield, some misc homebuilders stocks, a few REITs, and a couple real 
> estate indexes to make sure that the SRS was indeed negatively 
> correlated.  It was, but not as much as I thought!  about -0.35 on 
> avg.
> 
> Thanks again for sharing PS 
> 
> 
> 
> --- In [email protected], "David Fitch" <[EMAIL PROTECTED]> 
> wrote:
>>
>> 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