hi Edward,
Why do you utilize the buy and short price from the
previous bar?
Buy = Ref( Buy, -1 );
Short = Ref( Short, -1
);
thx
--- In amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...> wrote:
>
> do you
ever read replies?
>
>
> ----- Original Message -----
> From: gborrageiro
> To: amibroker@xxxxxxxxxps.com
> Sent: Thursday, June 25, 2009 6:36 PM
> Subject: [amibroker]
pyramiding - problems with code
>
>
>
>
>
> hi,
>
> I am testing some scaling out strategies and
can't get the backtester to go short. There's a prob with my code somewhere
but I just can't see where.
>
> Your help would be
appreciated! thanks
>
> SetTradeDelays( 0, 0, 0, 0 );
>
BuyPrice = Avg;
> ShortPrice = Avg;
> SetOption(
"FuturesMode", True );
> SetOption( "InitialEquity", 100000
);
>
> fast = ema(avg,10);
> slow =
ema(avg,100);
>
> Buy = Cross( fast, slow ) ;
>
Short = Cross( slow, fast ) ;
> Sell = 0;
> Cover = 0;
>
> FirstProfitTarget = 0.02;
> TrailingStop = 0.06;
>
StopLoss = 0.02;
>
> priceatbuy = 0;
> highsincebuy =
0;
> priceatshort = 0;
> lowsinceshort = 0;
>
>
exit = 0;
>
> for ( i = 0; i < BarCount; i++ )
>
{
> if ( priceatbuy == 0 AND Buy[ i ] )
> {
> priceatbuy =
BuyPrice[ i ];
> }
>
> if ( priceatshort == 0 AND Short[
i ] )
> {
> priceatshort = ShortPrice[ i ];
> }
>
> if ( priceatbuy > 0 )
> {
> highsincebuy = Max(
High[ i ], highsincebuy );
>
> if ( exit == 0 AND
> High[
i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy )
> {
>
// first profit target hit - scale-out
> exit = 1;
> Buy[ i ] =
sigScaleOut;
> }
>
> if ( Low[ i ] <= ( 1 -
TrailingStop * 0.01 ) * highsincebuy )
> {
> // trailing stop
hit - exit
> exit = 2;
> SellPrice[ i ] = Min( Avg[ i ], ( 1 -
TrailingStop * 0.01 ) * highsincebuy );
> }
>
> if ( Low[
i ] <= ( 1 - StopLoss * 0.01 ) * priceatbuy )
> {
> // Stop
Loss hit - exit
> exit = 3;
> SellPrice[ i ] = Min( Avg[ i ], (
1 - StopLoss * 0.01 ) * priceatbuy );
> }
>
> if ( exit
>= 2 )
> {
> Buy[ i ] = 0;
> Sell[ i ] = exit + 1; //
mark appropriate exit code
> exit = 0;
> priceatbuy = 0; //
reset price
> highsincebuy = 0;
> }
> }
>
>
if ( priceatshort > 0 )
> {
> lowsinceshort = Min( Low[ i ],
lowsinceshort );
>
> if ( exit == 0 AND
> Low[ i ] <=
( 1 - FirstProfitTarget * 0.01 ) * priceatshort )
> {
> // first
profit target hit - scale-out
> exit = 1;
> Short[ i ] =
sigScaleOut;
>
> }
>
> if ( High[ i ] >= ( 1 +
TrailingStop * 0.01 ) * lowsinceshort )
> {
> // trailing stop
hit - exit
> exit = 2;
> CoverPrice[ i ] = Max( Avg[ i ], ( 1 +
TrailingStop * 0.01 ) * lowsinceshort );
> }
>
> if (
High[ i ] >= ( 1 + StopLoss * 0.01 ) * priceatshort )
> {
>
// Stop Loss hit - exit
> exit = 3;
> CoverPrice[ i ] = Max(
Avg[ i ], ( 1 + StopLoss * 0.01 ) * priceatshort );
> }
>
> if ( exit >= 2 )
> {
> Short[ i ] = 0;
>
Cover[ i ] = exit + 1; // mark appropriate exit code
> exit =
0;
> priceatshort = 0; // reset price
> lowsinceshort =
0;
> }
> }
> }
>
> SetPositionSize( 2,
spsShares );
>
> SetPositionSize( 50, spsPercentOfPosition
* ( Buy == sigScaleOut ) ); // scale out 50% of position
>
//SetPositionSize( 50, spsPercentOfEquity );
>