[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Using CBI the first time



PureBytes Links

Trading Reference Links

Thanks Bruce,

You are correct in that I was not seeing what you were saying. I did not realize that the -2000 described in the documentation for SetPositionSize could be used as an offset in this way for the PosSize of the Signal object.

Makes things much simpler for that type of position sizing :)

Thanks again,

Mike
--- In amibroker@xxxxxxxxxxxxxxx, "bruce1r" <brucer@xxx> wrote:
>
> Markus -
> 
> OK, here's an example of what I think that you were after.  It is a
> non-practical demo, but should show some points about encoding of signal
> types.  In your case, it shows calculating number of shares directly
> from % of cash and putting it in the signal object for the backtester to
> process.   See the comments for details and the AA results for the
> effect.  BTW, I hope you'll find some other nuggets  in this example
> also, and find it useful as a framework for exploring some aspects of
> the CBT.  Some aspects of the CBT just need to be "played" with to see
> what is possible.  This will teach me to get involved. :-)
> 
> -- BruceR
> 
> //  Simple example to do the following -
> //       1. Buy on the first trading day of the month and sell 5 days
> later
> //       2. Setup default to buy $5000
> //       3. Then, in the CBT, modify the trades on even months to buy s
> //          shares equal to 20% of cash.
> //
> //  NOTE - the encodings for PosSize as detailed in the
> SetPositionSize() help are -
> //              values below -2000 encode share count,
> //              values between -2000 AND -1000 encode % of current
> position (scaling)
> //              values between -1000 AND 0 encode % of portfolio Equity
> //              values above 0 encode dollar value
> 
> Buy = IIf( Month( ) != Ref( Month( ), -1 ), 1, 0 );
> Sell = Ref( Buy, -5 );
> Short = Cover = 0;
> SetPositionSize( 5000, spsValue );
> SetOption( "InitialEquity", 100000 );
> RoundLotSize = 1;
> 
> //  MID-LEVEL CBT MODEL
> SetOption( "UseCustomBacktestProc", True );
> if ( Status( "action" ) == actionPortfolio )
> {
>     bo = GetBacktesterObject( );
>     bo.PreProcess( );
> 
>     mon = Month( );
>     dt = DateTime( );
>     for ( bar = 0; bar < BarCount; bar++ )
>     {
>        for( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal(
> bar ) )
>        {
>           //  On even months, arbitrarily buy shares = 20% of cash
>           //  On odd months, $5000 will be used from SetPositionSize
> above
>           if ( sig.IsEntry )
>           {
>              if ( Mon[ bar ] % 2 == 0 AND sig.IsEntry )
>              {
>                 //  Note - int() function effectively rounds down
>                 shares = int( bo.cash * 0.20 / sig.Price );
>                 sig.PosSize = -2000 - shares;
>              }
>              _TRACE( NumToStr( dt[ bar ], formatDateTime ) +
>                 " , Cash = " + bo.Cash +
>                 " , Price = " + sig.Price +
>                 " , PositionSize = " + sig.possize );
>           }
> 
>        }
> 
>        bo.ProcessTradeSignals( bar );
>     }
> 
>     bo.PostProcess( );
> }
> 
> 
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "bruce1r" <brucer@> wrote:
> >
> > Markus -
> >
> > I don't think that you, and maybe Mike, are seeing what I'm trying to
> point out.  I referred you to SetPositionSize() help because it details
> the encoding of shares in PosSize in the signal object in the CBT. 
> Specically that is (-2000-shares).
> >
> > When you traverse the signal objects in the CBT, you can do your own
> calculation of shares from cash or whatever, and replace the sig.PosSize
> value before calling the mid or low level routines to process trades.
> >
> > Stated simply, you can set the number of shares yourself directly in
> the CBT from your own calculation.
> >
> > If that is what you're after, give me a short time and I'll whip up an
> example if you don't see this.
> >
> > -- Bruce
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, Markus Witzler funnybiz@ wrote:
> > >
> > > Hello Bruce,
> > >
> > > the reason I must use CBT is that I can´t  use Setpositionsize
> (...spsshares), since I need to compute adequate number of shares by
> referring to actual cash position.
> > >
> > > "spsShares" doesn´t allow - according to cust. support- for
> calling current cash or equity position to compute "spsshares". Thus the
> need for using CBT.
> > >
> > > Normally, everyone seems to compute sig.possize (and implied number
> of shares is a result thereof). I want to compute shares and the
> position size (in money terms) should be the implied result - thus the
> other way around.
> > >
> > > The reason for this is that i want to follow along a coding
> excercise I was given. And I´m not sure that -if I only specify
> sig.possize and not sharesize (i.e. trade.shares)- that AB may screw up
> (i.e. round up or down in some cases) when I don´t realize that.
> > >
> > > Take for instance into account that AB ALWAYS rounds DOWN if
> fraction of shares occur.
> > >
> > > I, myself, want to have control if rounding occurs or not and HOw it
> occurs (up or down). That could sometimes mean I´m rounding up when
> AB would round down.
> > >
> > > This is not because I´m particularly picky since this issue
> influences the outcome of the backtest only slightly.  It´s only that
> I want to accurately reproduce the results of the excercise I was given.
> > >
> > > In actual trading, there shouldn´t be any problem determining
> sig.possize in signal list and leave it up to AB to (maybe) rounding up
> or down potential fractional shares.
> > >
> > > If you have any clue that might help, please fell free to step in.
> > >
> > > Thanks for your contribution
> > >
> > > Markus
> > > ________________________________________________________________
> > > Neu: WEB.DE Doppel-FLAT mit Internet-Flatrate + Telefon-Flatrate
> > > für nur 19,99 Euro/mtl.!* http://produkte.web.de/go/02/
> > >
> >
>




------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/