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

[amibroker] Re: Question on how to use HHV or LLV in a looping function?



PureBytes Links

Trading Reference Links

Mike,
Not at all, the examples you provided mirror more less the approaches 
I tried outside of the loop, the only problem was that those 
approaches posed a noticeable degradation in the performance of the 
system! Overall the performance of the system was still quite 
acceptable except that I thought that by going inside the loop I 
might get better execution speed.

I greatly appreciate your response, thanks again.  

--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> Hi,
> 
> I'll take your word for it, that you need the loop.
> 
> That being said, I don't see that your comments exclude any of the 
> approaches. It just means that they need to be realigned to include 
> the current bar.
> 
> Given that you are not altering anything inside your loop (with 
> respect to the High values), but rather just comparing two 
> consecutive values (highest of two - the value of which is 
presumably 
> then being used later in the loop), there is no need to repeatedly 
> call HHV in the loop. Just do it once outside the loop and refer to 
> the resulting elements from inside the loop. Each element of the 
> result will be the higher of the current and the preceding bar. As 
> you increment through the loop, you will always be seeing the 
highest 
> of the current (i.e. bar at loop counter index) and the previous 
bar 
> (i.e. bar at loop counter index - 1).
> 
> You can even pull out your entire HHV/LLV calculation and just 
refer 
> to the i-th result inside the loop e.g.
> 
> Result = HHV(High, 2)/LLV(...);
> 
> for (i = 1; i < BarCount; i++) {
>   ... // Refer to Result[i] here
> }
> 
> I believe that any of the following would still give you what you 
are 
> after, unless I'm misunderstanding what it is you are trying to do. 
> 
> Option 1:
> 
> HighestOfTwo = HHV(High, 2);
> 
> for (i = 1; i < BarCount; i++) {
>   xyz = HighestOfTwo[i]; // xyz as scaler
>   ...
> }
> 
> Note that this is identical to just saying:
> 
> xyz = HHV(High, 2); // xyz as array
> 
> for (i = 1; i < BarCount; i++) {
>   ... // refer to xyz[i].
> }
> 
> Option 2:
>  
> HighestOfTwo = Max(High, Ref(High, -1));
> 
> for (i = 1; i < BarCount; i++) {
>   xyz = HighestOfTwo[i]; // xyz as scaler
>   ...
> }
> 
> Same xyz as array approach is possible here too.
> 
> Option 3:
>  
> for (i = 1; i < BarCount; i++) {
>   xyz = High[i];
>   if (High[i - 1] > xyz) xyz = High[i - 1]; // highest of 2 incl.
>   ...
> }
> 
> All of the above will leave you, at each bar, with the higher of 
two 
> consecutive highs (including the current high) stored in variable 
> xyz. Is that not what you were trying to achieve?
> 
> I'll withdraw from further replies to allow others to address 
> anything that I may have missed, unless you specifically have any 
> question regarding what I've posted to date.
> 
> Mike
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "cottondepot" <bill.ghali@> 
> wrote:
> >
> > Mike,
> > Appreciate that, I do need the looping because my code looks back 
> > quite a bit.
> > 
> > I also need to include the current bar in my HHV/LLV test because 
> > I'm setting "Limit Prices" for real-time trading. Obviously 
HHV/LLV 
> > on the current bar are snapshots in time rather than true 
> > reflections of what the high or the low for the bar ends up being.
> > 
> > I'm beginning to reach the conclusion that HHV/LLV because they 
are 
> > themselves in a sense "looping arrays" are not that efficient to 
> use 
> > inside a loop. 
> > 
> > I am indeed testing other approaches however before I give up, I 
> > wanted to see if anyone else out there had successfully 
implemented 
> > HHV/LLV within a loop.  
> > 
> > Again, appreciate your attempts.
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:
> > >
> > > Hi,
> > > 
> > > I haven't tested any of this for accuracy. But, you can play 
with 
> > the 
> > > following approaches, all of which I've tried to keep within 
the 
> > > structure of your original code snippet (i.e. assuming that 
> > looping 
> > > is necessary).
> > > 
> > > However, as suggested, looping may not be necessary, and likely 
> is 
> > > not necessary.
> > > 
> > > If I read HHV correctly, then it will include the current bar 
in 
> > the 
> > > calculation. I'm assuming that you do not want to include the 
> > current 
> > > bar when looking at "the last 2 bars", and so have used Ref
(..., -
> > 1) 
> > > to exclude the current bar. Double check this.
> > > 
> > > Note too that bar indexing is zero based, so your counter (e.g. 
i 
> > = ) 
> > > needs to be 1 less than you might otherwise expect.
> > > 
> > > Option 1:
> > > 
> > > HighestOfTwo = Ref(HHV(High, 2), -1);
> > > 
> > > for (i = 2; i < BarCount; i++) {
> > >   xyz = HighestOfTwo[i];
> > >   ...
> > > }
> > > 
> > > Option 2:
> > > 
> > > HighestOfTwo = Max(Ref(High, -1), Ref(High, -2));
> > > 
> > > for (i = 2; i < BarCount; i++) {
> > >   xyz = HighestOfTwo[i];
> > >   ...
> > > }
> > > 
> > > Option 3:
> > > 
> > > for (i = 2; i < BarCount; i++) {
> > >   xyz = High[i - 1];
> > >   if (High[i - 2] > xyz) xyz = High[i - 2];
> > >   ...
> > > }
> > > 
> > > Again, things will go significantly faster if you don't need 
the 
> > > loops.
> > > 
> > > Mike
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "sidhartha70" <sidhartha70@> 
> > > wrote:
> > > >
> > > > Help if we knew the full context of the problem... it is 
likely 
> > that
> > > > you wouldn't need to use HHV/LLV inside a loop. You can 
> probably 
> > > code
> > > > the use of HHV/LLV outside of the loop. if you need one at 
> all...
> > > > 
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "cottondepot" <bill.ghali@> 
> > wrote:
> > > > >
> > > > > Need to use HHV/LLV in a loop: 
> > > > > 
> > > > > for (i = 3; i < BarCount; i++) 
> > > > > {
> > > > > xyz=HHV(High[i],2);
> > > > > ...
> > > > > }
> > > > > 
> > > > > Obviously that didn't work. In the loop, I'm trying to use 
> > > the "High" 
> > > > > of the last 2 bars as the "LimitPrice" on an order.
> > > > > 
> > > > > Any pointers would be greatly appreciated.
> > > > >
> > > >
> > >
> >
>



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

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/