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 -----
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 -----
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 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=""; > > >
__._,_.___
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
SPONSORED LINKS
__,_._,___
|