[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Referencing the backtested portfolio equity in the buy formula



PureBytes Links

Trading Reference Links

If you haven't already, you will need to add a call to your AFL to 
indicate that you want your custom backtester code to run:

SetOption("UseCustomBacktestProc", True );

For the trace statements, simplify your life first, then build from 
there. Start with a simple _TRACE("Did this work?"); If you are using 
one of the more recent versions of AmiBroker, you can see the output 
in the Log window (may need to right click in the log to enable 
internal/external output - don't remember which).

I seem to recall running into issues when trying some formats in my 
_TRACE output with DebugView. It might have had to start with a hard 
coded string rather than the direct result of StrFormat, but I really 
don't remember, so don't quote me on that.

Mike

--- In amibroker@xxxxxxxxxxxxxxx, "zozuzoza" <zozuka@xxx> wrote:
>
> 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@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> 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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, "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@xxxxxxxxxxxxxxx, 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
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>




------------------------------------

**** 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/