hi Edward,
Why do you utilize the buy and short price from the
previous bar?
Buy = Ref( Buy, -1 );
Short = Ref( Short, -1
);
thx
--- In amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...> wrote:
>
> do you
ever read replies?
>
>
> ----- Original Message -----
> From: gborrageiro
> To: amibroker@xxxxxxxxxps.com
> Sent: Thursday, June 25, 2009 6:36 PM
> Subject: [amibroker]
pyramiding - problems with code
>
>
>
>
>
> 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
);
>