Well, it's not completely clear to me so here are some ideas:

 

SellPrice is a built-in ARRAY used to hold the ARRAY of Sell prices which are normally set to Open or Close. It seems you are trying to change that array to mean something else, like your target price. Plus it IS an ARRAY so when it's set it does not carry forward to the next bar unless you code it to do so.

 

Plus you are trying to set the SellPrice based on hitting a High, but you have daily data. You don't know if the High came first or the Low. Your code assumes the high always comes first.

 

It's a lot of code to go through so the above (partial) analysis may be off base. I hope it is not and gives you a place to start. I have to do my own trading for the evening now J

--

Terry

 

-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of onelkm
Sent: Monday, October 02, 2006 19:23
To: [email protected]
Subject: [amibroker] Profit stops with loop - not working as it should

 

I am trying to learn loops by using the example below from the help

files. The sell price when the profit stop is hit should be defined

by the line:

SellPrice[ i ] = Max( Open[ i ], ( 1 + firstProfitTarget * 0.01 ) * priceatbuy );

Instead of this, the close for the day is the sell price. Why? I am

using Yahoo data with OHLC.

Thanks in advance

Larry

 

/*Example 4: partial exit (scaling out) on profit target stops

Scale In/Out - showing the number of scale-in and scale-out

operations within given trade

Example of code that exits 50% on first profit target, 50% on next

profit target AND everything at trailing stop:*/

 

SetOption("NoDefaultColumns",0);      

SetOption("InitialEquity",1000);        

SetOption("AllowSameBarExit",1);            

SetOption("ActivateStopsImmediately",1);   

SetOption("AllowPositionShrinking",1);     

SetOption("FuturesMode",0);             

SetOption("InterestRate",0);              

SetOption("MaxOpenPositions",1000);      

SetOption("MinShares",.001);             

SetOption("PriceBoundChecking",1) ;       

SetOption("CommissionMode",1); //% per trade 

SetOption("CommissionAmount",0);           

SetOption("MarginRequirement",100); //No margin  

SetOption("ReverseSignalForcesExit",1);      

SetOption("UsePrevBarEquityForPosSizing",1);               

SetTradeDelays(0,0,0,0);                             

 

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 = 1; // profit

SecondProfitTarget = 2;// in percent

TrailingStop = 3;// 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;

              SellPrice[ i ] = Max( Open[ i ], ( 1 + firstProfitTarget * 0.01 ) * priceatbuy );

         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( 100, spsPercentOfEquity );

SetPositionSize( 50, spsPercentOfPosition * ( 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 other support material please check also:
http://www.amibroker.com/support.html






SPONSORED LINKS
Software support Small business finance Business finance online
Business finance training Business finance course

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

__,_._,___

Reply via email to