Do the array calculation and use the values when needed. Don't worry about it 
being done for all bars vs. only the x-th bar that you need. It is the array 
manipulations that make AmiBroker the speed demon that it is. Remember every 
single AmiBroker built in function is happening for *all* bars. Don't hesitate 
to do the same!

Mike

--- In [email protected], "pipadder" <pipad...@...> wrote:
>
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> --- In [email protected], "pipadder" <pipadder@> wrote:
> >
> > Hi,
> > 
> > I am a systematic mechanical trader (almost exclusively forex). For the 
> > last couple of years [...]
> 
> Ok, it appears that trying to think in "array mode" is giving me a lot more 
> trouble than I expected. One of the main problems I am finding is the fact 
> that conditional execution of code (do/calculate stuff which needs to happen 
> only for some bars, but not for some others) doesn't seem obvious now, and I 
> am stuck. Or at least, the ways I can come up with to do things don't seem 
> efficient to me.
> 
> Perhaps the best way is to give a concrete example... I am trying to code a 
> system that is just a variation of your usual breakout box. I am working with 
> a 1-minute bar database. So, the program is going to process these bars and 
> determine when to place the orders. This will happen once a day, for a given 
> bar (on a given minute, of course) which I can identify. Let's assume I am at 
> the point where my program has already determined which bars those are and I 
> have a nicely populated "buy" array with a few "1" here and there. The 
> problem comes now: to use volatility-adjusted stops, once a "buy bar" is 
> known the program needs to run some calculations that use a certain number of 
> prior bars (several hundreds of them, actually) to determine stop placement 
> (sellprice), order size, etc. So I am thinking about two possible options to 
> do this:
> 
> 1) Brute force. I run these calculations and determine the 
> volatility-adjusted stuff for every bar, whether it is a "buy" bar or not, so 
> that I have those numbers available in an appropriately created array when 
> needed. This could be done in AFL array style, but seems like total overkill: 
> in a 1M database and to place only one order a day, I would only need to run 
> this calculation once every 1440 bars. So running the calculation for every 
> single bar looks quite inefficient.
> 
> 2) Conditional execution... Call a function that will perform the calculation 
> only for those bars which are tagged as "buy bars". Now... the only way I can 
> think of to do this is to just run a loop through the whole database and 
> perform the appropriate calculations only for the bars that require them. 
> This of course looks more efficient than the solution before, but I am not 
> using the advantages of simultaneous array operation anymore, and not having 
> a good idea of the speed advantage of array vs. loop operation I cannot 
> really know whether it is a better solution.
> 
> I suppose many of you have gone through this kind of problem, so do you guys 
> know which solution is better, or perhaps even have suggestions on how to do 
> this in a cleaner and more efficient way?
> 
> Thanks again for your continued patience!
>


Reply via email to