GP, Thanks for your detailed response here. I'm not sure I can see why the solution suggested by Graham won't work. Sorry if I'm being dense, but while you absolutely prove that,
temp = BarIndex() < 10; varx = temp AND NOT Ref(temp,-1); and varx = BarIndex() < 10 AND NOT Ref(varx,-1); are indeed not the same solution... it seems to me that the former does actually get me what I want. And does so by evaluating temp first. Again, I might be missing something here. I try and implement that solution into my code and let you know if I get the desired result. TIA --- In amibroker@yahoogroups.com, "gp_sydney" <[EMAIL PROTECTED]> wrote: > > Graham, > > That doesn't work either, in the general case, as varx is still not > dependent on previous values of varx, only on previous values of your > first "temp" statement. > > Consider the simpler case: > > temp = BarIndex() < 10; > varx = temp AND NOT Ref(temp,-1); > > temp now has the first 10 bars set to one and all other bars set to > zero. varx will have the first 11 bars set to zero, since Ref(temp,-1) > is one (actually the first bar will probably be null) and then all > subsequent bars will also be zero since temp is then zero. > Consequently, varx would be completely zero, except perhaps for the > first null. > > Assuming this did work as suggested, compare to: > > varx = BarIndex() < 10 AND NOT Ref(varx,-1); > > Actually if the first bar was null due to Ref(varx,-1) being null, > then varx would end up completely full of nulls (a problem to be wary > of with nulls in loops). But say the first bar ended up being zero > (perhaps the nz function was used), then the second bar would be one, > since BarIndex is less than 10 and Ref(varx,-1) refers to the first > bar which we just said was zero. The third bar would be zero, since > Ref(varx,-1) now refers to the second bar which we just set to one, > and the fourth bar would be one again. This would continue up to the > 10th bar, after which all bars would be zero due to the BarIndex term. > The first 10 bars of varx alternating between one and zero make the > result different to the first version. > > Regards, > GP > > > --- In amibroker@yahoogroups.com, Graham <kavemanperth@> wrote: > > > > try this > > temp = C<Ref(L,-6) AND vary<6; > > varx = temp AND NOT Ref(temp ,-6); > > > > -- > > Cheers > > Graham Kav > > AFL Writing Service > > http://www.aflwriting.com > > > > > > > > > > 2008/9/18 gp_sydney <gp.investment@>: > > > No, you can't do that as the right-hand expression is evaluated on the > > > whole array before anything is assigned to the left-hand variable. > > > That means that "varx" is effectively constant during the expression > > > evaluation for the whole array. It's essentially the same as: > > > > > > temp = IIf(C<Ref(L,-6) AND vary<6 AND NOT Ref(varx,-6),True,False); > > > varx = temp; > > > > > > To do what you are suggesting would require a loop. > > > > > > Regards, > > > GP > > > > > > > > > --- In amibroker@yahoogroups.com, "sidhartha70" <sidhartha70@> wrote: > > >> > > >> Hi All, > > >> > > >> Is it possible to have recursive boolean expressions...? i.e. the > true > > >> or false of the current value of the array depends on whether a > > >> previous value of the array is true or false. > > >> > > >> So for example, > > >> > > >> varx = IIf(C<Ref(L,-6) AND vary<6 AND NOT Ref(varx,-6),True,False); > > >> > > >> Would that work... or are recursive booleans like this not allowed?? > > >> > > >> TIA > > >> > > >