PureBytes Links
Trading Reference Links
|
Ton,
Pleasure.
For all clarity, I'm using matrices mostly from a portfolio (risk)
management pov, with var-covar as starting point. Iow, I hardly look
at correlations in isolation since they don't tell anything about
causality (regressions, for example, are better suited for that.) Re
convergence of global correlations, there are all kinds of
economic/fundamental explanations for that, e.g. compression in
multiples.
Re randomness, one gets indeed quickly into the broader debate of
normal distribution, law of large numbers, fractals, and black swans.
Clearly one's time frame is relevant, e.g. lower frequency returns
have higher autocorrelations. One's choice of asset is important,
e.g. volatility is clustering, as Engel (GARCH) has shown. Etc, etc.
To a certain extent, this is indeed "academic", since in the final
analysis (as Grinold & Kahn argued), unless you're an indexer:
active management/trading = forecasting = assuming non-randomness
(with = you can read "implies").
Finally, as you may have noticed with this matrix-application, AB
slows down once the number of symbols becomes large, say > 100. I've
created similar functions for Explore and CBT by using VarSet to
calculate each "cell-array". In general, AB slows down a lot once you
start calculations on a cross-sectional basis. This is why I've asked
Thomasz to think about creating native matrix-afl functions. Vote for
it in the feedback centre.
PS
--- In amibroker@xxxxxxxxxxxxxxx, "Ton Sieverding"
<ton.sieverding@xxx> wrote:
>
> Really great stuff and thanks. Did you walk thru the iShares
country ETF's with the Bar Replay Tool already ? No better way to
show how the world is becoming more and more correlated ... BTW did
you ever try to create an AFL showing the degree of randomness for a
stock ? My problem here is the logical part of the story. How to
calculate the degree of randomness. I want to be able to separate
random from 'non' random time series and got stuck in the scientific
background ...
>
> Regards and thanks again, Ton.
>
>
> ----- Original Message -----
> From: vlanschot
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Monday, May 28, 2007 1:46 PM
> Subject: [amibroker] Corr Matrix via Gfx functions
>
>
> 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
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|