PureBytes Links
Trading Reference Links
|
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 amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 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" zoopfree@xxx > To: amibroker@xxxxxxxxxxxxxxx > 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 amibroker@xxxxxxxxxxxxxxx, 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 > > > > > > >
__._,_.___
**** 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/
__,_._,___
|