[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Corr Matrix via Gfx functions



PureBytes Links

Trading Reference Links

Thanks for the quick reply. Some questions :
a) Any idea if there exists AFL code for GARCH etc. ?
b) Do you really think that there is a solution preventing AB or whatever ( Excel etc. ) environment to slow down the PC when doing this kind of calculations for more than 100 items ? I did some testing with your code on iShares ETF's - having a total of 27 ETF's in the WL - but the only real problem I get is the Param Window. When trying to modify the CorrLB value the slider hangs and it rather difficult to make the modification. But when running thru the ETF's with Bar Replay things work fine for me. Fast enough ...
 
Regards, Ton.
 
----- Original Message -----
From: vlanschot
Sent: Tuesday, May 29, 2007 1:39 PM
Subject: [amibroker] Re: Corr Matrix via Gfx functions

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@xxxxxxxxxps.com, "Ton Sieverding"
<ton.sieverding@...> 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@xxxxxxxxxps.com
> 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





SPONSORED LINKS
Investment management software Investment property software Investment software
Investment tracking software Return on investment software

Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___