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 [email protected], "Edward Pottasch" <empotta...@...> wrote: > > do you ever read replies? > > > ----- Original Message ----- > From: gborrageiro > To: [email protected] > 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 ); >
