Hi Brian, 

Hmmmm... could be a typo in the manual
I certainly had no idea that MA() could do this.

    myX = MA(C, 1);                  // AFL happy
    myX = Median(C, 1);             // AFL happy
    myX = MA(C, Cum(1));        // AFL happy
    myY = Median(C, Cum(1));   // "Argument has incorrect type"


You must have a huge amout of hands on with AFL!
Some of the functions in AFL take either arrays, or 
numbers, and a few seem to be able to take both:
Not sure what language AB is written in suspect its
probably C++ which allows you to do this sort of 
thing.

    Looking at the entry for "int()"

    INT
    − integer part
    SYNTAX int( NUMBER )
                     int( ARRAY)

    I suspect the manual entry for MA() should be the
    same!

I'm currently looking at the "_TRACE()" command to try
and garner some insight into the execution process.

I'm keener on your suggestion regarding using the arithmetic
now that I now that MA(array, array) works! And yes,
I'd prefer the faster option every time! But I also like to
think that I'll find other, and perhaps more meaningful
"profile attributes" which have nothing to do with the 
old distributions! That's why I've been looking for a
generic solution

The R package looks intriging too. But I still have to
learn how AB works in it's basic mode before I 
unduly complicate my life with other packages etc...

The following construct works - but it is very, very
slow.....

function myMedian( array, i )
    {       
        x = array[i];
        return x;
    }

    mp2   = 1;
    for( i = 1; i < BarCount; i++ )         
    { 
        mp2[ i ] = myMedian(Median(C,i),i);    
    }


Thanks for your help once again!

Robert Z




________________________________
From: brian_z111 <[email protected]>
To: [email protected]
Sent: Friday, 5 June, 2009 5:00:41 PM
Subject: [amibroker] Re: Newbie Array  / Looping Question





<snip>Median( ) wants a number as its second argument. (The manual is 
clear!)<snip>

To help me understand next time ... how did you decide that Median)array, 
period) wants a number from what is written in the manual?

MA(array,periods) ; accepts an array and the only differential in the manual is 
plurality of the periods (do you think Tomasz intended the plurality to be 
significant? )

MA(C,Cum(1)) ;//this is OK?

<snip> When are the "for" loops executed in the block of code? Knowing some 
more about the AFL execution order might be helpful.<snip>

Sorry, don't know anything about execution.

Recently Siddhartha said that learning the AFL execution was the best thing we 
can ever do ... I don't know where to find it though.

You are not keen on my suggestion that calcs for the moments are arithmetic and 
so should fly in AFL without looping?
I am a lay programmer but my instinct is to start there - looping will slow you 
down in RT indicators?? ?

Plan C - use the RMath Plugin ... advanced stats available there.

