I've read the manual. And I've always had that SetOption in my code when
using custom backtest procedure. But I still get a COM error in this
particular case. That's my point.
Maybe I am doing something else that's equally careless, but it's not
the SetOption.
Below is a larger portion of my code, including all the backtester
settings, with SetOption("UseCustomBacktestProc", True );
It still generates an error:
//--------------------------------------------------------------------
// GET SIGNAL LIST OF BACKTESTER, AND SUBTRACT SLIPPAGE FROM EXITS
//--------------------------------------------------------------------
SetCustomBacktestProc("");
if ( Status( "action" ) == actionPortfolio )
{
bo = GetBacktesterObject();
bo.PreProcess(); // Initialize backtester
for(bar=0; bar < BarCount; bar++)
{
for( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() )
{
if( sig.IsExit() )
{
if ( sig.IsLong() ) ExitTrue = sig.Price - Slippage;
else ExitTrue = sig.Price + Slippage;
sig.Price = ExitTrue;
}
}
bo.ProcessTradeSignals( bar );
}
bo.PostProcess(); // Finalize backtester
}
//----------------------------------------------------
// BackTester Settings
//----------------------------------------------------
tradeDelay = 0;
maxContractsPerPair = 1;
maxPairsTraded = 1; // Increase to the
size of the watchlist when trading a watchlist
TickSize = 0.0001; // The minimum price
move of symbol
SlippagePips = 2;
Slippage = TickSize * SlippagePips; // In real-world
trading there may be slippage of 1-2 pips.
BarsExit = 18;
Stop = TickSize * 10;
Profit = TickSize * 20;
SetOption("UseCustomBacktestProc", True);
SetBarsRequired(10000, 0);
SetOption("AllowPositionShrinking", False);
SetOption("AllowSameBarExit", True);
SetOption("FuturesMode", 1); // Treat backtest as
regular shares for Interactive Brokers (IB)
SetOption("InitialEquity", 100000);
SetOption("InterestRate",0);
SetOption("MaxOpenPositions", maxContractsPerPair * maxPairsTraded);
SetOption("MinPosValue", 0);
SetOption("MinShares", 100000);
SetOption("PriceBoundChecking", True );
SetOption("ReverseSignalForcesExit", False);
SetOption("UsePrevBarEquityForPosSizing", False );
SetTradeDelays(0, 0, 0, 0);
SetPositionSize( 100000, spsShares ); // One share = 1
Euro for EUR.USD, and we buy in groups of 100,000 shares
MarginDeposit = -2.5; // -2.5 = 2.5% = 40:1
margin. IB goes by percentage.
baseCurrency = StrLeft(Name(), 3); // eg. EURJPY gives
EUR.
quoteCurrency = StrRight(Name(),3); // eg. EURJPY gives
JPY.
PointValue = 1;
if ( QuoteCurrency == "JPY" ) // Adjust tick size
for Japanese yen
{
TickSize = 0.01;
SetPositionSize( 900, spsShares);
SetOption("MinShares", 900);
}
--- In [email protected], "Tomasz Janeczko" <gro...@...> wrote:
>
> Hello,
>
> Is reading the manual really that complicated?
>
> http://www.amibroker.com/guide/a_custombacktest.html
>
> You MUST use SetCustomBacktestProce or
SetOption("UseCustomBacktestProc", True );
> to use custom backtester.
> Otherwise it is NOT enabled, therefore will have no impact. That is
pretty obvious.
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: "ozzyapeman" zoopf...@...
> To: [email protected]
> Sent: Thursday, March 19, 2009 4:50 PM
> Subject: [amibroker] Re: Simple slippage implemented in CBT generates
COM error
>
>
> > Still does not work. I get a COM error if the first line,
SetCustomBacktestProc("");, is included for some reason. And if I take
> > that line out, it runs but has no effect. Exit prices remain
unchanged.
> >
> >
> >
> > --- In [email protected], Graham kavemanperth@ wrote:
> >>
> >> you still need to loop through the signals as I think you
originally
> >> had, not trades.
> >> then have bo.ProcessTradeSignals( bar ); after the signal loop
> >> I was just trying to show the additional lines of code you needed
to include
> >>
> >>
> >> SetCustomBacktestProc("");
> >>
> >> if ( Status( "action" ) == actionPortfolio )
> >> {
> >> bo = GetBacktesterObject();
> >> bo.PreProcess(); // Initialize backtester
> >>
> >> for(bar=0; bar < BarCount; bar++)
> >> {
> >> for( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() )
> >> {
> >> if( sig.IsExit() )
> >> {
> >> if ( sig.IsLong() ) ExitTrue = sig.Price - Slippage;
> >> else ExitTrue = sig.Price + Slippage;
> >> sig.Price = ExitTrue;
> >> }
> >> }
> >> bo.ProcessTradeSignals( bar );
> >> }
> >>
> >> bo.PostProcess(); // Finalize backtester
> >> }
> >>
> >>
> >>
> >> --
> >> Cheers
> >> Graham Kav
> >> AFL Writing Service
> >> http://www.aflwriting.com
> >>
> >
> >
> >
> >
> > ------------------------------------
> >
> > **** IMPORTANT PLEASE READ ****
> > This group is for the discussion between users only.
> > This is *NOT* technical support channel.
> >
> > TO GET TECHNICAL SUPPORT send an e-mail directly to
> > SUPPORT {at} amibroker.com
> >
> > TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
> > http://www.amibroker.com/feedback/
> > (submissions sent via other channels won't be considered)
> >
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> >
> > Yahoo! Groups Links
> >
> >
> >
>