[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Using example AFL in reference - can't set trailing stop for sigscale price



PureBytes Links

Trading Reference Links

A pair of mad scientists!

----- Original Message ----
From: Graham <kavemanperth@xxxxxxxxx>
To: amibroker@xxxxxxxxxxxxxxx
Sent: Sunday, April 27, 2008 3:44:02 AM
Subject: Re: [amibroker] Re: Using example AFL in reference - can't set trailing stop for sigscale price

It should be
BuyPrice[i] = ( 1 + FirstProfitTarget * 0.01 ) * PriceAtBuy;

--
Cheers
Graham Kav
AFL Writing Service
http://www.aflwriti ng.com

2008/4/23 aryah55 <rrussell@xxxxxxx org.au>:
>
> I have never got sigscaleout example 4 (or example 3 for that matter)
> from manual to work - until now (I think).
> As pointed out by Graham in previous messages, there is a critical
> line missing from the manual code and yours - see line under the Buy /
> sigScaleout line. This is in fact what you are looking for I think -
> the sigscaleout buy price code is
> BuyPrice[i] = FirstProfitTarget + PriceAtBuy;
> I dont know why this line works - it just does!! [I would have thought
> that the BuyPrice for the second parcel should be original buy price
> (Price at Buy) plus 10% thereof not plus 10 but???]
> I had other problems with the published code particularly with the
> Trail stop and have solved them with the revised code below. By
> placing the revised trail as an ELSE condition in both the initial and
> second stages, it exits at the appropriate stop ie its 10% below the
> initial buyprice and, after the scale out,it becomes 10% below the
> sigscaleout buyprice. Hope this helps.
>
> // 23April 2008.
> //========== ========= ======= SIGSCALEOUT
> ============ ========= ========= ========= ========= ========= ====
> // BASED ON A COPY OF EXAMPLE 4 FROM MANUAL RE SCALE IN AND OUT
> // EXAMPLE INCLUDES SIMPLE SCALE OUT OF POSITION ON PROFIT TARGETS ONLY
> // EXAMPLE (AND EXAMPLE3) DIN'T WORK FOR ME - OTHERS AS WELL AS NOTED
> ON MANY MESSAGES ON FORUM
> // MY PROBLEMS INCLUDED - SCALEOUT SCALED 90-95% OF POSITION ON FIRST
> PROFIT TARGET EVEN WHEN SET TO 50%
> // EXAMPLE DID WORK FOR SOME INCLUDING GRAHAM
> // TRACED FIRST PROBLEM AFTER TOO MANY HOURS TO THE INTERACTION
> BETWEEN SETTRADEDELAYS AND SIGSCALEOUT
> // MY FIX CREATED A SECOND PROBLEM - TRAIL WAS BEING EXECUTED ON SAME
> DAY THAT 2ND PROFIT TARGET MET - UNDERSTATING PROFIT.
> // NOT BEING ANY SORT OF PROGRAMMER, MY SOLUTIONS MAY BE
> ROUGH/INEFFICIENT BUT FOR WHAT ITS WORTH -
> // SOLUTION TO PROBLEM 1 - SetTradeDelays to (0,0,0,0) (MY default for
> EOD trading is (1,0,1,0))
> // Defer Buy Signal to today from yesterday -
> // Add BUYPRICE code below Buy SigScaleOut line as per Graham's
> message (Thanks)
> // Raw Signals now wrong but built in backtest ok
> // SOLUTION TO PROBLEM 2 - Change Trail and make an ELSE statement on
> both of the initial entry and the scale out IF statements
> // ============ ========= ========= ===== EXAMPLE 4 SOLVED (FOR ME)
> ============ ========= ========= ========
> //========== ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ==
> Buy = Cross( EMA( C, 8 ), EMA( C, 13 ) );
> Sell = 0; // Must be 0 as cannot use Sell if using scaleInOut?
> // My Long Default In Settings - Enter at the open tomorrow, exit
> at the close today!
>
> // TO AVOID SETTRADEDELAY Problem One -
> ============ ========= ========= ========= ========= ========= =======
> SetTradeDelays( 0,0,0,0); // ADDED THIS CODE - MUST SET THIS TO
> ZERO else SCALE OUT NO WORK!!!
> HoldBuy = 0;
> for( i = 0; i < BarCount-1; i++ )
> {
> if( Buy[i])
> {
> HoldBuy[i] = 0;
> HoldBuy[i+1] = 1;
> }
> }
> Buy = HoldBuy; // BUY signal now delayed to today from yesterday
> //
> //========== ========= ========= ========= ========= ========= ========= ========= ========= ========= =======
>
>
> // 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
> // nb - "Sell will exit the total trade AND cannot be used as pyramid
> exit. Only Buy can be used to scale in AND out"
>
>
> 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;
> BuyPrice[i] = FirstProfitTarget + PriceAtBuy; // ADDED per Group
> message from Graham - MUST HAVE
> }
> else // Added ELSE here for Initial entry trail stop
> {
> if( exit == 0 AND 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 == 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 );
> }
> else // Added ELSE here for trail stop on scale out parcel
> {
> if(exit == 1 AND Low[ i ] <= ( 1 - TrailingStop * 0.01 ) *
> highsincebuy )
> {
>
> exit = 3;
> SellPrice[ i ] = Min( Open[ i ], ( 1 - TrailingStop * 0.01 ) *
> highsincebuy );
> }
> }
> // REMOVE ORIGINAL TRAIL STOP FROM HERE
> if( exit >= 2 )
> {
> //Buy[i] = 0; // REM this as not necessary?
>
> Sell[ i ] = exit+1; // mark appropriate exit
> code(3profit, 4Trail) AND define SELL (else no sells ever)
>
> exit = 0;
> priceatbuy = 0; // reset price
> highsincebuy = 0;
> }
> }
> }
> SetPositionSize( 2, spsPercentOfEquity) ; // 2% of equity
>
> SetPositionSize( 50, spsPercentOfPositio n * ( Buy == sigScaleOut ) );
> // scale out 50% of position
>
>
> //========== ========= ========= ========= ========= ========= =======
>
>
>
> --- In amibroker@xxxxxxxxx ps.com, "gmorlosky" <gmorlosky@x ..> wrote:
> >
> > I would like to have an OR for the trailing stop of either
> > the "original Buy price OR the last sigscaleout price". Can't figure
> > how to reference the last sigscaleout price. Help please.
> >
> > 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, spsPercentOfPositio n * ( Buy ==
> > sigScaleOut ) ); // scale out 50% of position
> >


__._,_.___

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___