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@xxxxxxxxxps.com,
"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@x..>
> To: <amibroker@xxxxxxxxxps.com>
>
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@xxxxxxxxxps.com,
"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@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="";
>
>> > >
> >> >
> >>
> >
> >
> >
> >
> > 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
> >
> >
>
>
> >
> >
>