Search the web
Sign In
New User? Sign Up
amibroker · AmiBroker User's List
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Message search is now enhanced, find messages faster. Take it for a spin.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Referencing the backtested portfolio equity in the buy formula   Message List  
Reply | Forward Message #132242 of 143806 |
Re: Referencing the backtested portfolio equity in the buy formula

Thank you, Mike. I managed to solve the trace. I inserted the
_TRACE(sig.symbol+" PosSize="+sig.PosSize+" Equity="+bo.Equity+"
Type="+sig.type+" reason="+sig.reason+" PosScore="+sig.PosScore);
and it outputted the properties, altough I don't know how to trace
trade properties since it is a mid-level interface code but I will
play with it a bit more.

Looking at the trace, I couldn't figure out why your code does not
work. It gives the same result whether I paste the code or delete it.
It doesn't change anything.

May I ask you to try the code you mentioned below, just add any
buy,sell rules. Does it make any difference for you?

Thank you,
Zozu

--- In amibroker@yahoogroups.com, "Mike" <sfclimbers@...> wrote:
>
> 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@yahoogroups.com, "zozuzoza" <zozuka@> 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@yahoogroups.com, "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@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
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>





Fri Nov 21, 2008 4:35 pm

zozuzoza
Offline Offline
Send Email Send Email

Forward
Message #132242 of 143806 |
Expand Messages Author Sort by Date

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...
zozuzoza
Offline Send Email
May 30, 2008
7:11 am

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...
Graham
kavemanperth
Offline Send Email
May 30, 2008
7:48 am

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...
zozuzoza
Offline Send Email
Jun 2, 2008
8:22 am

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...
Mike
sfclimbers
Offline Send Email
Jun 2, 2008
9:08 am

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....
zozuzoza
Offline Send Email
Jun 3, 2008
11:06 am

Documentation for custom backtester can be found here: http://www.amibroker.com/guide/a_custombacktest.html You cannot reference ~~~Equity during the...
Mike
sfclimbers
Offline Send Email
Jun 3, 2008
8:28 pm

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...
zozuzoza
Offline Send Email
Nov 20, 2008
7:50 pm

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: ...
Mike
sfclimbers
Offline Send Email
Nov 20, 2008
8:08 pm

Thank you, Mike. I managed to solve the trace. I inserted the _TRACE(sig.symbol+" PosSize="+sig.PosSize+" Equity="+bo.Equity+" Type="+sig.type+"...
zozuzoza
Offline Send Email
Nov 21, 2008
4:35 pm

Hi, Do you have an idea why the below code does not work? I would appreciate any help as I am stucked. I would like to insert the condition into the buy...
zozuzoza
Offline Send Email
Nov 28, 2008
6:37 pm

Couple of things you can do here. First, to cancel a signal, set the sig.Price = -1. Secondly, avoid SetForeign inside the CBT signal loop. Execution will be...
Steve Davis
_sdavis
Offline Send Email
Nov 28, 2008
7:27 pm

Setting PosSize to 0 has the same effect as setting Price to -1. They both cancel the signal. Setting the liquidity as the PositionScore might be problematic...
Mike
sfclimbers
Offline Send Email
Nov 28, 2008
11:43 pm

One trick when using PositionSize and PositionScore to pass extra data to the CBT is to squeeze multiple values into the available bits. Here are some...
Steve Davis
_sdavis
Offline Send Email
Dec 1, 2008
4:16 am

Hi, Sorry that I missed your earlier post. The code, as you have puplished it below, is canceling signals for me. Are you saying that it is not canceling *any*...
Mike
sfclimbers
Offline Send Email
Nov 28, 2008
11:30 pm

I am working on a formula I cobbled together and if I verify the syntax, it causes error 29 in every pane in every window. The formula is not in any panes or...
James
jamesmemphis
Offline Send Email
Aug 2, 2009
6:49 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help