| 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
 
 *********************************
 
 
 
 ![]()  
 
 __,_._,___
 |