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

Re: [amibroker] Re: How do I backtest placing a restricted number of limit orders each night?



PureBytes Links

Trading Reference Links

Thanks a lot Ed. I'll will try the code and see if this will bring the famous 'Of course...' experience ...
 
Regards, Ton.
 
----- Original Message -----
From: ed2000nl
Sent: Thursday, August 30, 2007 11:24 AM
Subject: [amibroker] Re: How do I backtest placing a restricted number of limit orders each night?

if this is the problem then I posted an example on this (#112783) here:

http://finance.groups.yahoo.com/group/amibroker/message/112783

--- In amibroker@xxxxxxxxxps.com, "Tomasz Janeczko" <groups@xxx> wrote:
>
> Ton,
>
> Please read this:
> http://www.amibroker.com/f?setbacktestmode
>
> There are 4 different backtest modes and what you are trying to do
requires backtestRegularRaw, instead of backtestRegular (the default one).
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: Ton Sieverding
> To: amibroker@xxxxxxxxxps.com
> Sent: Thursday, August 30, 2007 10:20 AM
> Subject: Re: [amibroker] Re: How do I backtest placing a
restricted number of limit orders each night?
>
>
> Yes Skynet is a PITA. But as you know they are not the only one in
Belgium giving email problems. Anyway I see we have some
misunderstanding about my 'You dont know which signal will be used by
the Backtester'. No I am not talking about Intraday signals and am of
course using with EOD prices, the yesterday's signal. An yes I
therefore also use the settradedelays(0,0,0,0) Backtester setting. So
that is not my problem. The problem is that due to the portfolio
constraint the Backtester only takes a small part of the 'based upon
my rules' available signals. It's more or less the same as with the
Exrem() command. Only there I know what's happening. With the
Backtester not ...
>
> I am getting more and more the feeling that I am trying to solve
something that by definition can't be solved. So I will do some extra
testing to find out if there is some clou that explains everything or
let the thing what it is. Thanks anyway for following up ...
>
> Regards, Ton.
>
> ----- Original Message -----
> From: ed2000nl
> To: amibroker@xxxxxxxxxps.com
> Sent: Thursday, August 30, 2007 9:25 AM
> Subject: [amibroker] Re: How do I backtest placing a restricted
number of limit orders each night?
>
>
> again Emails not getting through, $%@&$@# Belgacom ...
>
> I wrote:
>
> maybe I am missing some deeper thought on portfolio type systems and
> backtesting but my system performs as I would expect in the practice
> so I assume I understand how it works.
>
> You say: "You just do not know which signal will be used by the
> Backtester." This could be true if you allow your EOD system to add
> stocks using intraday signals. However in my case I calculate my
> signal for today using yesterdays EOD data. Then you know
exactly what
> you need to do and it makes no sense to analyse the other signals
> because you don't use them in the practice.
>
> So to create a backtest that can exactly be performed in the
practice
> (excluding slippage and stocks that are not allowed to short) I use:
>
> settradedelays(0,0,0,0);
>
> and then define my signals as:
>
> Buy = ref(Buy,-1);
> Short = ref(Short,-1);
>
> also my cover and sell signals are delayed by one bar but for the
> exits you can also allow for an intraday exit at a target price.
>
> If you like I can give you an example system that exactly calculates
> what you need to do the next day,
>
> rgds, Ed
>
>
> --- In amibroker@xxxxxxxxxps.com, "Ton Sieverding"
> <ton.sieverding@> wrote:
> >
> > That's correct. But using rotational trading will give me a
> completely different approach. I want to Backtest trading rules on
> portfolio level. See if these rules give me in a real world
> environment with let's say 20 stocks in portfolio a profitable
system
> yes or no. For me the only way to find out if these rules are
> profitable is using the Explore function and exporting the
result to a
> spreadsheet for further analysis. Only then you will get all the
> signals. And in most cases the result I get is different than
the one
> from the Backtester. Simply because of the portfolio constraint. The
> Backtester is only using a small part of all created signals. And I
> have the feeling that the occurrence of these signals have a random
> character. You just do not know which signal will be used by the
> Backtester. But your right, with rotational trading you will get a
> systematic rebalancing of the portfolio ...
> >
> > Now my problem is that I just do not know if I am missing
something
> in the Backtester approach or that I am just trying to do something
> that by definition is impossible ...
> >
> > Regards, Ton.
> >
> >
> > ----- Original Message -----
> > From: vlanschot
> > To: amibroker@xxxxxxxxxps.com
> > Sent: Wednesday, August 29, 2007 11:35 AM
> > Subject: [amibroker] Re: How do I backtest placing a restricted
> number of limit orders each night?
> >
> >
> > Hi Ton,
> >
> > Perhaps looking at the rotational trading version can help to
clarify
> > things (I hope).
> >
> > In line with your argument, new signals have no effect UNLESS
some
> > condition is met which rebalances the portfolio. This is easiest
> > perceived in rotational mode, since it forces the portfolio
> > to "rebalance" at each bar. I hope we can agree that one has
to have
> > some conviction as to the explanatory power for excess returns of
> > the "factors" (or think "indicators") which are used to define
the
> > condition. In other words, any score on a factor (momentum,
> > valuation, etc.) implies its relative expected return, i.e. a
higher
> > score is preferable. If we agree on that then, based on your
> > condition, unless an existing holding meets this condition
(i.e. has
> > the minimum score) it is replaced by another security
(assuming at
> > least one meets this condition). In case of the condition
being met,
> > any new signals are legitimately "superfluous" in that they
are not
> > better signals. Otherwise our previous agreement falls apart. The
> > only way, in my view, in which new (or rather confirming)
signals are
> > put into practise in the portfolio is by adding/deducting to the
> > weights of existing holdings (particularly if you're judged
against a
> > benchmark) which is where scalein/out comes in.
> >
> > Now, first, any rotational system can (often more flexibly) be
> > implemented via ordinary BSSC-rules. Second, I do agree that
there
> > are limitations to backtesters, even AB's CBT. The main one
> > is "custom cash management": the inability to allocate cash from
> > individual sells (which should be completed first) to individual
> > buys. An extension of this is the inability to use cash from
shorts
> > to enter additional longs, i.e. create 130/30 portfolios
(although TJ
> > has promised to look into this functionality).
> >
> > May be too much OT, but hope it helps.
> >
> > PS
> > --- In amibroker@xxxxxxxxxps.com, "Ton Sieverding"
> > <ton.sieverding@> wrote:
> > >
> > > Thanks Mike. I know all this. Please read my answers to Ed
and you
> > will find the real problem I have with the Backtester and
whatever
> > Backtester. Because it has nothing to do with the AB
Backtester. It's
> > just the portfolio constraint that every investor in the real
world
> > has creating mentioned problem. I just don't know how to solve
it ...
> > >
> > > Regards, Ton.
> > >
> > > ----- Original Message -----
> > > From: sfclimbers
> > > To: amibroker@xxxxxxxxxps.com
> > > Sent: Tuesday, August 28, 2007 9:19 PM
> > > Subject: [amibroker] Re: How do I backtest placing a restricted
> > number of limit orders each night?
> > >
> > >
> > > Ton,
> > >
> > > Once your portfolio is full, yes, PositionScore will have no
> > effect
> > > until a slot becomes available after a Sell.
> > >
> > > However, a PositionScore is only good for the life of the bar
> > (single
> > > day when using EOD data). So if it can not be acted upon *in
that
> > > bar*, then it is worthless from that point on. The markets will
> > have
> > > changed by the next bar and the score will no longer apply.
> > >
> > > Once one or more slots become open (after a Sell), then the
> > *current*
> > > PositionScore(s) will be considered, and the best will be
used to
> > > fill the open slot(s). So no, the process is not random. The
> > > *current* PositionScore is used to fill any open slots of a
> > > portfolio. "Expired" PositionScore(s) are of no use.
> > >
> > > If you have a restriction in your strategy that prevent
entering
> > > multiple positions for a single symbol (i.e. prvents
"scale-in",
> > > which is the default case), then entering a position for that
> > symbol
> > > will be rejected, even if it has the highest PositionScore. But
> > that
> > > is based on your strategy, not luck.
> > >
> > > The next highest will be evaluated until one is found that
can be
> > > traded in accordance with the rules of your strategy. The
process
> > is
> > > predictable.
> > >
> > > Hope that helps,
> > >
> > > Mike
> > >
> > > --- In amibroker@xxxxxxxxxps.com, "Ton Sieverding"
> > > <ton.sieverding@> wrote:
> > > >
> > > > As far as I understand Ed and assuming EOD trading,
> > PositionScore
> > > is selecting the best signals coming from the same day. So when
> > at
> > > Day1 there are 10 different signals where only one is needed
then
> > > PositionScore is selecting the 'best' signal. But what if the
> > next
> > > day all stocks in portfolio are filled and the system generates
> > > another 10 signals? They are lost ... until the system gives a
> > SELL.
> > > Therefore the next BUY is based upon the next SELL. Put the 500
> > > stocks of the SP500 in a WatchList, take whatever AFL rules for
> > the
> > > BUY and the SELL and a portfolio with say max. 10 stocks. Do a
> > > Backtest and what you see is that only a small part of the
> > signals
> > > were used to fill the portfolio. Simply because you have this
> > > portfolio constraint. If all signals would give you the same
> > > Winner/Looser characteristics than there should be no problem.
> > But
> > > that's not true. Therefore the portfolio filling proces for me
> > has a
> > > random character and the result is based upon luck ... Unless I
> > am
> > > missing something ... And that's my question.
> > > >
> > > > Regards, Ton.
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: ed2000nl
> > > > To: amibroker@xxxxxxxxxps.com
> > > > Sent: Monday, August 27, 2007 12:58 PM
> > > > Subject: [amibroker] Re: How do I backtest placing a
restricted
> > > number of limit orders each night?
> > > >
> > > >
> > > > hi Ton,
> > > >
> > > > I'm not sure if I understand what you mean. There are
often more
> > > > signals then you can use but the backtester is instructed to
> > pick
> > > the
> > > > best signals using PositionScore. I can exactly perform my
> > > backtest in
> > > > the real world, excluding the shorts I am not allowed to
enter
> > by
> > > my
> > > > broker. The signals the backtester chooses are not pure
luck but
> > > > chosen using positionscore. But I guess I do not understand
> > your
> > > question,
> > > >
> > > > rgds, Ed
> > > >
> > > > --- In amibroker@xxxxxxxxxps.com, "Ton Sieverding"
> > > > <ton.sieverding@> wrote:
> > > > >
> > > > > Morning Ed,
> > > > >
> > > > > My problem when using the Backtester and in general a
> > Backtester
> > > > based upon portfolio result is the fact that in the real
world
> > an
> > > > investor will have a portfolio with
> > > > > let's day 20 stocks. Therefore when the portfolio has been
> > > filled,
> > > > all other BUY signals
> > > > > will be lost until you've a SELL signal. For this reason
when
> > > doing
> > > > a Backtest
> > > > > I always do an Explore analysis of all signals. In general
> > what
> > > I
> > > > get is something like
> > > > > 200 Transactions from the Backtester and 1.000 Transactions
> > > from the
> > > > Explore analysis.
> > > > > What makes things worse, I often get a RAR from the
backtest
> > of
> > > > let's say 25% with
> > > > > 75% of the signals being winners. When looking to the
Explore
> > > > analysis of all the
> > > > > signals I only get something like 35% of winners. Therefore
> > the
> > > > result coming from
> > > > > the Backtester must be pure luck. The backtester 'randomly'
> > > chooses
> > > > the signals to
> > > > > fill the portfolio. I have no idea how to solve this
> > problem ...
> > > > >
> > > > > Regards, Ton.
> > > > >
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: Edward Pottasch
> > > > > To: amibroker@xxxxxxxxxps.com
> > > > > Sent: Sunday, August 26, 2007 8:45 PM
> > > > > Subject: Re: [amibroker] How do I backtest placing a
> > restricted
> > > > number of limit orders each night?
> > > > >
> > > > >
> > > > >
> > > > > hi,
> > > > >
> > > > > the way you set it up it shoudl not be possible. However,
> > what
> > > can
> > > > happen is that the backtester finds exits for the next day and
> > > > immediatelly fills them with new positions. So you need to
make
> > > sure
> > > > that you first exit your positions and tell the backtester to
> > > enter
> > > > only on the next bar. This is usually the problem. There are
> > > several
> > > > ways to achieve this. Maybe you will get a more satisfactory
> > > result
> > > > when you set settradedelays(1,1,1,1).
> > > > >
> > > > > I use setttradedelays(0,0,0,0) but I make sure that the
trade
> > is
> > > > entered 1 bar after the signal (same with the exits),
> > > > >
> > > > > Ed
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: Michael White
> > > > > To: amibroker@xxxxxxxxxps.com
> > > > > Sent: Friday, August 24, 2007 11:37 AM
> > > > > Subject: [amibroker] How do I backtest placing a restricted
> > > > number of limit orders each night?
> > > > >
> > > > >
> > > > > Can anyone help me model the following scenario?
> > > > >
> > > > > - Assume a portfolio is allowed to consist of some fixed
> > number
> > > > > of "slots" with equity equally divided among them (e.g. 10
> > > slots at
> > > > > 10% of equity).
> > > > > - Check for setup criteria at close of each day.
> > > > > - Place next day limit buy orders for as many unfilled
slots
> > as
> > > are
> > > > > currently available (e.g. if already have 2 fills after day
> > 1,
> > > then
> > > > > there are only 10 - 2 = 8 slots remaining for day 2, etc.).
> > > > > - Buy orders are prioritized by a calculated value.
> > > > >
> > > > > My problem is that if I receive a setup for more symbols
than
> > I
> > > > have
> > > > > available slots (e.g. receive 20 setups but only have 8
> > > available
> > > > > slots), my script will try to fill all 8 slots from the 20
> > > > > candidates, and the portfolio manager will correctly
prevent
> > me
> > > > from
> > > > > having more positions than allowed (e.g. no more than 10).
> > > > >
> > > > > However, in reality, I will only have placed as many limit
> > > > orders as
> > > > > I have available slots (e.g. 8 limit orders when 8
available
> > > slots,
> > > > > not limit orders for all 20 candidates, since I only have
> > funds
> > > to
> > > > > cover placing 8 orders).
> > > > >
> > > > > What is happening is that my script is filling orders
that I
> > > would
> > > > > not have placed! I need a way to indicate that despite 20
> > > setups,
> > > > > only 8 limit orders were placed.
> > > > >
> > > > > Following is some script snippets.
> > > > >
> > > > > /*
> > > > > * Assume an initial purse and brokerage fees ($0.01/share)
> > > > > */
> > > > > SetOption("InitialEquity", 50000);
> > > > > SetOption("CommissionMode", 3);
> > > > > SetOption("CommissionAmount", 0.01);
> > > > >
> > > > > /*
> > > > > * Carry fixed number of positions, dividing 100% of Equity
> > > between
> > > > > * them (based on previous bar's closing).
> > > > > */
> > > > > PositionSize = -100/10; // Each position is 10% of equity
> > > > >
> > > > > SetOption("MaxOpenPositions", 10); // No more than 10
> > positions
> > > > > SetOption("UsePrevBarEquityForPosSizing", True);
> > > > >
> > > > > /*
> > > > > * We recognize the sale signal at the close of a bar and
> > > execute the
> > > > > * sale at the open of the next one, delay sale by 1 day.
> > > > > */
> > > > > SetTradeDelays(0, 1, 0, 0);
> > > > >
> > > > > /*
> > > > > * Trigger a Buy signal when previous bar meets the setup
> > > > > * requirements AND this bar's Low has dropped to less
than a
> > > fixed
> > > > > * percentage below the previous bar's close. This emulates
> > > having
> > > > > * placed a limit order the night before after having
seen the
> > > signal
> > > > > * on that day's close.
> > > > > */
> > > > > setup = ... // Some position entry logic.
> > > > > PositionScore = ... // Some prioritization logic.
> > > > >
> > > > > BuyPrice = Ref(Close, -1) * 0.95;
> > > > > Buy = Ref(setup, -1) AND Low <= BuyPrice; // Problem here!!!
> > > > >
> > > > > Sell = ... // Some sell logic.
> > > > >
> > > > > As indicated in my earlier comments. The problem is that in
> > > > reality I
> > > > > will not actually have placed orders for all candidates,
but
> > > rather
> > > > > only for as many as there are available slots (e.g. 8).
> > However,
> > > > the
> > > > > script will attempt to fill the available slots based on
all
> > > > > candidates (e.g. 20).
> > > > >
> > > > > How can I restrict the Buy assignment to only apply to the
> > top X
> > > > of Y
> > > > > candidates based on priority (e.g. top 8 of 20 in example
> > > above).
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > >
> > >
> >
>

__._,_.___

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




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___