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 amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...> 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: amibroker@xxxxxxxxxps.com
> 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 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 );
>
>
>