PureBytes Links
Trading Reference Links
|
Try using Custom Backtest Procedure. Basic Information are in manual and this article.
Hope this help.
--- In amibroker@xxxxxxxxxxxxxxx, "kevinkee20" <kevinkee20@xxx> wrote: > > I'm trying to write a money management AFL. I start off with the scaling-out example in the user guide, and add just one more condition - after openinig a position, if it is initially profitable but before it hits the profit target of say 20% it appears to be turning into a loss. In this case I want to set the stop to be the BuyPrice. > > Unfortunately it doesn't work - it just doesn't exit when the price drops below the BuyPrice. > > Below please find the full AFL, would anyone be able to help ? > > Buy = Cross( MA( C, 10 ), MA( C, 30 ) ); > Sell = 0;//Cross(MA(C,30), MA(C,10)); > > // 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 > SetTradeDelays( 0, 0, 0, 0 ); /* delay entry/exit by one bar */ > > FirstProfitTarget = 20; // profit > SecondProfitTarget = 40; // in percent > TrailingStop = 25; // also in percent > > priceatbuy=0; > highsincebuy = 0; > > exitoriginal = 0; > exitriskfree = 0; > > exit = 0; > > for( i = 0; i < BarCount; i++ ) > { > if( priceatbuy == 0 AND Buy[ i ] ) > { > priceatbuy = BuyPrice[ i ]; > exitoriginal = 1; > exitriskfree = 0; > } > > > if( priceatbuy > 0 ) > { > highsincebuy = Max( High[ i ], highsincebuy ); > > if (exitoriginal == 1 AND Close[i] > priceatbuy) > { > exitoriginal = 0; > exitriskfree = 1; > } > > if (exitriskfree == 1 AND Low[i] <= priceatbuy) > { > exit = 3; > SellPrice[i] = priceatbuy; > exitoriginal = 0; > exitriskfree = 0; > } > > > 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 AND > exitriskfree ==1) > { > // 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 ) AND exitriskfree==1) > { > // 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( 20, spsPercentOfEquity ); > SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut ) ); // scale out 50% of position > // scale out 50% of position > PlotShapes( (Buy) * shapeUpArrow , IIf( (Buy), colorGreen,colorBlue ), 0,IIf( (Buy), L,H ),-20 ); > Plot( Close, "Price", IIf( Close > Open, colorGreen, colorRed ),styleCandle | styleThick ); > PlotShapes( (ExRem(Sell,Buy)) * shapeSmallDownTriangle , colorLightOrange, 0,H ,-15 ); > > Plot( MA(C, 10), _DEFAULT_NAME(), colorGreen, styleLine); > Plot( MA(C, 30), _DEFAULT_NAME(), colorRed, styleLine); >
__._,_.___
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
__,_._,___
|