PureBytes Links
Trading Reference Links
|
Tomasz,
I have tried like:
RES = LastValue( Valuewhen(L <= diff[ barindex ], XM) );
But, it gives error that array subscript has to be a number. Whereas,
barindex is array. As you suggested, I tried LastValue, but it will
give me values for very last element in array. I want expression to be
calculated for every element to get RES values. Is there a way to get
BarIndex() subscript as constant?
--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx>
wrote:
>
> Hello,
>
> ValueWhen as most AFL functions returns array. If you want
> single scalar you can use loop or lastvalue
>
> If you don't want loop (which is actually correct solution),
> you may wrap ValueWhen into LastValue.
>
> RES = LastValue( Valuewhen(L <= LastValue( Valuewhen( index ==
barindex, diff) ), XM) );
>
> Actually even better solution is to address (index) the array
directly:
>
> RES = LastValue( Valuewhen(L <= diff[ barindex ], XM) );
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: "jay_podda" <jay_podda@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Tuesday, January 01, 2008 5:57 PM
> Subject: [amibroker] Re: Valuewhen
>
>
> > Hi!
> >
> > The problem with Valuewhen is, in its expression I can only
compare as
> > many array I want to compare only for that array index. For
example,
> >
> > Current barIndex is 5415 and value of array C and Val is 49.5 and
1.5
> > respectively. Now suppose previous bar with barIndex 4719 has
array L
> > value of 47.75, which is lower than C-Val of current bar (49.5-1.
5=48)
> > . So, I want the value of XM[4719] in my RES array element of
> > RES[5415].
> >
> > I tried something like:
> >
> > diff = C-Val;
> > index = BarIndex();
> > RES = Valuewhen(L <= Valuewhen(index == barindex, diff), XM);
> >
> > I thought that inner valuewhen will be executed first, returning
> > constant value 48 for outer valuewhen and it will return correct
> > value. But, instead it returns value of XM at barindex 3411 where
the
> > whole valuewhen expression results in true - that is on that bar L
is
> > < that bars C-Val.
> >
> > I know that I can do this with loop, but I want to avoid it if
> > possible. If I replace Valuewhen(index == barindex, diff) with
> > constant 48, it returns correct value.
> >
> > So, I don't know if I am expecting ValueWhen to do what it's not
able
> > to. If not, is there any alternative without loop to achieve the
same?
> >
> >
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, ChrisB <kris45mar@> wrote:
> >>
> >> Jay
> >>
> >> OK just substitute your formula for Val...
> >>
> >> Val = (EMA(C,30))/30; // or whatever you like.
> >>
> >> If you are trying to set a threshold based on
> >>
> >> Threshold = Close today - Val;
> >>
> >> and then looking back in time to when a Low of any preceding bar
> > crossed
> >> that threshold,
> >>
> >> you will need Cross function, but ALSO if I understand you
correctly
> > you
> >> will likely also need to look into Looping.
> >>
> >> Looping still leaves me stumped but have a look at the files
section
> > for
> >> the articles
> >> Looping in Amibroker AFL.pdf and
> >> AFL Looping.pdf.
> >>
> >> Then just use Valuewhen to find the XM.
> >>
> >> Regards
> >>
> >> ChrisB
> >>
> >> jay_podda wrote:
> >> >
> >> > Chris,
> >> >
> >> > Thanks for replying so fast.
> >> >
> >> > In my case, Val is not constant, its array just like C. Also, L
> > might
> >> > not be ref-1, it can be more than 1 bars ago. And I want to
know
> > value
> >> > of XM corrosponding to bar on which L is less than current
bar's
> > C-
> >> > Val.
> >> >
> >> > Thanks again,
> >> > --- In amibroker@xxxxxxxxx ps.com
> >> > <mailto:amibroker%40yahoogroups.com>, ChrisB <kris45mar@ ..>
> > wrote:
> >> > >
> >> > > Hi Jay
> >> > >
> >> > > See if this is what you are looking for:
> >> > >
> >> > > Val = Param("Val", 1.5 , 1, 3, 0.1);
> >> > >
> >> > > XM = High;//for argument's sake.
> >> > >
> >> > > CminusVal = Close - Val;
> >> > > Cond1 = Ref(L,-1) < (C-Val);
> >> > > myXM= ValueWhen ( Ref(L,-1) < (C -Val),XM);
> >> > >
> >> > > // run the Exploration to check you values
> >> > > Filter = 1;
> >> > >
> >> > > AddColumn(Val, "Val", 1.2);
> >> > > AddColumn( XM,"XM", 1.2);
> >> > > AddColumn (C, "close",1.2) ;
> >> > > AddColumn(Ref( L,-1),"ref L",1.2);
> >> > > AddColumn( CminusVal,"ClessVal ",1.2);
> >> > > AddColumn( Cond1, "Cond1", 1.2);
> >> > > AddColumn ( myXM, "my XM", 1.2);
> >> > >
> >> > > // Plot these to visually check
> >> > > Plot( myXm,"myXM", colorBlue,1) ;
> >> > > Plot( Cond1, "Cond1",colorRed, styleHistogram |styleOwnScale)
;
> >> > >
> >> > > Regards
> >> > >
> >> > > ChrisB
> >> > >
> >> > > jay_podda wrote:
> >> > > >
> >> > > > I want to find value of array XM when L of very first
previous
> > bar
> >> > is
> >> > > > VAL amount less then current bar C.
> >> > > >
> >> > > > The problem with me is when I use valuewhen, in expression
if
> > I
> >> > use
> >> > > > any array for comparision, I can't compare with current
bar.
> > That
> >> > is,
> >> > > > if current bar C is 49.50 and VAL is 1.50, I want to get
value
> > of
> >> > XM
> >> > > > array when that previous bar's L is less than 48.
> >> > > >
> >> >
> >>
> >
> >
> >
> >
> > 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/
|