[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

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@xxx> 
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/