Hi, The execution price is handled in the same way that the Buy/Sell/Short/Cover works. There is an associated price array for each; BuyPrice, SellPrice, ShortPrice, CoverPrice. Those arrays can be set using any expression the same as any other array.
e.g. For a limit order placed 5% below the previous bar's close you could do: LimitPrice = 0.95 * Ref(Close, -1); Buy = Low <= LimitPrice; BuyPrice = min(Open, LimitPrice); Using the above, the BuyPrice array will be simultaneously populated for each bar. Yet, each bar's value may end up being different than the others. Mike --- In [email protected], "Rob" <sidharth...@...> wrote: > > Cool... it looks like the penny dropped. > Everyone that starts with AFL goes through the same experience!!! > Just beware that, speaking from my own experience, I thought I'd "got it a > few times" and still kept going back to thinking in the iterative bar by bar > way... most of the issues I hit with AFL ended up being that error in > thinking. > > Anyway... honestly I'm not a backtesting expert - more of a live front end > expert - I use to AB to day trade real time - executing through my broker. > Maybe Mike can help you there on backtesting... But knowing AFL and AB you > will a good amount a flexibility as to what executed price you assign in your > backtests. First port of call, the help manual, backtesting.... > > > --- In [email protected], "pipadder" <pipadder@> wrote: > > > > > > > > > > > > > > > > > > > > In answer to your questions... it sounds like you haven't fully grasped > > > the main concept of AFL yet... i.e. that it operates on arrays. > > > > > > > Reading the rest of your post... it appears you are right. > > > > > For example, > > > > > > Buy = 1; > > > > > > Sets every element of the Buy array to be 1. > > > Now if you said, > > > > > > Buy = IIf (Cross (TimeNum(), 093000), True, False); > > > > > > This would set every element of the Buy array (no looping required) to a > > > new value based on the outcome of IIf (Cross (TimeNum(), 093000), True, > > > False); (the outcome of that is an array itself - not a number). In this > > > case it would set every element to zero (false) except those where the > > > current time cross 09.30 am... > > > > > > You just need to play around with it. > > > > > > > Aha... this example helps quite a bit. The script/program is applied > > simultaneously to the whole array, not bar by bar. That was what I was > > missing. > > > > Mmmm... the result (in purely numerical terms, not talking about speed) > > should of course be the same whether the calculation is simultaneous or > > looped, but the type of structure fed to the functions in the script (array > > vs. single variable) is not. I guess that'll be the main difference when > > programming it. Although if pretty much everything is an array in AFL, even > > that should be nearly the same. > > > > Ok, I'll have to get used to thinking this way when coding, but now I > > *think* I understand that. > > > > The next thing I wonder about are execution prices... if one of the arrays > > taking care of order operations (buy/sell/short...) has a "1" for that bar, > > at what price is the operation executed by the backtester? Always at the > > closing price of the bar? > > > > Thanks again for your patience :). > > >
