Andy,
Use caution when backtesting EOD strategies where there are
more
signals than there are funds or positions to be filled;
If
your strategy is to buy OCA, what logic are you putting in place to
determine which symbol to buy when multiple symbols hit your limit
order on the same bar?
Since you are using EOD data, you have no
idea which symbol would have
hit the limit order first. You only know that
x of y symbols hit the
limit order on that day.
AmiBroker will just
select the first in the list (alphabetically?). As
such, your
backtest results will be heavily biased in favor of that
ordering and will
not reflect live trading results.
Generally, PositionScore can be used
to influence ordering. But, an
OCA approach by definition does not follow
PositionScore.
So, you might want to modify your custom backtester code
to randomly
select from the available signals and set the remaining ones
to
PosSize 0 in order to override the default prioritization. Then run
your backtest many times and take the average of the results as a best
guess estimate (i.e. Monte Carlo Permutations)
Mike
--- In
amibroker@xxxxxxxxxps.com,
Andrew Senft <senft@xxx> wrote:
>
> Hey Ed,
>
>
Thank you so much for the code on the Amibroker Yahoo group board!
It
> seems to be working from what I've seen so far. I'm doing an
>
optimization on that particular code (your first code) right now.
>
> The second code (the one from your email) didn't work. That is,
there
> were sales of one stock and buy of another stock on the
same day.
Not
> sure what your code was doing but it gave a lot
bigger profits using
the
> backtester. Could you comment on this
please?
>
> Mind you that this is my first attempt to writing
code for any stock
> type software. I'm still using the 30 day free
trial of the
Amibroker
> software but I think that I'm getting
closer as I'm chugging along.
>
> My agenda is to use this on a
basket of ETF's. Perhaps 10 to 20
or
> so. Not sure how many I need
since the 30 day trail backtests up
to a
> basket of 5 stocks. My
idea is to place the possible stock trades
> using the whole basket of
ETF stocks at night for the next trading
> session. I have an IB
account so I figure I could use an OCA limit
> order. Basically
whenever a trade gets hit first (meets the limit
price
> level), it
trades. The other possible trades all get canceled right
> away. So one
trade actually goes through for the day.
>
> BTW, I like ETF's
because the drawdowns are not as scary.... okay,
> usually not as
scary. Ha! I've been backtesting with:
>
> QQQQ, DIA, SPY, MDY,
IWM
>
> Thank you again!
>
> Andy
>
>
Edward Pottasch wrote:
> >
> > Andy,
> >
>
> I have sent an alternative solution to your private Email. Let me
know
> > if you received it.
> >
> >
Ed
> >
> >
> >
> > ----- Original
Message -----
> > *From:* Andy <mailto:senft@...>
>
> *To:* amibroker@xxxxxxxxxps.com
<mailto:amibroker@xxxxxxxxxps.com>
>
> *Sent:* Thursday, January 29, 2009 12:40 PM
> > *Subject:*
[amibroker] Re: Sell and Buy on different days
> >
> > This
is got to be a very simple task but unfortunately
AmiBroker told
>
> me that I would have to write Backtester Interface code for
this.
I'm
> > sure this has been done a million times. Anyone have sample
code?
> > I'm using EOD data to trade one stock at a time from a
basket
of
> > stocks. The problem is that a selling of a stock
can occur on
the
> > same day as a buy of *another* stock. Of
course the problem is
that
> > the sell trade can occur after the
buy trade.
> >
> > --- In amibroker@xxxxxxxxxps.com
>
> <mailto:amibroker%40yahoogroups.com>, "Andy"
<senft@> wrote:
> > >
> > > How do I fix the
below code so it doesn't buy a different
stock on a
> > > sell
day?
> > >
> > >
--------------------------------------------------------
>
> > // Backtester Options
> > >
SetOption("MaxOpenPositions", 1 );
> > >
SetOption("AllowSameBarExit", False);
> > >
> >
> // Optimization numbers
> > > BuyPeriod =
Optimize("BuyPeriod",16,10,20,2);
> > > BuyFactor =
Optimize("BuyFactor",1.2,0.5,1.5,.1);
> > > SellPeriod =
Optimize("SellPeriod",20,10,20,2);
> > > SellFactor =
Optimize("SellFactor",0.8,0.5,1.5,.1);
> >
>
> > > // ATR formulas
> > > TodaysBuyTarget =
High - BuyFactor * ATR(BuyPeriod);
> > > YesterdaysBuyTarget
= Ref(High,-1) - BuyFactor *
> > Ref(ATR(BuyPeriod),-1);
>
> > YesterdaysSellTarget = Ref(Low,-1) + SellFactor *
> >
Ref(ATR(SellPeriod),-1);
> > >
> > > // Buy/Sell
signals and prices
> > > Buy = YesterdaysBuyTarget >
Low;
> > > BuyPrice = IIf(YesterdaysBuyTarget > Open,
Open,
> > YesterdaysBuyTarget);
> > > Sell =
YesterdaysSellTarget < High;
> > > SellPrice =
IIf(YesterdaysSellTarget < Open, Open,
> >
YesterdaysSellTarget);
> > > Buy =
ExRem(Buy,Sell);
> > > Sell = ExRem(Sell,Buy);
>
> >
> >
> >
> >
----------------------------------------------------------
------
>
>
> >
> > No virus found in this incoming
message.
> > Checked by AVG - http://www.avg.com
> > Version:
8.0.176 / Virus Database: 270.10.15/1921 - Release Date:
1/28/2009 6:37
AM
> >
> >
>