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

[amibroker] Re: Finding the last true value in an array...



PureBytes Links

Trading Reference Links

Thanks Ed. I'll take a look at this idea.

--- In amibroker@xxxxxxxxxxxxxxx, "Edward Pottasch" <empottasch@xxx>
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/