Ed
Thanks but the attachments do not show up. Could you try
again?
Larry
--- In amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...> wrote:
>
> attached
some code on scaling out. Test code for ES futures. What it does it takes an
initial position of 3 contracts when there is a long or short signal. Then
there are 3 targets. It will scale out of these 3 positions when the targets
are hit. However, if the trailing stop is hit it will sell all positions that
are left. Also when the endtime is hit all open positions are closed. So
situations may occur that it opens 3 long contracts and only the first target
is hit and it scales out of 1 position. 2 positions left and then the endtime
is hit and it will sell the remaining 2 contracts.
>
> see
example chart (5 minute timeframe): here you see a full long scale out
followed by a full short scale out.
>
>
>
>
>
> ----- Original Message -----
> From: onelkm
>
To: amibroker@xxxxxxxxxps.com
> Sent: Friday, July 03, 2009 6:37 PM
> Subject: [amibroker] Re:
pyramiding - problems with code
>
>
>
>
>
>
> 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 );
> > >
> >
>