backtestRegular was the *default* mode since the beginning, therefore ExRems were redundant from the beginning.
Best regards, Tomasz Janeczko amibroker.com ----- Original Message ----- From: "Grant Noble" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Wednesday, June 18, 2008 1:44 PM Subject: Re: [amibroker] Re: optimisation not working correctly? > So SetBacktestMode(backtestRegular) has made ExRem redundant? Cool. G > > Tomasz Janeczko wrote: >> Actually ExRem functions should NOT be used at all in any trading system >> (unless you specifically *need* to convert from state to signal form for >> some logic). >> >> They are completely redundant and actually are the source of problems point >> (1). >> >> Specifically they are NOT needed by the backtester! Backtester does this >> job internally way better (because it RESPECTS from/to dates). >> Backtester in regular mode does not enter more than one pos on one symbol at >> a time: >> http://www.amibroker.com/guide/h_portfolio.html >> therefore ExRems are not needed at all. >> >>>> >>>> Buy=ExRem(Buy,Sell); // REMOVE IT ! >>>> Sell=ExRem(Sell,Buy); // REMOVE IT ! >> >> Best regards, >> Tomasz Janeczko >> amibroker.com >> ----- Original Message ----- >> From: "Mike" <[EMAIL PROTECTED]> >> To: <[email protected]> >> Sent: Wednesday, June 18, 2008 10:10 AM >> Subject: [amibroker] Re: optimisation not working correctly? >> >> >>> Rich, >>> >>> There are a couple of reasons for why your results are not as >>> expected. >>> >>> 1. Misaligned signals due to missing checks for "barinrange". >>> 2. Coding errors. >>> 3. Remaining Open positions skewing the figures. >>> >>> 1. The largest contributor for the "faulty" results is that even >>> though your backtest range is defined as from xxx to yyy, all >>> calculations are still performed over the entire data range. So, your >>> Buy array will contain signals for all bars, even bars that precede >>> your starting date. As such, your counting of bars within your loop >>> will include signals received before the first date of your backtest >>> and your Sell signals will therefore be misaligned. >>> >>> For example; if your backtest started on Feb 1, 2008 and a Buy signal >>> was found on Jan 28, 2008 and again on Feb 5, 2008. Then using a 12 >>> bar length, your code would put the first Sell signal on Feb 13, 12 >>> days after the Jan 28 Buy instead of 12 days after the Feb 5 Buy. >>> >>> The backtester would later filter out all signals occuring before >>> your start date (e.g. filter out the Jan 28 buy), but would keep >>> those occurring after it (i.e. the Feb 5 Buy and the Feb 13 Sell). >>> >>> The result is that your bars held will now be incorrect. This would >>> have a ripple effect as the ExRem might now end up removing some of >>> your intended Sells and keeping the unintended ones. >>> >>> 2. The next problem is some minor coding errors. >>> 2a. You need to reset the bar count after recognizing a Sell. >>> 2b. You need to set the bar count to 1 after recognizing a Buy. >>> >>> 3. Any remaining open positions are included in the bars held >>> calculations of the backtester. So, if you have open positions that >>> are 3 days old, they will pull down the average 12 day bars held >>> figure to be less than 12. >>> >>> Your modified code should now look something like the following. I do >>> still see the odd long trade. So, something is still not quite right. >>> Might be a case of buy/sell on the same date or something along those >>> lines. But, this should get you a lot closer to where you want to >>> be :) >>> >>> Mike >>> >>> SetTradeDelays( 0, 0, 0, 0 ); >>> PositionSize = -10; >>> >>> PB = Optimize( "PB", 0.99, 0.97, 0.998, 0.002 ); >>> Length = Optimize( "Length", 12, 3, 15, 1 ); >>> >>> InRange = Status( "barinrange" ); >>> Cond0 = Ref(InRange, -2); >>> Cond1 = Ref( C, -1 ) < PB * Ref( C, -2 ); >>> Cond2 = C > Ref( C, -1 ); >>> >>> Buy = Cond0 AND Cond1 AND Cond2; >>> Sell = False; >>> inTrade = False; >>> bcnt = 0; >>> >>> for ( i = 0; i < BarCount; i++ ) >>> { >>> if ( NOT Cond0[i] ) >>> { >>> continue; >>> } >>> >>> if ( inTrade ) >>> { >>> Buy[i] = False; >>> } >>> >>> if ( ++bcnt == Length ) >>> { >>> inTrade = False; >>> Sell[i] = True; >>> bcnt = 0; >>> } >>> else >>> { >>> if ( Buy[i] ) >>> { >>> inTrade = True; >>> bcnt = 1; >>> } >>> } >>> } >>> >>> Buy = ExRem( Buy, Sell ); >>> Sell = ExRem( Sell, Buy ); >>> >>> >>> --- In [email protected], "foxblade2000invest" <[EMAIL PROTECTED]> >>> wrote: >>>> I'm trying to optimise with the folowing code. When I look at the >>>> results, the winning and losing average bars (which should be fixed) >>>> does not correspond at all with the "length" parameter, which should >>>> govern it? >>>> >>>> The code is as follows; >>>> >>>> PB=Optimize("PB",0.99,0.97,0.998,0.002); >>>> Length=Optimize("Length",12,3,15,1); >>>> >>>> Cond1=Ref(C,-1)<PB*Ref(C,-2); >>>> Cond2=C>Ref(C,-1); >>>> >>>> >>>> Buy = Cond1 AND Cond2; >>>> Sell = False; >>>> inTrade = False; >>>> bcnt = 0; >>>> >>>> for (i = 0; i < BarCount; i++) >>>> { if (inTrade) >>>> { >>>> Buy[i] = False; >>>> } >>>> if (++bcnt == Length) >>>> {inTrade = False; >>>> Sell[i] = True; >>>> }else >>>> { >>>> if (Buy[i]) >>>> {inTrade = True;bcnt = 0; >>>> } >>>> }} >>>> >>>> Buy=ExRem(Buy,Sell); >>>> Sell=ExRem(Sell,Buy); >>>> >>>> Can anyone help? >>>> >>>> Thanks, >>>> Rich >>>> >>> >>> >>> ------------------------------------ >>> >>> Please note that this group is for discussion between users only. >>> >>> To get support from AmiBroker please send an e-mail directly to >>> SUPPORT {at} amibroker.com >>> >>> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: >>> http://www.amibroker.com/devlog/ >>> >>> For other support material please check also: >>> http://www.amibroker.com/support.html >>> Yahoo! Groups Links >>> >>> >>> >> >> ------------------------------------ >> >> Please note that this group is for discussion between users only. >> >> To get support from AmiBroker please send an e-mail directly to >> SUPPORT {at} amibroker.com >> >> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: >> http://www.amibroker.com/devlog/ >> >> For other support material please check also: >> http://www.amibroker.com/support.html >> Yahoo! Groups Links >> >> >> >> >> ------------------------------------------------------------------------ >> >> >> No virus found in this incoming message. >> Checked by AVG. >> Version: 8.0.100 / Virus Database: 270.4.0/1506 - Release Date: 6/17/2008 >> 4:30 PM > > ------------------------------------ > > Please note that this group is for discussion between users only. > > To get support from AmiBroker please send an e-mail directly to > SUPPORT {at} amibroker.com > > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: > http://www.amibroker.com/devlog/ > > For other support material please check also: > http://www.amibroker.com/support.html > Yahoo! Groups Links > > >
