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

Re: [amibroker] Re: Consistent coding structure problem



PureBytes Links

Trading Reference Links

Title: Re: [amibroker] Re: Consistent coding structure problem

there is a basic rule that says not to include any array calculations inside a loop. Check your loop and make sure it never accesses entire arrays.


also, loop only the number of bars required, i.e. try to prevent looping from 0 to barcount.


Good luck,

herman





Thursday, November 6, 2008, 7:22:36 PM, you wrote:


> Mike & Herman,


> Thanks.


> Just out of interst, I have actually coded my problem now. Once using

> only AFL in it's purest form (i.e. the IIF() route) and once using a

> classic looping structure with [i] array referencing.


> Out of interest, using the 'check' function in the foruma editor, the

> pure AFL code is about twice as fast as a looping structure.


> Thanks again.


> --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:


>> Herman gave a viable answer in his last post.


>> I'd just like to add that I wouldn't let any bias against looping 

>> stand in the way of advancing an idea. So few ideas have any real 

>> promise that the sooner you can get something up and tested the 

>> better.


>> You can always refine the code later. Even then, there is a lot to be 

>> said for code that reads well (to you) vs. code that performs well. If 

>> after a month's time you find yourself again struggling to decipher 

>> the code, then you might have been better off going with a more 

>> familiar construct.


>> Mike 


>> --- In amibroker@xxxxxxxxxxxxxxx, "sidhartha70" <sidhartha70@> 

>> wrote:

>> >

>> > Mike & Herman,

>> > 

>> > Thank you. Both good ideas... and sorry about moving the goal posts

>> > here... but the problem is still becoming clear to me as I think 

>> about

>> > it more... Actually, the problem I have with IIF() in these

>> > circumstances is where I want to evaluate more than one _expression_

>> > within the if() condition... for example,

>> > 

>> > HLRange = abs( H - L );

>> > ABC = HLRange > Ref( HLRange, -1 ) AND HLRange > Ref( HLRange, -2) 

>> AND

>> > HLRange > Ref( HLRange, -3 );

>> > XYZ_Check=IIf(Ref(ABC,-1),1,IIf(Ref(ABC,-2),2,IIf(Ref(ABC,-

>> 3),3,0)));

>> > 

>> > if(XYZ_Check==0)

>> > {

>> > RU1_Check = Open>Ref(Open,-1) AND Open>Ref(Open,-2) AND 

>> Open>Ref(Open,-3);

>> > RU2_Check = Close>Ref(Close,-1) AND Close>Ref(Close,-2) AND

>> > Close>Ref(Close,-3);

>> > }

>> > if(XYZ_Check==1)

>> > {

>> > RU1_Check = Open>Ref(Open,-2) AND Open>Ref(Open,-3) AND 

>> Open>Ref(Open,-4);

>> > RU2_Check = Close>Ref(Close,-2) AND Close>Ref(Close,-3) AND

>> > Close>Ref(Close,-4);

>> > }

>> > if(XYZ_Check==2)

>> > {

>> > RU1_Check = Open>Ref(Open,-3) AND Open>Ref(Open,-4) AND 

>> Open>Ref(Open,-5);

>> > RU2_Check = Close>Ref(Close,-3) AND Close>Ref(Close,-4) AND

>> > Close>Ref(Close,-5);

>> > }

>> > if(XYZ_Check==3)

>> > {

>> > RU1_Check = Open>Ref(Open,-4) AND Open>Ref(Open,-5) AND 

>> Open>Ref(Open,-6);

>> > RU2_Check = Close>Ref(Close,-4) AND Close>Ref(Close,-5) AND

>> > Close>Ref(Close,-6);

>> > }

>> > 

>> > Sorry if this is labouring a point. But I always get stuck by this

>> > structure... I guess I should just use a loop, but I am loathe to if

>> > there is another way.

>> > 

>> > TIA

>> > 

>> > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:

>> > >

>> > > Why not do it the same way you did XYZ_Check? Also, it would be 

>> more 

>> > > efficient to add variables rather than repeating the same 

>> operation.

>> > > 

>> > > Open1 = Open > Ref(Open, -1);

>> > > Open2 = Open > Ref(Open, -2);

>> > > ...

>> > > Open6 = Open > Ref(Open, -6);

>> > > 

>> > > Open123 = Open1 AND Open2 AND Open3;

>> > > Open234 = Open2 AND Open3 AND Open4;

>> > > ...

>> > > Open456 = Open4 AND Open5 AND Open6;

>> > > 

>> > > RU1_Check = IIF(XYZ_Check == 0,

>> > >   Open123,

>> > >   IIF(XYZ_Check == 1, 

>> > >     Open234,

>> > >     IIF(XYZ_Check == 2,

>> > >     ...

>> > > );

>> > > 

>> > > Mike

>> > > --- In amibroker@xxxxxxxxxxxxxxx, "sidhartha70" <sidhartha70@> 

>> > > wrote:

>> > > >

>> > > > Herman,

>> > > > 

>> > > > This is where the problem occurs... because what I actually want 

>> to 

>> > > do

>> > > > within each conditional if() statement is carry out some more 

>> array

>> > > > manipulations. For example,

>> > > > 

>> > > > HLRange = abs( H - L );

>> > > > ABC = HLRange > Ref( HLRange, -1 ) AND HLRange > Ref( HLRange, -

>> 2) 

>> > > AND

>> > > > HLRange > Ref( HLRange, -3 );

>> > > > XYZ_Check=IIf(Ref(ABC,-1),1,IIf(Ref(ABC,-2),2,IIf(Ref(ABC,-

>> > > 3),3,0)));

>> > > > 

>> > > > if(XYZ_Check==0)

>> > > > {

>> > > > RU1_Check = Open>Ref(Open,-1) AND Open>Ref(Open,-2) AND 

>> > > Open>Ref(Open,-3);

>> > > > }

>> > > > if(XYZ_Check==1)

>> > > > {

>> > > > RU1_Check = Open>Ref(Open,-2) AND Open>Ref(Open,-3) AND 

>> > > Open>Ref(Open,-4);

>> > > > }

>> > > > if(XYZ_Check==2)

>> > > > {

>> > > > RU1_Check = Open>Ref(Open,-3) AND Open>Ref(Open,-4) AND 

>> > > Open>Ref(Open,-5);

>> > > > }

>> > > > if(XYZ_Check==3)

>> > > > {

>> > > > RU1_Check = Open>Ref(Open,-4) AND Open>Ref(Open,-5) AND 

>> > > Open>Ref(Open,-6);

>> > > > }

>> > > > 

>> > > > Any way to achieve this across the entire price array outside of 

>> a

>> > > > loop....?

>> > > > 

>> > > > TIA

>> > > >

>> > >

>> >





> ------------------------------------


> **** 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

*********************************




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___