I have spent several hours trying to implement the Scale-out strategy
using futures contracts. I have finally come to the conclusion that
the example in the help file does not create a true scale out system. 

Here's what I found:
On the bar where a scale out is triggered, instead of reporting the
target price that triggered the scale out, the back tester actually
reports the open or close of that bar. (depending upon what settings
are used in the trades tab). This does not match a real trading
environment where you would place sell limit orders at your various
targets and wait for the price to hit them. 

I have spent many frustrated hours trying to get it to show the actual
target price as the exit price in the back tester but so far this
alludes me. 
Here's an example of what I am trading in real life but so far cannot
write code to duplicate in the back tester:
Enter long 3 contracts.
Stop loss set at buy price minus 1.25 points
Target one set to buy price plus 1.25 points
Target two set to buy price plus 2.5 points
Remaining contract exits when close crosses below EMA(C, 20).

The code below is what I have accumulated so far:

Buy = <<Insert favorite buy signal here>>; 
Sell = 0; 
SystemExit = Cross(EMA(C, 20), Close);
// 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 = 1.25; // profit 
SecondProfitTarget = 2.5; // in points
TrailingStop = 1.25; // also in points

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 <= 2 AND
                                SystemExit[i] )
                {
                //system exit hit - exit any remaining contracts
                SellPrice[i] = Close[i];
                exit = 3;
                } 

      if( exit == 0 AND 
          High[ i ] >= FirstProfitTarget + priceatbuy ) 
       { 
         // first profit target hit - scale-out 
         exit = 1; 
         Buy[ i ] = sigScaleOut; 
       } 

      if( exit == 0 AND 
          High[ i ] >= SecondProfitTarget + priceatbuy ) 
       { 
         // second profit target hit - exit 
         exit = 2; 
         Buy[ i ] = sigScaleOut; 
                  //SellPrice[ i ] = Max( Open[ i ], SecondProfitTarget + 
priceatbuy ); 
       }

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

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

SetPositionSize( 15, spsPercentOfEquity ); //Equity is set at 10,000.00
SetPositionSize( 1/3, spsPercentOfPosition * ( Buy == sigScaleOut ) );
// scale out 50% of position



Reply via email to