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

[amibroker] Re: Median and its Frequency



PureBytes Links

Trading Reference Links

That's correct. Both conditions have to be true for the loop to
continue, so either reaching its limit will terminate the loop.

As for there being a limit on the number of conditions, I'm not sure.
I don't know that any particular limit is officially defined, but the
AFL interpreter may have some internal limit.

GP


--- In amibroker@xxxxxxxxxxxxxxx, "vlanschot" <vlanschot@xxx> wrote:
>
> GP,
> 
> Thx for this. Interesting to see how you've created the second loop, 
> which I haven't seen before, but then again I'm not a programmer.
> 
> Am I correct in interpreting that it counts down both j and cnt until 
> either or both hit their limit, i.e. j >= 0 && cnt > 0 ? Is there a 
> limit as to how many "counters one can include in such a loop?
> 
> Thx,
> 
> PS  
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@> 
> wrote:
> >
> > Here's a function that I think will do what you want. I haven't 
> tried
> > it though, so there could be mistakes.
> > 
> > function MedianCount(data, period)
> > {
> >     medo = Median(data, period);
> >     medCnt = 0;
> >     for (i = 0; i < BarCount; i++)
> >     {
> >         cnt = period;
> >         for (j = i; j >= 0 && cnt > 0; j--, cnt--)
> >         {
> >             if (data[j] == medo[i])
> >                 medCnt[i]++;
> >         }
> >     }
> >     return medCnt;
> > }
> > 
> > If you only want to include periods with the full "period" bars, 
> start
> > the 'i' loop at "period" rather than zero. The "j >= 0" part of the
> > inner loop could then be dispensed with as well.
> > 
> > GP
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "meenhal" <meenhal@> wrote:
> > >
> > > 
> > > Your kind attention to detail must be gratefully admired 
> > > 
> > > 
> > > I used the following code 
> > > 
> > > 
> > > medo = Median(C,65);
> > > 
> > > medoo [0] = medo;
> > > for( i = 1; i < 65; i++ ) 
> > > { medoo[ i ] = medo; } 
> > > 
> > > freq=0;
> > > 
> > > for( i = 1; i < 65; i++ ) 
> > > { if ( C[i] == medoo[ i ] )
> > > 
> > >    freq= freq+1 ; )
> > > 
> > > First loop was an attempt to populate an array with the value of 
> > > median so that then the array [c] could be compared with it. Well 
> it 
> > > did not work. The only option left is to actually find the 
> numerical 
> > > value of the median for each ticker in the first instance and 
> then 
> > > mechanically plug in that number in the second loop to find the 
> > > frequency. This seems to be the dumbest way of programming. I am 
> > > sure there must be a better way. 
> > > 
> > > More help please
> > > Ta
> > > 
> > > 
> > > 
> > >  
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@> 
> > > wrote:
> > > >
> > > > Firstly, loops should go from zero to last-1 rather than one to 
> > > last.
> > > The first FOR loop was to populate a dummy array with > Also, if 
> > > you're going to use an absolute value for the limit (ie. the
> > > > 260 in your example) then you need to add checking for that 
> being 
> > > out
> > > > of range of the current chart. Arrays are only dimensioned up to
> > > > BarCount, whatever that is for the current chart, so if 
> BarCount is
> > > > less than 260 in this case you'll have a problem.
> > > > 
> > > > Finally, I don't think that logic will give you what you want. 
> That
> > > > just checks, for each bar, if that bar is the same as the 
> median of
> > > > the last 260 days and then adds them up, which is what I 
> mentioned
> > > > before. I gather you want a value at each bar of the number of 
> > > bars in
> > > > the last interval that match the median over the same interval. 
> I
> > > > think you'll need nested loops for that, one to go through the 
> > > bars,
> > > > and another inside it to count back through the previous 
> interval 
> > > (eg.
> > > > 260) number of bars, with appropriate range checking.
> > > > 
> > > > Regards,
> > > > GP
> > > > 
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "meenhal" <meenhal@> wrote:
> > > > >
> > > > > Thanks for you help
> > > > > 
> > > > > I do not have much of a code....at least not for this segment
> > > > > 
> > > > > Median is found using the standard AFL function
> > > > > 
> > > > > I can now envisage the following pseudocode
> > > > > 
> > > > > medd = median(c,260)
> > > > > 
> > > > > for k = 1 to 260
> > > > >         medo [k] = medd
> > > > > next
> > > > > 
> > > > > freq = 0
> > > > > for j = 1 to 260          
> > > > >       if c[i] = medo[i] then feq = freq +1
> > > > > next
> > > > > 
> > > > > addcolumn  frequency
> > > > > 
> > > > > Thanks for pointing the = and ==
> > > > > 
> > > > > 
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" 
> <gp.investment@> 
> > > > > wrote:
> > > > > >
> > > > > > > if c [i] = median (close,60)
> > > > > > 
> > > > > > That won't work because you're trying to compare a number 
> with 
> > > an
> > > > > > array of numbers, plus you need the relational equals 
> operator 
> > > (==)
> > > > > > rather than the assignment one (=). Read the median array 
> into 
> > > a
> > > > > > variable first and then use indexing on that:
> > > > > > 
> > > > > > medc = median(close,60);
> > > > > > if (c[i] == medc[i])
> > > > > > 
> > > > > > However, without seeing the rest of your code, I have a 
> > > feeling you
> > > > > > still won't end up with what you're expecting. This is 
> > > comparing 
> > > > > the
> > > > > > current bar's close with the median of the previous 60 bars 
> > > > > (counting
> > > > > > the current one), so if you only count those, it will give 
> you 
> > > a 
> > > > > count
> > > > > > of how many bars had a close equal to the median of the 
> last 
> > > 60 
> > > > > bars.
> > > > > > If at each bar you want a count of how many bars in the 
> > > previous 60
> > > > > > were the same as the median over that range, then the 
> > > calculation 
> > > > > will
> > > > > > be different, probably involving nested loops.
> > > > > > 
> > > > > > GP
> > > > > > 
> > > > > > 
> > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "meenhal" <meenhal@> 
> wrote:
> > > > > > >
> > > > > > > To set an entry point, I am trying to find price 
> deviations 
> > > from 
> > > > > mean 
> > > > > > > and median for different intervals.
> > > > > > > 
> > > > > > > All is easy except:  I can not determine the frequecy of 
> > > median 
> > > > > i.e. 
> > > > > > > the number of occurences when the price was median during 
> > > the 
> > > > > inteval.
> > > > > > > 
> > > > > > > median (close,260) will give me the median closing price 
> for 
> > > 260 
> > > > > bars 
> > > > > > > but it does not tell whether this prices occured 10 tims 
> or 
> > > 88 
> > > > > times.
> > > > > > > 
> > > > > > > I tried to use the for loop with if c [i] = median 
> > > (close,60) 
> > > > > but 
> > > > > > > AFL's handling of arrays does not permit such an attepmt.
> > > > > > > 
> > > > > > > Can anyone please help. Thanks in advance
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>




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/