PureBytes Links
Trading Reference Links
|
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/
|