[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

Hello,
 
No, I have typed it directly into e-mail. Now I have run this for you
(fixed some typos and added some _TRACE statements for Debug View):
 
ApplyStop( stopTypeNBar, stopModeBars, 15 ); // exit after 15 days

SetBacktestMode( backtestRegularRaw );
SetCustomBacktestProc(""
);
Buy = Close>0
;
Sell =  Close > Ref(Close, -1
);

SetPositionSize( 10, spsPercentOfEquity
);
SetOption("MaxOpenPositions", 10
);


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
CntBuys <= MaxBuys )
       {
            pos = bo.FindOpenPos( sig.Symbol );
            
if
( pos )
            {
                
_TRACE("Pos already exists "
+ sig.Symbol );
            }
            
else

            {  
               CanEnter =
True
;
               CntBuys++;
              
_TRACE("Can Enter bar = " + i + " Symbol = "
+ sig.Symbol );
            }
       }

      
// this handles allowing exits only if position is at least 2 bars old

       CanExit =
False;
      
if
( sig.IsExit() )
       {
          
if
( pos = bo.FindOpenPos( sig.Symbol ) )
           {
               CanExit = pos.BarsInTrade >
2
;
              
_TRACE("Can Exit bar = " + i + " Symbol = "
+ sig.Symbol );
           }
       }

      
// 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>
Sent: Friday, October 19, 2007 4:54 AM
Subject: [amibroker] Re: Eliminating Phantom Positions in CBT

> Tomasz, did you try the code below. Beside couple of spelling error
> which I fixed, I get other error messages. When I fix them I don't
> get the intended results. The buy can sell conditions can be any
> generic conditions such as
>
> Buy = Close>0;
> Sell =  Close > Ref(Close, -1);
>
> Regards
>
> Kam
> --- In
amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx>
> wrote:
>>
>> 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@xxx>
>> 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@>
>> > 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@>
>> >> 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/

>
>
__._,_.___

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

__,_._,___