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.
>