[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

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@xxx> 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
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
>



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

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

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