hi,
I am testing some scaling out strategies and can't get the
backtester to go short. There's a prob with my code somewhere but I just can't
see where.
Your help would be appreciated!
thanks
SetTradeDelays( 0, 0, 0, 0 );
BuyPrice = Avg;
ShortPrice =
Avg;
SetOption( "FuturesMode", True );
SetOption(
"InitialEquity", 100000 );
fast = ema(avg,10);
slow =
ema(avg,100);
Buy = Cross( fast, slow ) ;
Short = Cross( slow,
fast ) ;
Sell = 0;
Cover = 0;
FirstProfitTarget = 0.02;
TrailingStop = 0.06;
StopLoss = 0.02;
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 (
priceatshort == 0 AND Short[ i ] )
{
priceatshort = ShortPrice[ 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 ( Low[ i ]
<= ( 1 - TrailingStop * 0.01 ) * highsincebuy )
{
// trailing stop
hit - exit
exit = 2;
SellPrice[ i ] = Min( Avg[ i ], ( 1 - TrailingStop
* 0.01 ) * highsincebuy );
}
if ( Low[ i ] <= ( 1 - StopLoss *
0.01 ) * priceatbuy )
{
// Stop Loss hit - exit
exit =
3;
SellPrice[ i ] = Min( Avg[ i ], ( 1 - StopLoss * 0.01 ) * priceatbuy
);
}
if ( exit >= 2 )
{
Buy[ i ] = 0;
Sell[ i ] = exit +
1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset
price
highsincebuy = 0;
}
}
if ( priceatshort > 0
)
{
lowsinceshort = Min( Low[ i ], lowsinceshort );
if ( exit ==
0 AND
Low[ i ] <= ( 1 - FirstProfitTarget * 0.01 ) * priceatshort
)
{
// first profit target hit - scale-out
exit = 1;
Short[ i ] =
sigScaleOut;
}
if ( High[ i ] >= ( 1 + TrailingStop * 0.01 )
* lowsinceshort )
{
// trailing stop hit - exit
exit =
2;
CoverPrice[ i ] = Max( Avg[ i ], ( 1 + TrailingStop * 0.01 ) *
lowsinceshort );
}
if ( High[ i ] >= ( 1 + StopLoss * 0.01 ) *
priceatshort )
{
// Stop Loss hit - exit
exit = 3;
CoverPrice[ i ]
= Max( Avg[ i ], ( 1 + StopLoss * 0.01 ) * priceatshort );
}
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,
spsPercentOfEquity );