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

[amibroker] Re: optimisation not working correctly?



PureBytes Links

Trading Reference Links

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

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