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="";