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 [email protected], "vlanschot" <[EMAIL PROTECTED]> 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 [email protected], "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 [email protected], "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 [email protected], "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 [email protected], "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 [email protected], "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 [email protected], "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 > > > > > > > > > > > > > > > > > > > > > > > > > > > >
