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 amibroker@xxxxxxxxxps.com,
"Tomasz Janeczko" <groups@xxx>
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: amibroker@xxxxxxxxxps.com
> 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: amibroker@xxxxxxxxxps.com
> 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="";
> > >
>
>
>