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

Reply via email to