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

[amibroker] Re: Corr Matrix via Gfx functions



PureBytes Links

Trading Reference Links

OK, you're right. My ego overreacted and I got over it now. Let's 
move on.

PS: As long as my ego does not get in the way of trading I should be 
fine.

--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 
wrote:
>
> Hello,
> 
> No offence intended. When I see the thread in which "AB locks up" 
is repeated tens of times I
> have to come up with solution and explanation what was wrong with 
original code.
> 
> Each of my own releases and contributions, no matter how good it 
is, 
> faces tons of criticism, every hour, every day, 365 days a year  
and somehow I live with that.
>  
> Fortunatelly I receive also some good feedback. And you did get 
some positive ones too.
> 
> > (with explanation of how NOT to use it), 
> 
> As you may have noticed almost no-one is reading the docs.
> 
> Therefore it is better idea to implement limit inside code.
> 
> So instead of:
>  for( i = 0; (Ticker2 = StrExtract ( WLSymbols, i))!="" ;  i++ )
> 
> it would be better to limit directly in the code instead of asking 
users to remember
> not to run on watch list that have more than 50 symbols.
> 
> for ( x = 0 ; (Ticker = StrExtract ( WLSymbols, x ))!="" AND x < 
50 ;  x++ ) 
> 
> 
>  for( i = 0; (Ticker2 = StrExtract ( WLSymbols, i))!="" AND i < 50; 
i++ )
> 
> AA code I provided does not have two nested loops and user can 
press "Cancel" 
> during exploration so it is not the subject of above problem.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message ----- 
> From: "vlanschot" <vlanschot@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Wednesday, June 06, 2007 9:54 AM
> Subject: [amibroker] Re: Corr Matrix via Gfx functions
> 
> 
> > 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@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@> 
> > 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@xxxxxxxxxxxxxxx 
> >>   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@xxxxxxxxxxxxxxx 
> >>     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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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
> > 
> > 
> > 
> > 
> >
>




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/