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
