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

[amibroker] I am lost



PureBytes Links

Trading Reference Links

Hi,
Been playing with a code that I copied to familairize myself with 
some of the functionality of Amibroker...As you can see,the entry is 
a simple moving average crossover,that exits 50% of the position up 
20% and the remaining 50% up 30%.There is also a trailing stop..

When i check a detailed log of the trade,I get very bizzare results.

An example is HANS..On 10/31/2005 I go long 205 shares of HANS@ 48.59

On 11/3,I scale out of 176 shares@xxxxxxxxxx is 86% of my 
position,when i am supposed to scale out of half.As its not my 
code,and i am trying to learn Ami code,i really dont know what went 
wrong..


	

10/31/2005
		Enter Long, HANS, Price: 48.59, Shares: 205, 
Commission: 0, Rank: 1, Equity 100000, Margin Loan: 0, Fx rate: 1


			11/3/2005
		Exit signals:HANS=Scale-Out, 
	Scale-Out Long HANS, Price 59.74, Shares 176, Fx Rate 1, 
Number of shares - Current: 29, Exited: 176, Max: 205, Avg. Entry 
Price 48.59, Avg. Exit Price 59.74, Avg Fx. Rate Entry 1, Exit 1, 
	


The code is as follows
				
Buy = Cross(C, MA( C,21) ); 
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 = 20; // profit 
SecondProfitTarget =30; // in percent 
TrailingStop = 50; // 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( 10, spsPercentOfEquity ); 
SetPositionSize( 50, spsPercentOfPosition * ( Buy == 
sigScaleOut ) ); // scale out 50% of position