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