--- In amibro...@yahoogrou ps.com, i cs <ics4...@... > wrote:
>
> Hi Brian,
> 
> Thanks for getting back to me.
> 
> Unfortunately, Cum() returns array, Median() wants a number as its 
> second argument. (The manual is clear!)
> 
> I used median as an example because it's relatively easy to understand,
> and I will be using it, but I will also be plotting the growth factor in the 
> same
> way - as well as the other moments of distribution - just one step at a time.
> 
> Its possible to derive a lot of the moments of distribution from other the 
> parts, but it comes back to the same problem - I'd have to write functions 
> to derive kurtosis, mode etc.
> 
> Some of the historic emails in the group included the following solutions:
>   - code the functions myself - which I'm trying to avoid.
>   - create a dynamic set of variables using VarSet - this seems a bit brutish
>      especially if you are playing with a number of "profile attributes".
> 
> When are the "for" loops executed in the block of code? Knowing some more
> about the AFL execution order might be helpful. Might go down that track for
> a while....and check out the other 1500 references to "loop" in the email 
> group.
> 
> Thanks again...
> Robert Z
> 
> 
> 
> 
> 
> ____________ _________ _________ __
> From: brian_z111 <brian_z111@ ...>
> To: amibro...@yahoogrou ps.com
> Sent: Friday, 5 June, 2009 2:57:43 PM
> Subject: [amibroker] Re: Newbie Array  / Looping Question
> 
> 
> 
> 
> 
> I am not sure about this one now ... I think we need some help from the 
> code/maths experts.
> 
> Median() doesn't appear to accept an array as input (the manual doesn't say 
> one way or another?) ... it might be demanding a constant (that wouldn't 
> surprize me since mean/mode/median are moments of a distribution so massive 
> calcs might be required to find them for skewed dists without having the 
> distriution at hand) ... AB doesn't do that distributions off the shelf ... 
> not AFAIK.
> 
> I think you can calc Skewness from N, StDev, arithmetic mean etc ... once you 
> have S you can back calc the Median or the Mode from the Mean and the StDev.
> 
> Another brute method might be an algorithmic trial and error test for the 
> Mode (loops required)... I forget what it is called in programming but if the 
> value to the right of the mean has a higher frequency than the mean value the 
> mode is somewhere to the right .. by halving the range between the freq test 
> you will zero in on the mode and then you can calc the median by using the 
> mean and mode values..... AFAIK array processing will always be more timely 
> than looping though.
> 
> --- In amibro...@yahoogrou ps.com, "brian_z111" <brian_z111@ ...> wrote:
> >
> > Median(array, periods)
> > 
> > I assume you are measuring, say ROC(C,1) or similar for % price change.
> > I guess you just need to get a progressive count, of the number of ROC 
> > datapoints, to make the function work.
> > 
> > Things to look out for (if the AB function is going to work for you):
> > 
> > - every element in the array you are measuring needs a value (nulls or 
> > zeros might trip up the math e.g. STDev, mean) ... I guess if you are 
> > interested in daily bars you will first create a daily ROC(C,1) or ROC of 
> > some other point of interest from within the bar HL range
> > - the number of periods, in your array count, is range dependent i.e. in AB 
> > it can vary with mode ... QuickAFL can be used to change the range (in AA) 
> > and QickAFL will autoset the range in charts (or might ... I am not the 
> > full bottle on QuickAFL but there is an article by Tomasz in the AB 
> > KnowledgeBase)
> > - BarsSince type functions might count one less period than you expect ... 
> > depending if the function is a zerobased count and how you want to use the 
> > count.... sometimes I have to add 1 to make the adjustment manually
> > - BarIndex() is the bar by bar count since the start of the range, where 
> > range == the range of the database ... AB gets a bit tricky with when and 
> > where it uses the complete database range as the default .... probably to 
> > do with fast array processing etc ...sometimes I prefer to use Cum(1) as my 
> > count ... I seem to get more visually stable indicators in the charts 
> > because it doesn't reference the chart range it references from the start 
> > of the database.
> > 
> > - so, making a few assumptions, and if Median works for you as required, 
> > Median(ROC(C, 1),Cum(1) ); // because Cum(1) is progressive and counts bars 
> > from the beginning
> > 
> > - mathematically I find ROC is not as stable as GrowthFactor where ROC == 
> > 3% is expressed as 1.03
> > 
> > Haven't done it though.
> > 
> > If that doesn't work maybe someone else in the forum knows more.
> > 
> > In case of emergency RVince book two has the maths for median, mode, mean 
> > interelationships (possibly for advanced, or custom use, you could 
> > calculate the median from other values).... mean == median == mode for 
> > normal distributions (you should be so lucky!)
> > 
> > 
> > 
> > 
> > --- In amibro...@yahoogrou ps.com, "ics4mer" <ics4mer@> wrote:
> > >
> > > Hi all,
> > > 
> > > I'm after a general form for doing a particular type of algorithm 
> > > in AFL - and I'm happy to admit that I might be going about it 
> > > the totally wrong way...
> > > 
> > > I am attempting to extract an evolving "profile" of a stock over 
> > > time.
> > > 
> > > Using "median" as an example, lets say I want calculate the median
> > > percentage price change for the life of the stock. To give an 
> > > example:
> > > 
> > >     The 1st trading day - do nothing.
> > >     The 2nd trading day - calc median for 2 days
> > >     The 3rd trading day - calc median for 3 days
> > >     Last traded day     - calc median for n days.
> > > 
> > > For simple functions, I have used a construct similar to;
> > >     for ( i=0; i < BarCount; i++ ){
> > >        myArray[ i ] = simpleFunc( i );
> > >        .....
> > >     }
> > > 
> > > However, in this case, I would have to write a new median function,
> > > and this is irritating, since there is a perfectly good one 
> > > taunting me from the users manual! That's why I suspect that I 
> > > might be doing something in the wrong way.
> > > 
> > > Any help or pointers would be much appreciated. A pointer to 
> > > a message in the user group would be fine too! ( Yes I am still
> > > trawling through the email group as I write this....)
> > > 
> > > TIA
> > > 
> > > Robert Z
> > >
> >
> 
> 
> 
> 
> 
>       Need a Holiday? Win a $10,000 Holiday of your choice. Enter 
> now.http://us. lrd.yahoo. com/_ylc= X3oDMTJxN2x2ZmNp BF9zAzIwMjM2MTY2 
> MTMEdG1fZG1lY2gD VGV4dCBMaW5rBHRt X2xuawNVMTEwMzk3 NwR0bV9uZXQDWWFo 
> b28hBHRtX3BvcwN0 YWdsaW5lBHRtX3Bw dHkDYXVueg- -/SIG=14600t3ni/ **http%3A/ 
> /au.rd.yahoo. com/mail/ tagline/creative holidays/ *http%3A/ /au.docs. 
> yahoo.com/ homepageset/ %3Fp1=other% 26p2=au%26p3= mailtagline
>


   


      Need a Holiday? Win a $10,000 Holiday of your choice. Enter 
now.http://us.lrd.yahoo.com/_ylc=X3oDMTJxN2x2ZmNpBF9zAzIwMjM2MTY2MTMEdG1fZG1lY2gDVGV4dCBMaW5rBHRtX2xuawNVMTEwMzk3NwR0bV9uZXQDWWFob28hBHRtX3BvcwN0YWdsaW5lBHRtX3BwdHkDYXVueg--/SIG=14600t3ni/**http%3A//au.rd.yahoo.com/mail/tagline/creativeholidays/*http%3A//au.docs.yahoo.com/homepageset/%3Fp1=other%26p2=au%26p3=mailtagline

Reply via email to