Tomasz,

I took a look of my code really hard, and found the possible reason. My code 
set backtester mode to "backtestRegularRaw". For this mode, if there are 
multiple buy before sell, the example code for scale in and out below seems not 
to work. I think the code cannot determine the priceatbuy and highsincebuy 
properly. The reason is we don't know when the trade will be entered until 
portfolio test is done. Am I understanding this correctly? Is there a sample 
code for backtestRegularRaw mode? 

Many thanks,
Steven

// the system will exit 
// 50% of position if FIRST PROFIT TARGET stop is hit 
// 50% of position is SECOND PROFIT TARGET stop is hit 
// 100% of position if TRAILING STOP is hit 

FirstProfitTarget = 10; // profit 
SecondProfitTarget = 20; // in percent 
TrailingStop = 10; // also in percent 

priceatbuy=0; 
highsincebuy = 0; 

exit = 0; 

for( i = 0; i < BarCount; i++ ) 
{ 
   if( priceatbuy == 0 AND Buy[ i ] ) 
    { 
       priceatbuy = BuyPrice[ 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( exit == 1 AND 
          High[ i ] >= ( 1 + SecondProfitTarget * 0.01 ) * priceatbuy ) 
       { 
         // second profit target hit - exit 
         exit = 2; 
         SellPrice[ i ] = Max( Open[ i ], ( 1 + SecondProfitTarget * 0.01 ) * 
priceatbuy ); 
       } 

      if( Low[ i ] <= ( 1 - TrailingStop * 0.01 ) * highsincebuy ) 
       { 
         // trailing stop hit - exit 
         exit = 3;    
         SellPrice[ i ] = Min( Open[ i ], ( 1 - TrailingStop * 0.01 ) * 
highsincebuy ); 
       } 

      if( exit >= 2 ) 
       { 
         Buy[ i ] = 0; 
         Sell[ i ] = exit + 1; // mark appropriate exit code 
         exit = 0; 
         priceatbuy = 0; // reset price 
         highsincebuy = 0; 
       } 
    } 
} 

SetPositionSize( 50, spsPercentOfEquity ); 
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut ) ); // scale 
out 50% of position


Reply via email to