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

Re: [amibroker] Re: Eliminating Phantom Positions in CBT



PureBytes Links

Trading Reference Links

Seems like one closing brace was missing

ApplyStop( stopTypeNBar, stopModeBars, 15 ); // exit after 15 days 

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) ) 
     { 
       // this handles limiting of number of order per day 
       CanEnter = False; 
       if( sig.IsEntry() AND CntBus <= MaxBuys ) 
       { 
            if( ! bo.FindOpenPos( sig.Symbol ) ) 
            {   
               CanEnter = True; 
               CntBuys++; 
            } 
       } 

       // this handles allowing exits only if position is at least 2 bars old 
       CanExit = False; 
       if( sig.IsExit() ) 
       { 
           if( pos = FindOpenPos( sig.Symbol ) ) 
           { 
               CanExit = pos.BarsInTrade > 2; 
           } 
       } 

       // if can not enter/exit - mark price = -1 - means ignore signal 
      if( ! CanEnter AND ! CanExit ) sig.Price = -1; 
    } 
    bo.ProcessTradeSignals( i ); 
  } 
  bo.PostProcess(); 
}

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "tipequity" <l3456@xxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Friday, October 19, 2007 1:55 AM
Subject: [amibroker] Re: Eliminating Phantom Positions in CBT


> Thanks Tomasz for helping, I will give it try. More than that thanks 
> for explaining the code with comments. Learning AB is significantly 
> more import to me than solving the problem at hand.
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 
> wrote:
>>
>> Hello,
>> 
>> The first step to success is to describe the goal, not the step you 
> are locked on.
>> This is I belive the very first time when you actually described  
> the goal.
>> 
>> Once this is establish the rest is easy.
>> 
>> 
>> ApplyStop( stopTypeNBar, stopModeBars, 15 ); // exit after 15 days 
>> 
>> SetBacktestMode( backtestRegularRaw ); 
>> SetCustomBacktestProc(""); 
>> 
>> Buy = ...
>> Sell = ...
>> 
>> 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) ) 
>>   { 
>>       // this handles limiting of number of order per day 
>>       CanEnter = False; 
>>       if( sig.IsEntry() AND CntBus <= MaxBuys ) 
>>       { 
>>             if( ! bo.FindOpenPos( sig.Symbol ) ) 
>>             {   
>>                CanEnter = True; 
>>                CntBuys++; 
>>             } 
>>       } 
>> 
>>       // this handles allowing exits only if position is at least 2 
> bars old 
>>       CanExit = False; 
>>       if( sig.IsExit() ) 
>>       { 
>>            if( pos = FindOpenPos( sig.Symbol ) ) 
>>            { 
>>                CanExit = pos.BarsInTrade > 2; 
>>            } 
>>       } 
>> 
>>       // if can not enter/exit - mark price = -1 - means ignore 
> signal 
>>       if( ! CanEnter AND ! CanExit ) sig.Price = -1; 
>>        
>>       bo.ProcessTradeSignals( i ); 
>>   } 
>>    
>>   bo.PostProcess(); 
>> }
>> 
>> Best regards,
>> Tomasz Janeczko
>> amibroker.com
>> ----- Original Message ----- 
>> From: "tipequity" <l3456@xxx>
>> To: <amibroker@xxxxxxxxxxxxxxx>
>> Sent: Friday, October 19, 2007 12:26 AM
>> Subject: [amibroker] Re: Eliminating Phantom Positions in CBT
>> 
>> 
>> > 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@> 
>> > 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@>
>> >> 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
>> > 
>> > 
>> > 
>> > 
>> >
>>
> 
> 
> 
> 
> 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/