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" <jayhart_1972@yahoo.com>
To:
<amibroker@xxxxxxxxxps.com>
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 amibroker@xxxxxxxxxps.com,
"David Fitch" <davidfitch@...>
>
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: 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="";
>> > >
>>
>
>>
>
>
>
>
> 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
>
>
>
>
>