PureBytes Links
Trading Reference Links
|
Here's another idea. This captures
the barindexes for the given condition within the period and then returns
how many bars ago
it occurred for the first time within the period
(or 'last' time using Sidartha's terminology).
SetBarsRequired(99999,99999);
cond=<your condition>
//cond=Cross(MACD(12,26),Signal(12,26,9)); // tested with
this condition
periods=Param("Periods",10,1,200,1);
b_index=iif(cond, BarIndex(),barcount); //
barcount is 1 greater than the max barindex() so the llvbars test below will
always work.
// if the condition hasn't occurred within the
period, this sets barsback to null. Otherwise it would stay at
periods - 1
// until the condition occurred again.
barsback=iif(BarsSince(cond) < periods,
llvbars(b_index,periods), null);
plot(barsback,"Barsback", colorblue,
styleline);
//plot(b_index,"b_index", colorred,
styleline+styleownscale); // uncomment to see the actual barindex
values.
Regards,
Bob
----- Original Message -----
Sent: Tuesday, January 13, 2009 11:42
AM
Subject: [amibroker] Re: Finding the last true
value in an array...
> This thread was getting long :) Try this - > >
// Lookback interval - example covers > 1 week > window =
8; > // Test with true condition = first of week > Condition =
IIf( DayOfWeek() < Ref( DayOfWeek( ), -1 ), 1, 0 ); > bi = BarIndex(
); > > //-- THIS DOES THE WORK
--------------------------------------------- > NOTFOUND = -1; >
// Get the bar index of first true condition in interval > resultbi
= LLV( IIf( Condition, bi, 1e99 ), window ); > // Flag no true
condition found > resultbi = IIf( resultbi == 1e99, NOTFOUND, resultbi
); > > // Get the number of bars back > barsback = IIf(
resultbi == NOTFOUND, NOTFOUND, bi - resultbi ); >
//-------------------------------------------------------------------- >
> Filter = 1; > AddColumn( bi, "BARINDEX", 5.0 ); >
AddColumn( Condition, "CONDITION", 1.0 ); > AddColumn( window, "WINDOW",
5.0 ); > AddColumn( bi - window + 1, "LOOKBACK TO BAR", 5.0 ); >
AddColumn( resultbi, "RESULT BARINDEX", 1.0 ); > AddColumn( barsback,
"BARS BACK TO RESULT", 5.0 ); > > > > > --- In
amibroker@xxxxxxxxxxxxxxx,
"sidhartha70" <sidhartha70@xxx> wrote: >> >> Thanks Ed.
I'll take a look at this idea. >> >> --- In amibroker@xxxxxxxxxxxxxxx, "Edward
Pottasch" <empottasch@> >> wrote: >> > >>
> hi, >> > >> > you could shift the
array. >> > >> > for instance jj1 is an array with 1
and 0 >> > >> > then: >> > >>
> // calculate bars since last occurunce of 1 >> > kk1 =
BarsSince(jj1); >> > // shift jj by that amount and so remove the
last occurrence of 1, >> save result in jj2 >> > jj2 =
Ref(jj1,-LastValue(kk1)-1); >> > // now shift jj2 back by that
amount and save in jj3 >> > jj3 = Ref(jj2,LastValue(kk1)+1);
>> > // now calculate bars since the prior to last occurence of 1
>> > kk2 = BarsSince(jj3); >> > WriteVal(kk1);
>> > WriteVal(kk2); >> > >> >
>> > rgds, Ed >> > >> > >> >
>> > ----- Original Message ----- >>
> From: sidhartha70 >> > To: amibroker@xxxxxxxxxxxxxxx >>
> Sent: Tuesday, January 13, 2009 3:28 PM >>
> Subject: [amibroker] Re: Finding the last true value in an
array... >> > >> > >> > Well
lets just look at a pretend array... I think that puts it > in
its >> > simplest context.... >> >
>> > Effectively what I'm trying to do is replicate
EXACTLY the >> > functionality of BarsSince() but
instead of starting from the most >> > current array
element and moving backwards, I want to start a >> >
specified number of intervals back and move forward... >> >
>> > Obviously when you use BarsSince() it returns an
array... in the > same >> > way, I'd like my
function to return an array. Looking at this > example, >>
> ans assuming that the array before x simply has zeros in
it... >> > >> >
0,1,0,0,0,0,0,1,0,0 >> >
x.................Now >> > >> >
BarsSince(array) would produce (I think), >> > >>
> 0,0,1,2,3,4,5,0,1,2 >> > >>
> I want a function that will work from x to Now, and
return, >> > >> >
0,0,1,2,3,4,5,6,7,8 >> > >> > I can do this
with a loop obviously (but I hate loops). This is a >> >
problem I've hit before. I'd just love to know if there's an array >>
> solution... >> > >> >
TIA >> > >> > --- In amibroker@xxxxxxxxxxxxxxx,
"wavemechanic" <timesarrow@> > wrote: >> >
> >> > > Don't have time now to think about it and
it would be easier > if you >> > posted the code
instead of working with a moving target. > However, off >>
> the top of my head you might be able to avoid looping by using
brute >> > force. For example, if the range is 5 bars
then you could test the >> > 5th bar back with
iif(barssince(x) == 5, and if that is negative > then >>
> do the same for the 4th bar back, etc. >>
> > ----- Original Message ----- >> >
> From: sidhartha70 >> > > To: amibroker@xxxxxxxxxxxxxxx >>
> > Sent: Tuesday, January 13, 2009 8:04 AM >>
> > Subject: [amibroker] Re: Finding the last true value in
an > array... >> > > >>
> > >> > > SelectedValue() works
Bill... Thanks. >> > > >> >
> However, the problem I'm having is that I'm using this in AFL >>
code and >> > > I want it to complete the historical
array if you like, not just >> off a >> > >
SelectedValue() but with each value of Sum(x,range) as ir >
changes... >> > > which it's looking like is not
possible. >> > > >> > >
Horribly I might have to use a loop. Errrgg. >> > >
>> > > --- In amibroker@xxxxxxxxxxxxxxx,
"sidhartha70" <sidhartha70@> >> wrote: >>
> > > >> > > > Nope, I've
tried it Bill... >> > > > >>
> > > I get an Error 5, Argument #3 has incorrect type on
the >> ValuneWhen() >> > > >
line... >> > > > >> >
> > >> > > > >> >
> > --- In amibroker@xxxxxxxxxxxxxxx,
"wavemechanic" <timesarrow@> >> >
wrote: >> > > > > >> >
> > > Have you tried it or are just "not sure"? Works for me
and >> > can move >> > > >
to any bar and get the "selectedvalue". If in doubt use >>
> > > selectedvalue(sum()). >> >
> > > ----- Original Message ----- >> > >
> > From: sidhartha70 >> > > > > To:
amibroker@xxxxxxxxxxxxxxx >>
> > > > Sent: Tuesday, January 13, 2009 6:01
AM >> > > > > Subject: [amibroker] Re: Finding
the last true value in an >> > array... >>
> > > > >> > > > >
>> > > > > Actually Bill, not sure this
works... since the 3rd > argument in >> > >
> > ValueWhen() is required to be a number and not an array. >>
> > > > Could use LastValue() to turn it into a number,
but of >> > course this >> >
> > > only returns the value from the right hand edge of the >
chart... >> > > so it >> >
> > > wouldn't work historically... which is what I need. >>
> > > > >> > > > > Any
thoughts...? >> > > > > >>
> > > > --- In amibroker@xxxxxxxxxxxxxxx,
"wavemechanic" <timesarrow@> >> > >
wrote: >> > > > > > >>
> > > > > How about this? >>
> > > > > >> > > >
> > x = condition that generates your 1,0 array >>
> > > > > y = sum(x, range) >>
> > > > > z = valuewhen(x, barindex(), y) >>
> > > > > position in array = lastvalue(barindex()) -
z + 1 >> > > > > > >>
> > > > > Bill >> > > >
> > ----- Original Message ----- >> > > >
> > From: sidhartha70 >> > > > > >
To: amibroker@xxxxxxxxxxxxxxx >>
> > > > > Sent: Monday, January 12, 2009 6:33
PM >> > > > > > Subject: [amibroker] Re:
Finding the last true value in an >> > > >
array... >> > > > > > >>
> > > > > >> > > >
> > Sorry Barry... my terminology is confusing... >>
> > > > > >> > > >
> > Lets say I have an array that has only true or false >>
> values in >> > > >
it... >> > > > > > >>
> > > > > Lets say the last 10 value of this array
are as follows, >> > from x >> >
> > > > intervals ago until now... >> > >
> > > >> > > > > >
0,1,0,0,1,0,0,1,0,0 >> > > > > >
x.................Now >> > > > > >
>> > > > > > Now, obviously,
BarsSince(array) will return a value of 2... >> > >
> i.e. the >> > > > > > last true value
was 2 intervals ago. >> > > > > >
>> > > > > > However, the value I'm trying
to get is the last value >> > of true >>
> > > in the >> > > > >
> above x elements of the array... so I want an _expression_ >>
> that >> > > > returns >>
> > > > > 8 for the above array (i.e. 8 intervals
back is the last >> > > value of >>
> > > > > true). Any ideas...? >>
> > > > > >> > > >
> > Hopefully that's clearer now. >> > > >
> > >> > > > > > >>
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "Barry
Scarborough" >> > > <razzbarry@> >>
> > > > > wrote: >> > >
> > > > >> > > > > > > What
are your trying to do? HHV gives the value of the >> >
> > highest high >> > > > > > >
over the period you enter in x. If you want to find how >>
> > far back >> > > > > that
>> > > > > > > is you can use
>> > > > > > > >>
> > > > > > bs = BarsSince(H == HHV(H,
10)); >> > > > > > > // the next line
prints the num bars back and the high of >> > > >
that bar >> > > > > > >
printf(NumToStr(bs, 1.0) + " High " + NumToStr(HHV(H, 10), >>
> > > 1.2)); >> > > > >
> > >> > > > > > > If you want to
find the value of the other things bs bars >> > >
> ago then >> > > > > > > you
can >> > > > > > > // use the following.
This applies to any array >> > > > > > >
lastHigh = ref(High, - bs); >> > > > > >
> // this is another way to see the results that shows the >>
> > > high value >> > > >
> > > Plot(lastHigh, "high bars ago", colorBlack); >>
> > > > > > Plot(Ref(C, -bs), "close bars ago",
colorblue); >> > > > > > > Plot(Ref(MA(C,
10), -bs), "MA(10) value bars ago", >> > >
colorGreen); >> > > > > > > // then look
at what valuewhen returns >> > > > > > >
Plot(ValueWhen(H == HHV(H, 10), H, -1), "ValueWhen", >>
> > colorRed); >> > > > >
> > >> > > > > > > bsolutely the
last thing you want to do is start using >> >
loops, >> > > > > such as >>
> > > > > > for loops, to extract data from ABs
arrays. Your code will >> > > > be much
>> > > > > > > cleaner and faster if you
use straight AFL. >> > > > > > >
>> > > > > > > Your terminology true
value is confusing. The value in an >> > > > array
is >> > > > > > > the true value. Do you
mean what was the value when the >> > > > >
condition was >> > > > > > >
true? >> > > > > > > >>
> > > > > > Barry >> >
> > > > > >> > > > > > >
>> > > > > > > >>
> > > > > > --- In amibroker@xxxxxxxxxxxxxxx,
"sidhartha70" >> > > <sidhartha70@>
>> > > > > > > wrote: >>
> > > > > > > >> > >
> > > > > Graham, >> > > > >
> > > >> > > > > > > > I'm
trying to get my head around that code right now... >> >
> > but first >> > > > > > > >
thing I noticed was that my post was poorly worded. >> >
Let me >> > > > > reword it >>
> > > > > > > below, and maybe you can tell me
if this is what you >> > > > thought I
>> > > > > > > meant.... >>
> > > > > > > >> >
> > > > > > Ok. It's easy to find the first occurrence of a
true >> > value >> > > >
of an >> > > > > > > > array... that
is looking from now backwards x intervals. >> > >
> simply >> > > > > > > >
HHV(array,x) where x=no of intervals back. >> > >
> > > > > >> > > > > > >
> However, how can I find the last true value of the array >>
> > > looking >> > > > >
> > back >> > > > > > > > over x
intervals...?? i.e. the first true value starting >> >
> from >> > > > > x and >>
> > > > > > > looking forward to
now. >> > > > > > > > >>
> > > > > > > is there an array method without
looping...? >> > > > > > > >
>> > > > > > > > Many
Thanks >> > > > > > > > >>
> > > > > > > >> >
> > > > > > --- In amibroker@xxxxxxxxxxxxxxx, Graham
<kavemanperth@> >> > > > wrote: >>
> > > > > > > > >> >
> > > > > > > try this >> > >
> > > > > > array = h; >> > > >
> > > > > LastHHVValue = valuewhen(
hhvbars(array,x)==0, >> > array ); >>
> > > > > > > > >>
> > > > > > > > -- >>
> > > > > > > > Cheers >>
> > > > > > > > Graham Kav >>
> > > > > > > > AFL Writing
Service >> > > > > > > > >
http://www.aflwriting.com >>
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > 2009/1/13 sidhartha70
<sidhartha70@>: >> > > > > > > >
> > Hi All, >> > > > > > > >
> > >> > > > > > > > > >
Ok. It's easy to find the last true value of an >> >
array... >> > > > > simply >>
> > > > > > > > > HHV(array,x) where x=no
of intervals back. >> > > > > > > >
> > >> > > > > > > > > >
However, how can I find the last true value of the >> >
> array >> > > > > > > looking
back >> > > > > > > > > > over x
intervals...?? >> > > > > > > > >
> >> > > > > > > > > > is
there an array method without looping...? >> > > >
> > > > > > >> > > > > >
> > > > Many Thanks >> > > > > >
> > > > >> > > > > > > >
> > >> > > > > > > >
> >> > > > > > > > >>
> > > > > > >> > > >
> > >> > > > > > >>
> > > > > >> > > >
> > ------------------------------------ >> > >
> > > >> > > > > > **** IMPORTANT
**** >> > > > > > This group is for the
discussion between users only. >> > > > > >
This is *NOT* technical support channel. >> > > >
> > >> > > > > >
********************* >> > > > > > TO GET
TECHNICAL 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 >> > > > > >
>> > > > > > >> >
> > > > >> > > > > >
>> > > > > > >> >
> > > > >> > > > > >>
> > > >> > > >>
>
---------------------------------------------------------- >>
> > > > > >> > > >
> > >> > > > > > >>
> > > > > No virus found in this incoming
message. >> > > > > > Checked by AVG -
http://www.avg.com >>
> > > > > Version: 8.0.176 / Virus Database:
270.10.6/1889 - >> > Release Date: >>
> > > > 1/12/2009 8:18 PM >> >
> > > > >> > > > > >>
> > > > >> > > > >
>> > > > >
------------------------------------ >> > > > >
>> > > > > **** IMPORTANT **** >>
> > > > This group is for the discussion between users
only. >> > > > > This is *NOT* technical
support channel. >> > > > > >>
> > > > ********************* >>
> > > > TO GET TECHNICAL 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 >> > > > >
>> > > > > >> > >
> > >> > > > > >>
> > > > >> > > >
> >> > > > >> > >
>> >
---------------------------------------------------------- >>
> > > > >> > > > >
>> > > > > >> > >
> > No virus found in this incoming message. >> >
> > > Checked by AVG - http://www.avg.com
>> > > > > Version: 8.0.176 / Virus Database:
270.10.6/1891 - Release > Date: >> > > >
1/13/2009 8:17 AM >> > > > > >>
> > > >> > > >>
> > >> > > >>
> > ------------------------------------ >>
> > >> > > **** IMPORTANT
**** >> > > This group is for the discussion between
users only. >> > > This is *NOT* technical support
channel. >> > > >> > >
********************* >> > > TO GET TECHNICAL 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 >> > > >> >
> >> > > >> > >
>> > > >> >
> >> >
---------------------------------------------------------- >>
> > >> > > >>
> > >> > > No virus found in this
incoming message. >> > > Checked by AVG - http://www.avg.com >>
> > Version: 8.0.176 / Virus Database: 270.10.6/1891 - Release
Date: >> > 1/13/2009 8:17 AM >>
> > >> > >> > > >
> ------------------------------------ > > **** IMPORTANT
**** > This group is for the discussion between users only. > This
is *NOT* technical support channel. > >
********************* > TO GET TECHNICAL 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/ >
__._,_.___
**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
*********************
TO GET TECHNICAL 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
*********************************
__,_._,___
|