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 amibroker@xxxxxxxxxps.com,
"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 amibroker@xxxxxxxxxps.com,
"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="";
>
>
>