Hi, I believe that you should be able to make it work from within the custom backtester. Your portfolio equity, on a bar by bar basis, is available as a property from the backtester object (e.g. bo.Equity).
Similarly, the purchase price is available as a property from each signal object (sig.Price). Doing the math along the lines of the following should give you the number of shares: ((sig.PosSize / -100) * bo.Equity) / sig.Price Note that you must transform the position size from a negative whole value to a positive fraction before multiplying against the equity. http://www.amibroker.com/guide/a_custombacktest.html Mike --- In [email protected], Flávio Veloso <[EMAIL PROTECTED]> wrote: > > Hi Mike. > > Thanks for your reply. > > Unfortunately I'm setting PositionSize as percent of current equity > (based on my stop), and I think that's the problem. > > I guess that if we knew the number of shares in advance, we could take > care of the issue in simple AFL: > > RoundLotSize = IIf(shares >= 100, 100, 1); > > Perhaps there is some way to get position size value *in dollars* using > the custom backtester? If yes, then we could just divide the dollar > value by the close to get the approximate number of shares. Do you know > if it is possible do that that? > > Mike escreveu: > > > > > > If you do not come up with any other solution, you can always alter > > the position size of each individual signal using custom backtester > > code. > > > > Assuming that you are setting numbers of shares in the PostionSize > > calculation (as opposed to percentage of equity), something along the > > lines of the following (untested) code should work: > > > > SetOption("UseCustomBacktestProc", True ); > > > > if (Status("action")== actionPortfolio) { > > bo = GetBacktesterObject(); > > bo.PreProcess(); > > > > for (bar = 0; bar < BarCount; bar++) { > > for (sig = bo.GetFirstSignal(bar); sig; sig = > > bo.GetNextSignal(bar)) { > > if (sig.IsEntry() && sig.PosSize > 100) { > > sig.PosSize = floor(sig.PosSize/100) * 100; > > } > > } > > > > bo.ProcessTradeSignals(bar); > > } > > > > bo.PostProcess(); > > } > > > > Mike > > > > --- In [email protected] <mailto:amibroker% 40yahoogroups.com>, > > Flávio Veloso <flavso@> wrote: > > > > > > Hi all. > > > > > > Is it possible to use different round lot sizes (e.g. by setting > > > RoundLotSize variable) depending on the number of shares that are > > going > > > to be bought/short? > > > > > > Basically all I want is RoundLotSize = 100 for any position size > > that > > > results in more than 100 shares to be bought/short, and RoundLotSize > > = 1 > > > for the rest. > > > > > > For example: > > > > > > Number of shares (based on PositionSize): 75 > > > Use RoundLotSize = 1 > > > Shares to buy = 75 > > > > > > Number of shares (based on PositionSize): 125 > > > Use RoundLotSize = 100 > > > Shares to buy = 100 > > > > > > Number of shares (based on PositionSize): 360 > > > Use RoundLotSize = 100 > > > Shares to buy = 300 > > > > > > Anyone doing this? If so, how? > > > > > > Thanks in advance. > > > > > > -- > > > Flávio > > > > > > > > > > -- > Flávio >
