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
|