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

[amibroker] Re: Eliminating Phantom Positions in CBT



PureBytes Links

Trading Reference Links

Tomasz, GP

I have no desire to use low level. I am perfectly happy to use the 
regular backtester. I am trying to port my trading system to AB. What 
I need to achieve is as follows which I could not do in regular 
backtester (assuming a long only EOD system). 

1. limit the number buys to 4 per day(bar)
2. Positions are sold if we have held them for at least 2 bars from 
the date of entry (not from the date of last buy signal), if we have 
sell signal.
3. Force sell positions after 15 days from the date of entry (not 
from the date of last buy signal).

Now I have done this very easily in AIQ & WealthLab. I can drop AB 
and go back to those other software packages. AIQ does not have the 
openness of AB and WL is too slow. I have been struggling with the 
above for the last three month. I've asked the tech support and 
people on this board to no avail.

Below is code kindly provided by Edward Pottasch and modified by me 
to limit the number position to 4. However, then I face the problem 
that I have documented previously. I think I see why it produces the 
problem. Because when the max buys per day limit is met it sets the 
position size to zero and it does not nullify the buy signal. So the 
system keeps buy signal as a buy with zero value.

I sometimes I think Tomasz enjoys to see new users suffer(LOL, TIC).

SetBacktestMode( backtestRegularRaw ); 
SetCustomBacktestProc(""); 
MaxBuys = 3;
if( Status("action") == actionPortfolio )
{ 
   bo = GetBacktesterObject(); 
   bo.PreProcess(); 
   for( i = 0; i < BarCount; i++ ) 
  { 
		cntBuys = 0; 

	// look at new signals AND Exclude signals if they exceed 
maxBuys 
		for( sig = bo.GetFirstSignal(i); sig; sig = 
bo.GetNextSignal(i) )
		{ 
		OpenPos = bo.FindOpenPos( sig.Symbol );
	// check for entry signal and long signal 
         if( sig.IsEntry() ) 
			{ 
				if( cntBuys > MaxBuys )
				{   
               	sig.PosSize = 0; 
           	} 
            	else if( IsNull(OpenPos))
				{ 
 	              cntBuys = cntBuys + 1; 
				} 
      		} 

    	} 
	   bo.ProcessTradeSignals( i ); 
	  } 
   bo.PostProcess(); 
}

--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 
wrote:
>
> Exactly. In low-level mode AmiBroker does NOT enter/exit ANY trades
> unless you tell it to do so by calling EnterTrade/ExitTrade.
> Entire signal processing is upto the user. 
> 
> Beginners should rather avoid using custom backtester esp. low-
level mode unless
> they are programmers and know exactly what they are doing.
> Even then it is advised to use _TRACE command to log all your
> conditions and function calls into DebugView window.
> 
> Custom backtester low-level is for *advanced* programmers only
> who have experience in debugging their own formulas.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message ----- 
> From: "gp_sydney" <gp.investment@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Thursday, October 18, 2007 11:22 PM
> Subject: [amibroker] Re: Eliminating Phantom Positions in CBT
> 
> 
> > If you're using the low-level CBT, then you're entering and 
exiting
> > trades yourself, so I don't see how there can be "phantom" trades 
that
> > you don't know about.
> > 
> > Maybe the issue is with your Buy and Sell arrays. If you get a buy
> > signal on one bar but don't take it, it won't still show up as a
> > signal on the next bar unless you specifically do something to 
make it
> > so. So if you're only using the Signal object to choose buys, any 
you
> > ignore at one bar won't still be there at the next bar unless the 
Buy
> > array happens to have True values at both bars.
> > 
> > Or are you perhaps removing redundant signals with ExRem?
> > 
> > Regards,
> > GP
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "rdavenportca" <davenport.r@> 
wrote:
> >>
> >> I am doing portfolio backtesting on a system that has a maximum 
number 
> >> of open positions set to 30.  I use the Custom Backtester Signal 
Object 
> >> (low level) to only take certain trades on a given day (Day 1).  
On 
> >> that day there may have been other valid trades that I did not 
take or 
> >> were not taken because I already had my 30 positions full.
> >> 
> >> The problem I have is that a symbol that was a potential trade 
on Day 1 
> >> may setup to be a valid trade on Day 2, but I cannot enter it on 
Day 2 
> >> because Amibroker "thinks" I'm in the trade.  On the symbols for 
trades 
> >> I did not take, I am blocked from taking any future trade in 
that 
> >> symbol until the exit has triggered.  Remember that I'm not 
actual in a 
> >> position on this symbol, thus it is a "phantom" position.
> >> 
> >> My guess is that there is a hanging exit order still in the 
system for 
> >> these symbols causing the program to ignore new buys.  I've 
tried 
> >> setting the sig.Price = -1 and everything else I can think of to 
no 
> >> avail.  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
 
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/