"true" is *any* non zero value. The code is using different non zero values to indicate what the cause of the Sell was. But, they are all still "true".
Mike --- In [email protected], "uman3344" <tan_flamshun...@...> wrote: > > 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 >
