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

Re: [amibroker] Re: Recursive Boolean Expressions... Possible?



PureBytes Links

Trading Reference Links

Generally speaking, if your variable requires a previous value of that
variable to determine current value then you need to use a loop
Other areas that can require looping is items such as trail stops,
where a subsequent Buy true condition can reset the trail price levels
to that newer bar


Of course there are built in functions that can do this within the
limits of their capabilities, eg AMA

In the case of this thread it was not entirely clear just having the
line of code as to what the intent was
var = condition AND NOT ref(var,-6); could be interpreted differently as either
var = condition and not ref(condition,-6) or in its raw state
in the raw state as shown it does require looping.
AMA function was mentioned somewhere in the thread, not even sure if
to say that it can be used for this. I am not at all clear on using
AMA as I have not yet found a description of exactly what the
algorithm is, I have only ever found examples of putting values into
it.


-- 
Cheers
Graham Kav
AFL Writing Service
http://www.aflwriting.com



2008/9/19 sidhartha70 <sidhartha70@xxxxxxxxx>:
> In answer to your question Brian, I ended up using a loop.
> Seeing the power of AFL, I often find myself resisting the use of
> loops, but then wrestling with the neccessary code to achieve my goals
> without using a loop.
> This seems to be a problem I hit quite consistently... which is a
> general uncertainty about whether I can achieve what I want without a
> loop or not. As it goes I usually waste time in that minor feedback
> loop for a while!!!
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "brianw468" <wild21@xxx> wrote:
>>
>> Thanks "GP", but I think your latest contribution muddies the waters
>> a bit. My understanding of the original question is that varx would
>> always be boolean - ie 1 or 0 (True or False)whereas your example
>> treats it as an integer variable.
>> The issue revolves around the real question - ie is the questioner
>> asking if a single line statement can contain a recursive element
>> (answer is probably NO) - or is the aim to solve a particular coding
>> problem without using a loop, where the answer could well be that
>> there are work-arounds. The guy who started this thread should
>> clarify what he is trying to do. Otherwise, further discussion is a
>> bit pointless.
>>
>> Brian
>>
>> --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@>
>> wrote:
>> >
>> > Brian,
>> >
>> > As you say, it depends on what the original intention was. There are
>> > two ways to interpret a statement like:
>> >
>> > varx = Ref(varx,-1) + 1;
>> >
>> > The first is the way it actually works now, where each element in
>> the
>> > new varx is the previous element in the old varx incremented by one.
>> > So if the original varx array has:
>> >
>> > varx[10] = 1
>> > varx[11] = 27
>> > varx[12] = 39
>> > varx[13] = 102
>> >
>> > The new varx array will have:
>> >
>> > varx[11] = 2
>> > varx[12] = 28
>> > varx[13] = 40
>> > varx[14] = 103
>> >
>> > The other way, which is what I was talking about (as I thought it
>> was
>> > what was being asked about), is where the value at each bar is
>> updated
>> > iteratively bar by bar as it would be in a loop. So if we assume
>> that
>> > varx[10] is still one (but it would depend on what came before),
>> then
>> > we would end up with:
>> >
>> > varx[11] = 2 (1+1)
>> > varx[12] = 3 (2+1)
>> > varx[13] = 4 (3+1)
>> > varx[14] = 5 (4+1)
>> >
>> > This is equivalent to the loop code:
>> >
>> > varx[i] = varx[i-1] + 1;
>> >
>> > Regards,
>> > GP
>> >
>> >
>> > --- In amibroker@xxxxxxxxxxxxxxx, "brianw468" <wild21@> wrote:
>> > >
>> > > Hi,
>> > > Can you not solve the problem by (effectively) re-defining varx
>> > > within the expression i.e.
>> > >
>> > > varx = C<Ref(L,-6) AND vary <6 AND NOT(C<Ref(L,-12) AND vary <6);
>> > >
>> > > Haven't tried this and the presentation could possibly be tidied
>> a
>> > > bit. (Depending on what, exactly, you are trying to achieve, the
>> very
>> > > last term might need to be "Ref(vary,-6)<6" or some such.
>> > >
>> > > Brian
>> > >
>> > >
>> > > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@>
>> > > wrote:
>> > > >
>> > > > It depends. The loop is general-purpose solution and works
>> always.
>> > > >
>> > > > In some cases loops can be eliminated using Cum(), ValueWhen(),
>> > > > AMA, AMA2.
>> > > >
>> > > > Best regards,
>> > > > Tomasz Janeczko
>> > > > amibroker.com
>> > > > ----- Original Message -----
>> > > > From: "sidhartha70" <sidhartha70@>
>> > > > To: <amibroker@xxxxxxxxxxxxxxx>
>> > > > Sent: Thursday, September 18, 2008 9:56 AM
>> > > > Subject: [amibroker] Re: Recursive Boolean Expressions...
>> Possible?
>> > > >
>> > > >
>> > > > > Can I ask the master...?? TJ... Does this kind  of expression
>> > > > > absolutely require a loop structure?
>> > > > >
>> > > > > TIA
>> > > > >
>> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney"
>> <gp.investment@>
>> > > 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@xxxxxxxxxxxxxxx, 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@xxxxxxxxxxxxxxx, "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
>> > > > >> > >>
>> > > > >> >
>> > > > >>
>> > > > >
>> > > > >
>> > > > >
>> > > > > ------------------------------------
>> > > > >
>> > > > > 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
>> > > > >
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>
>
>
> ------------------------------------
>
> 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
>
>
>
>

------------------------------------

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/