>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