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

[amibroker] Re: Median and its Frequency



PureBytes Links

Trading Reference Links

This is just to say a big thank you

To read someone else's problem and then actually write a piece of 
workable code is really something extremely admirable.

I tried the code, it went on without errors................from then 
on the worries are my own. 

HOWEVER:  for theoritical interest...........it will be nice to find 
the median for the same set of data using Amibroker and the good old 
Excel. 

Thanks again for the help 

--- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@xxx> 
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/