Hi,

Sounds like you are using trade delays.

PositionSize is calculated for the bar of the actual purchase. If you have a 
Buy trade delay, then the value of Buy on the actual bar bought  will be zero 
(i.e. the Cross happened the bar before) and thus the IIF will be false and the 
value of short_ps will be used for the order.

If you do not need trade delays, then add the following line to your code:

SetTradeDelays(0, 0, 0, 0);

If you do need trade delays (e.g. end of day trader), then you must modify your 
PositionSize logic to refer to the bar of the actual Buy signal (e.g. previous 
bar when using trade delay of 1):

PositionSize = IIF(Ref(Buy, -1), long_ps, short_ps);

Mike

--- In [email protected], "cpescho" <cpes...@...> wrote:
>
> Unfortunaterly this didnt work either.
> 
> --- In [email protected], İlhan Ketrez <ketrezilhan@> wrote:
> >
> > You may try
> > 
> > Buy = Cross( Signal(), MACD() );
> > Sell = Cross( MACD(), Signal() );
> > Short = Cross( MACD(), Signal() );
> > Cover = Cross( Signal(), MACD() );
> > long_ps = 5000;
> > short_ps = long_ps / 2;
> > PositionSize = iif(Buy,long_ps,short_ps);
> > 
> > 
> > 
> > 2010/2/1 cpescho <cpescho@>
> > 
> > >
> > >
> > > What is the easiest way to tell Amibroker to enter a short position with
> > > lets say half the position size of a long position or vice versa?
> > >
> > > I tried this but it didnt work
> > >
> > > PositionSize = 5000;
> > > Buy = Cross( Signal(), MACD() );
> > > Sell = Cross( MACD(), Signal() );
> > > Short = Cross( MACD(), Signal() );
> > > Cover = Cross( Signal(), MACD() );
> > > SetPositionSize(50, IIf(Short, spsPercentOfPosition,spsNoChange));
> > >
> > > 
> > >
> >
>


Reply via email to