hi,

if the element in the sell is not zero it is considered true and a sell will 
take place. I think what is meant in the comment is the type of exit.

see help for Applystop, these are the exits used. They do the same thing, exit 
the position, but by giving them a number you know what type of stop you are 
dealing with, rgds, Ed


1 - regular exit
2 - max. loss
3 - profit target
4 - trailing
5 - n-bar stop
6 - ruin stop 




From: uman3344 
Sent: Monday, February 15, 2010 6:17 AM
To: [email protected] 
Subject: [amibroker] about the scale out function


  
>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



Reply via email to