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