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, spsPercentOfPosition * ( Buy == sigScaleOut ) );
// scale out 50% of position


//==============================================================

--- In [email protected], "gmorlosky" <[EMAIL PROTECTED]> 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, spsPercentOfPosition * ( Buy == 
> sigScaleOut ) ); // scale out 50% of position
>


Reply via email to