[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: optimisation not working correctly?



PureBytes Links

Trading Reference Links

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" <gruntus@xxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
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" <sfclimbers@xxxxxxxxx>
>> To: <amibroker@xxxxxxxxxxxxxxx>
>> 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 amibroker@xxxxxxxxxxxxxxx, "foxblade2000invest" <foxblade@xxx> 
>>> 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
> 
> 
> 

------------------------------------

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

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/