Could you please post the code that now runs? I am also interested in
pyramiding on the short side and would like to see how you programmed it.
Thanks
Larry
--- In [email protected], "Edward Pottasch" <empotta...@...> wrote:
>
> the code is just an example and I believe I used your setup system:
>
> Buy = ( Cross( MA( C, 10 ), MA( C, 50 ) ) ) * timearray;
> Buy = Ref(Buy,-1); BuyPrice = O;
>
> in this case you use the Close price in the Buy statement. In real time
> systems the Close price is equal to the Last price. So within the timeframe
> you use (e.g. 1 minute bars) a signal may appear and disappear within the
> bar. You are only interested in the true close price of that bar. This is
> known only at the end of the bar. That's why when adding Buy = Ref(Buy,-1);
> you shift the Buy array 1 element forward and use the signal of the previous
> bar and you enter at the open. This way you avoid entering a trade of which
> the signal disappears later in the bar.
>
> Another reason is that I myself use it for my real time system is that
> trading a cross is often not realistic in the practice unless you enter a
> trade using Market (MKT) orders. For instance if you let the High cross a
> certain level you avoid getting multiple signals and also the signal will not
> disappear but often this is exacly the time that the price is running away
> from you and often you will not be able to enter the trade at the cross
> price. So I stopped fooling myself with these 20000% per year results and
> wait for the bar to finish and enter at the open of the next bar.
>
> regards, Ed
>
>
>
> ----- Original Message -----
> From: gborrageiro
> To: [email protected]
> Sent: Friday, July 03, 2009 12:31 PM
> Subject: [amibroker] Re: pyramiding - problems with code
>
>
>
>
>
> 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 [email protected], "Edward Pottasch" <empottasch@> wrote:
> >
> > do you ever read replies?
> >
> >
> > ----- Original Message -----
> > From: gborrageiro
> > To: [email protected]
> > 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 );
> >
>