You need to define the BuyPrice at the scaleout bar
-- Cheers Graham Kav AFL Writing Service http://www.aflwriting.com 2009/2/2 Pete <dryhe...@cox.net>: > 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 >