Thanks, Mike. I copied the code you wrote below and it does not make any difference when I insert it or remove it into my system. I also wanted to debugview it inserting this line into various places in the code and I couldn't get the debugview work. _TRACE(StrFormat("Buying " + sig.Symbol + ", price = %1.3f", sig.Price));
What's wrong with the code and why the debugview doesn't get the stuff. Thanks for you help. I appreciate any comment. --- In amibroker@yahoogroups.com, "Mike" <[EMAIL PROTECTED]> wrote: > > Documentation for custom backtester can be found here: > http://www.amibroker.com/guide/a_custombacktest.html > > You cannot reference ~~~Equity during the formulation of your > Buy/Sell trade rules since the value of ~~~Equity is not calculated > until after the trade rules have been applied (i.e. chicken and egg > problem). > > For the scenario you describe, you could probably do your calculation > and compare it to bo.Equity. In the sample below, bo.Equity is the > equity of your account on a bar by bar basis. If you don't like the > result, set sig.PosSize property to 0 and the trade will be skipped. > > I don't have AmiBroker on this machine, so I cannot verify the > following syntax, and cannot attest to its efficiency. But, the idea > would be something along the lines of: > > 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()) { > SetForeign(sig.Symbol); > Liquidity = MA(C,5)*MA(V,5)*50; > RestorePriceArrays(); > > if (Liquidity[bar] < bo.Equity) { > sig.PosSize = 0; > } > } > } > > bo.ProcessTradeSignals(bar); > } > > bo.PostProcess(); > } > > > Mike > > --- In amibroker@yahoogroups.com, "zozuzoza" <zozuka@> wrote: > > > > Thanks, Mike. The "Allow position size shrinking" trick basically > > does what I need. Although, I don't understand the 2nd part about > the > > custom backtester code. Is there any documentation about the > advanced > > backtest code? > > > > There is one issue I cannot solve. I would like to have in the Buy > > condition the following. > > > > MA(C,5)*MA(V,5)*50>Foreign("~~~EQUITY", "C") > > > > i.e. if the equity grows, the non liquid stocks will be ignored. > > > > How is it possible code this? The above example does not work. > > > > > > --- In amibroker@yahoogroups.com, "Mike" <sfclimbers@> wrote: > > > > > > Hi, > > > > > > If I understand your scenario correctly. You don't have to worry > > > about it, because AmiBroker will not allow you to place an order > > for > > > a value greater than you actually have available in your account. > > > Just select the "Allow position size shrinking" checkbox from the > > AA > > > settings window, then set your position size based on your volume > > > calculations. AmiBroker will scale down as necessary when your > > > calculations exceed your equity. > > > > > > Otherwise, as explained by Graham, if you are backtesting over > more > > > than a single symbol, then you can access the equity from within > > > custom backtester code. > > > > > > e.g. > > > > > > SetBacktestMode(backtestRegularRaw); > > > SetCustomBacktestProc(""); > > > > > > if (Status("action") == actionPortfolio) { > > > bo = GetBacktesterObject(); > > > bo.PreProcess(); > > > > > > for (bar = 0; bar < BarCount; bar++) { > > > for (sig = bo.GetFirstSignal(bar); sig; sig = bo.GetNextSignal > > > (bar)) { > > > ... // Make any adjustment to sig.PosSize that you want > using > > > bo.Equity in your calculations. > > > ... // If you need access to the symbol for Volume, etc. > use > > > Foreign(sig.Symbol, "V"). > > > } > > > > > > bo.ProcessTradeSignals(bar); > > > } > > > > > > bo.PostProcess(); > > > } > > > > > > Mike > > > > > > --- In amibroker@yahoogroups.com, "zozuzoza" <zozuka@> wrote: > > > > > > > > I tried this but doesn't work. > > > > PositionSize = Min(Foreign("~~~EQUITY", "C"),MA(C,5)*MA > (V,5)/50); > > > > It is a portfolio backtest. > > > > The question remains. How is it possible for the positionsize > to > > > > follow the equity AND also limit the positionsize by the volume? > > > > > > > > --- In amibroker@yahoogroups.com, Graham <kavemanperth@> wrote: > > > > > > > > > > For a portfolio backtest the only place is in the > > positionsizing > > > as > > > > > that is only used during the portfolio backtest pass > > > > > If it is a single symbol backtest then you can use Equity(). > > > > > If you need to determine trade entries or exits based on > > portfolio > > > > > equity value then you need to use the advanced backtest code > to > > > > change > > > > > the trade values. > > > > > > > > > > -- > > > > > Cheers > > > > > Graham Kav > > > > > AFL Writing Service > > > > > http://www.aflwriting.com > > > > > > > > > > > > > > > > > > > > 2008/5/30 zozuzoza <zozuka@>: > > > > > > Is there any way to reference the portfolio equity > > > > > > Foreign("~~~EQUITY", "C") in the buy formula itself? > > > > > > > > > > > > I guess that the portfolio equity is available after > running > > the > > > > > > backtest so it cannot be referenced in the buy formula > itself. > > > > > > > > > > > > I've checked the AddToComposite stuff but it is not clear > how > > > it > > > > can > > > > > > be done. > > > > > > > > > > > > Is there a simple solution for this? Thank you. > > > > > > > > > > > > > > > > > > ------------------------------------ > > > > > > > > > > > > Please note that this group is for discussion between users > > > only. > > > > > > > > > > > > To get 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >