From the amibroker guideline, it gives an example of the 
scaleout code. Can anyone please explain this code for me "Sell[ i ] = exit + 
1;". Although commented, I don't quite understand the meaning of "// mark 
appropriate exit code". As far as I know, the sell function is executed 
according to either 1(true) or 0(false). How does this code work to only sell 
when the exit is => 2 which is when secondprofit target (exit code=2) and 
trailing stop (exit code=3) are crossed.  
----------------------------------------------------------------------------------------------------
Example 4: partial exit (scaling out) on profit target 
stops
Example of code that exits 50% on first profit target, 50% on next profit 
target and everything at trailing stop:
Buy = Cross( MA( C, 10 ), MA( C, 50 ) ); 
Sell = 0; 
// 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