PureBytes Links
Trading Reference Links
|
hi,
I'm trying to test taking profits on a system using two standard contracts (notional $1mn each contract), with an exit after 5 profitable 5 pips on the first mn, then a trailing 10 pip stop thereafter.
I have a coding error somewhere, as long positions work fine but short positions do not.
please help!
thx
Buy = Cross( MA( C, 10 ), MA( C, 50 ) );
Sell = 0;
short = Cross( MA( C, 50 ), MA( C, 10 ) );
Cover = 0;
FirstProfitTarget = 0.0005;
SecondProfitTarget = 0.0100;
TrailingStop = 0.0010;
priceatbuy = 0;
highsincebuy = 0;
priceatshort = 0;
lowsinceshort = 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 ] >= FirstProfitTarget + priceatbuy )
{
// first profit target hit - scale-out
exit = 1;
Buy[ i ] = sigScaleOut;
}
if ( exit == 1 AND
High[ i ] >= SecondProfitTarget + priceatbuy )
{
// second profit target hit - exit
exit = 2;
SellPrice[ i ] = Max( Open[ i ], SecondProfitTarget + priceatbuy );
}
if ( Low[ i ] <= highsincebuy - TrailingStop )
{
// trailing stop hit - exit
exit = 3;
SellPrice[ i ] = Min( Open[ i ], highsincebuy - TrailingStop );
}
if ( exit >= 2 )
{
Buy[ i ] = 0;
Sell[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset price
highsincebuy = 0;
}
}
}
for ( i = 0; i < BarCount; i++ )
{
if ( priceatShort == 0 AND Short[ i ] )
{
priceatShort = ShortPrice[ i ];
}
if ( priceatShort < 0 )
{
lowsinceshort = Min( Low[ i ], lowsinceshort );
if ( exit == 0 AND
Low[ i ] <= -FirstProfitTarget + priceatShort )
{
// first profit target hit - scale-out
exit = 1;
Short[ i ] = sigScaleOut;
}
if ( exit == 1 AND
Low[ i ] <= -SecondProfitTarget + priceatShort )
{
// second profit target hit - exit
exit = 2;
SellPrice[ i ] = Min( Open[ i ], -SecondProfitTarget + priceatShort );
}
if ( High[ i ] >= lowsinceshort + TrailingStop )
{
// trailing stop hit - exit
exit = 3;
SellPrice[ i ] = Max( Open[ i ], lowsinceshort + TrailingStop );
}
if ( exit >= 2 )
{
Short[ i ] = 0;
Cover[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatShort = 0; // reset price
lowsinceshort = 0;
}
}
}
SetPositionSize( 2, spsShares );
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut ) ); // scale out 50% of position
SetPositionSize( 50, spsPercentOfPosition * ( Short == sigScaleOut ) ); // scale out 50% of position
PositionSize = MarginDeposit = 1;
NumContracts = 2;
PositionSize = NumContracts * MarginDeposit;
------------------------------------
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|