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

Re: [amibroker] Re: Net position sizing.



PureBytes Links

Trading Reference Links

hi,
 
what you need to do is use parts of the code TJ posted here: http://www.amibroker.com/kb/2006/04/24/using-redundant-signals-for-entries/
 
or at least I did this once, not sure if there are easier ways. It is pretty complicated to explain, or at least a lot of work. In this code TJ shows how you enter trades inside the Custom backtest Interface. You can manipulate this by counting the number of trades you enter and stop adding new trades when you pass the maximum number.
 
Basicly you can totally take the backtest in your own hands. After the bo.preprocess you can 1) count the number of signals by looping through all of the signals for a centain bar. Then 2) you can loop through the open positions and count them. Later 3) you can add code to enter trades. You stop entering trades when your maximum is reached. It is not very easy,
 
regards,Ed 
 
 

 

 

 

----- Original Message -----
Sent: Wednesday, September 24, 2008 9:10 PM
Subject: [amibroker] Re: Net position sizing.

Thanks Ed.

I love that exclamation mark!

I am using the following code, but it's not eliminating the trades
above the param number. I tried using the default backtest mode
(removed the "backtestRegularRawMulti" statement), and ran the code
with a watchlist of symbols, but I still get more trades processed
than that in my param field.

Any clues here on why this code may not be working?

One clue is when I set the parameter to zero, it works - no long
trades are executed. But any number other than zero, and it processes
them all in the backtest.

_SECTION_BEGIN("Maximum buys");
// Maximum buys in a period
//-----------------------------
SetCustomBacktestProc("");
Num = Param("MaxBuys",4,0,9,1);
MaxBuys = Num;

if( Status("action") == actionPortfolio ) {

bo = GetBacktesterObject();
bo.PreProcess();

for( i = 0; i < BarCount; i++ ) {
cntBuys = 0;
for( sig= bo.GetFirstsignal(i); sig; sig = bo.GetNextsignal(i) ) {
if( sig.Islong() ) {
if( CntBuys > MaxBuys - 1 ) {
sig.possize= 0;
} else {
cntBuys++;
}
}
}
bo.ProcessTradeSignals( i );
}
bo.PostProcess();
}
//-----------------------------
_SECTION_END();

--- In amibroker@xxxxxxxxxps.com, "Edward Pottasch" <empottasch@...>
wrote:
>
> if you are for instance looping through the trades like:
>
> for( trade = bo.GetFirstTrade(); trade ; trade = bo.GetNextTrade() ) {
>
> then you can check: if (!trade.IsLong)
>
> rgds,Ed
>
>
>
>
> ----- Original Message -----
> From: cipherscribe
> To: amibroker@xxxxxxxxxps.com
> Sent: Wednesday, September 24, 2008 8:33 PM
> Subject: [amibroker] Re: Net position sizing.
>
>
> How do you identify a short signal in the preprocess? I see only the
> following signal object methods:
>
> Methods:
>
> * bool IsEntry()
>
> True if this is entry signal, False otherwise
>
> * bool IsExit()
>
> True if this is exit signal, False otherwise
>
> * bool IsLong()
>
> True if this is long entry (buy) or long exit (sell) or scale-in
> signal, False otherwise
>
> * bool IsScale()
>
> True if this is scale-in or scale-out signal, False otherwise
>
> Is there a IsShort() method?
>
> Cheers,
>
> Adrian
>
> --- In amibroker@xxxxxxxxxps.com, "cipherscribe"
> <adrian.mollenhorst@> wrote:
> >
> > Thanks Thomasz and Ara,
> >
> > I am using the "backtestRegularRawMulti" option, which gives me
> > multiple signals.
> >
> > Thanks for the hint to direct my attentions toward the custom
> > backtester. I shall look into it and hopefully code what I am
> looking for.
> >
> > Cheers,
> >
> > Adrian
> >
> >
> > --- In amibroker@xxxxxxxxxps.com, "Tomasz Janeczko" <groups@> wrote:
> > >
> > > By default you can NOT have both LONG and SHORT pos on the same
> > symbol open at the same time.
> > >
> > > The only way to have it is to use low-level custom backtester.
> > > http://www.amibroker.com/guide/a_custombacktest.html
> > >
> > > Best regards,
> > > Tomasz Janeczko
> > > amibroker.com
> > > ----- Original Message -----
> > > From: "cipherscribe" <adrian.mollenhorst@>
> > > To: <amibroker@xxxxxxxxxps.com>
> > > Sent: Wednesday, September 24, 2008 5:17 PM
> > > Subject: [amibroker] Net position sizing.
> > >
> > >
> > > >I trade the ES Futures contract mechanically, and I want my to be
> able
> > > > to backtest my system such that it has a maximum net
position at any
> > > > one time of abs(x) positions.
> > > >
> > > > I can set the option to limit the number of Maximum Open
Positions,
> > > > but this doesn't help me when I am trading only 1 instrument.
> > > >
> > > > For example (Note I am using the backtest mode
> > > > "backtestRegularRawMulti", so I take every raw signal my equity
> allows
> > > > me.), the system can issue a buy, which will make me long.
If the
> > > > system issues a short, while I'm long, it will send a short
order,
> > > > which will make me effectively flat.
> > > >
> > > > This will count as 2 open orders in the backtester, but in
> reality, I
> > > > have no positions open, and could take another abs(x) in either
> > > > direction before I hit my maximum limit of open positions (x).
> > > >
> > > > So if I had 2 longs open, I could accept up to 5 shorts, if my
> maximum
> > > > open position(x) was abs(3).
> > > >
> > > > This is different from exiting a position when a signal in the
> > > > opposing direction is triggerred, as in
"ReverseSignalForcesExit",
> > > > since that option cancels the existing order. I need both to
remain
> > > > open, remembered, and exited at my sell/cover trigger, not the
> > > > opposing short/buy signal.
> > > >
> > > > What I need is for Amibroker to tabulate both long and short
> positions
> > > > distinctly, to count longs as positive, shorts as
negatively, and to
> > > > be able to set a maximum net position.
> > > >
> > > > I can do this in reality with no problems - send orders to IB
> based on
> > > > a maximum net position, but I'd like to be able to do it in
> > > > backtester, so I can validate the system.
> > > >
> > > > Any Ideas?
> > > >
> > > >
> > > > ------------------------------------
> > > >
> > > > Please note that this group is for discussion between users
only.
> > > >
> > > > To get support from AmiBroker please send an e-mail directly to
> > > > SUPPORT {at} amibroker.com
> > > >
> > > > For NEW RELEASE ANNOUNCEMENTS and other news always check
DEVLOG:
> > > > http://www.amibroker.com/devlog/
> > > >
> > > > For other support material please check also:
> > > > http://www.amibroker.com/support.html
> > > > Yahoo! Groups Links
> > > >
> > > >
> > > >
> > >
> >
>

__._,_.___

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

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

For other support material please check also:
http://www.amibroker.com/support.html




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___