Thanks for this additional info.

I just was thinking something like "My very first CBT code and I have to use 
low level... That's what I call bad luck..."

--- In [email protected], Tomasz Janeczko <gro...@...> wrote:
>
>   Hello,
> 
> One more thing to add: as an alternative to going low-level, you could 
> iterate through open positions list on your own
> (GetFirstOpenPos/GetNextOpenPos) get number of shares (Shares property) and 
> multiply by Close price (trade object has GetPrice(bar, "C") method for 
> that), then 
> add to bo.Cash and you get the closing equity value that way, without need to 
> call UpdateStats
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
> 
> On 2010-07-16 19:17, Tomasz Janeczko wrote:
> >  Hello,
> >
> > Generally speaking  you should be using low-level backtest for that.
> > Guessing from your rather short descriptions, I think that you are trying 
> > to override normal spsPercentOfEquity
> > position size processing and use your own.
> >
> > The example codes for using low-level interface are included at the end of 
> > this article:
> > http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-interface-2/
> >
> > ProcessTradeSignals not only processes signals but also does what 
> > UpdateStats() is doing therefore
> > you should not mix both since exposure will be counted twice.
> >
> > Using low-level mode avoids that.
> >
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> >
> > On 2010-07-16 18:56, rise_t575 wrote:
> >>
> >> One last question for clarification:
> >>
> >> 1) On one hand, I have to call bo.ProcessTradeSignals() for updating 
> >> equity.
> >> 2) On the other hand, I have to calculate position sizes *before* calling 
> >> bo.ProcessTradeSignals().
> >> 3) But for calculating the correct position sizes, my position sizing code 
> >> has to have access to the updated equity.
> >>
> >> So using UpdateStats() in this case is *mandatory*, correct?
> >>
> >> --- In [email protected], Tomasz Janeczko<groups@>  wrote:
> >>>    Hello,
> >>>
> >>> You can call UpdateStats( bar, 2 ) but please call it once per bar. When 
> >>> TimeInsideBar = 2
> >>> two things in addition to updating equity happen:
> >>> a) interest earnings are added (from free cash)
> >>> b) position exposure and portfolio stats are calculated
> >>>
> >>> You can get incorrect exposure figures if you call UpdateStats( bar, 2 ) 
> >>> more than once per bar.
> >>>
> >>> One thing you should think of:  be aware that if you are using current 
> >>> bar closing equity for
> >>> position sizing, you are generating possible future data leak.
> >>> How is that so? It is easy - assume that your position sizing depends on 
> >>> current equity,
> >>> you can calculate bar's open equity and open position equal to the 
> >>> difference between
> >>> open equity and close equity of the same bar. And you generate single bar 
> >>> trade.
> >>> This way you have the system that has 100% winning trades, because it is 
> >>> using future leak in
> >>> position sizing.
> >>> That is the reason AmiBroker DOES NOT use close equity of current bar for 
> >>> position sizing.
> >>> It either uses previous bar close equity or equity value at the open.
> >>>
> >>> Best regards,
> >>> Tomasz Janeczko
> >>> amibroker.com
> >>>
> >>> On 2010-07-16 15:29, rise_t575 wrote:
> >>>> I see - thanks.
> >>>>
> >>>> Actually I would like to use equity calculated from closing prices of 
> >>>> the current bar (by searching the web, I've found that normally, AB 
> >>>> calculates equity 
> >>>> for position sizing with opening prices of the current bar - and not 
> >>>> being aware of this has caused me some major headaches the last couple 
> >>>> of days. Is 
> >>>> this mentioned in the position sizing related sections of the manual? If 
> >>>> not, this information should be added). Reading the description of 
> >>>> UpdateStats(), 
> >>>> it seems like I could achieve this by setting the second (TimInsideBar) 
> >>>> parameter to "2". When I put "bo.UpdateStats( bar, 2 );" into my code, 
> >>>> at least the 
> >>>> position sizes are calculated exactly the way I want them to.
> >>>> But there are several warnings about doing this in the method's 
> >>>> description. Can I unintentionally mess something up by doing this?
> >>>>
> >>>> Thanks.
> >>>>
> >>>> --- In [email protected], Tomasz Janeczko<groups@>   wrote:
> >>>>>     Hello,
> >>>>>
> >>>>> Sorry, the method name is actually UpdateStats()
> >>>>>
> >>>>> Best regards,
> >>>>> Tomasz Janeczko
> >>>>> amibroker.com
> >>>>>
> >>>>> On 2010-07-16 14:06, rise_t575 wrote:
> >>>>>> Probably I'm blind, but I cannot find any information about the 
> >>>>>> mentioned UpdateEquity() function, any searches in the online/offline 
> >>>>>> manual result 
> >>>>>> nothing. Could someone provide me with a link?
> >>>>>>
> >>>>>> Thanks.
> >>>>>>
> >>>>>>
> >>>>>> --- In [email protected], Tomasz Janeczko<groups@>    wrote:
> >>>>>>>      Hello,
> >>>>>>>
> >>>>>>> The value of bo.Equity is correct.
> >>>>>>>
> >>>>>>> And your findings are incorrect.
> >>>>>>> "Use previous bar equity" works as described in the manual.
> >>>>>>>
> >>>>>>> You are making mistake in your thinking/debugging.
> >>>>>>> Your formula is checking bo.Equity BEFORE calling 
> >>>>>>> ProcessTradeSignals(). And it is giving you last known
> >>>>>>> equity value. That is the reason of your incorrect findings.
> >>>>>>>
> >>>>>>> If you are using custom backtester interface, there are clearly 
> >>>>>>> defined points where *you* are in charge
> >>>>>>> and when AB is in charge (and can update anything). It will NOT do 
> >>>>>>> any "magical steps" out of blue right after
> >>>>>>> for( bar = 0; bar<    BarCount; bar++ ) loop. If you want to update 
> >>>>>>> equity to the current bar you either
> >>>>>>> must call ProcessTradeSignals()   (it will update equity and process 
> >>>>>>> signals) OR... if you want to have
> >>>>>>> current bar equity WITHOUT calling ProcessTradeSignals, you have to 
> >>>>>>> call UpdateEquity( bar, 0 ) function.
> >>>>>>>
> >>>>>>> The difference that "Use previous bar equity" makes in case of CBT is 
> >>>>>>> that ***INSIDE*** ProcessTradeSignals()
> >>>>>>> it will use either previous bar or current bar equity, depending on 
> >>>>>>> setting, and it will affect the size
> >>>>>>> of position open (if you are using spsPercentOfEquity or otherwise 
> >>>>>>> depend on available equity)
> >>>>>>>
> >>>>>>> Recommended reading:
> >>>>>>> http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-interface-2/
> >>>>>>>
> >>>>>>>
> >>>>>>> Best regards,
> >>>>>>> Tomasz Janeczko
> >>>>>>> amibroker.com
> >>>>>>>
> >>>>>>> On 2010-07-15 20:15, rise_t575 wrote:
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> I've just found out what is happening, but I have not the slightest 
> >>>>>>>> idea why.
> >>>>>>>>
> >>>>>>>> The backtester is *always* using previous bar equity for positions 
> >>>>>>>> sizing, although this setting is *not* ticked, and I haven't 
> >>>>>>>> included the 
> >>>>>>>> corresponding SetOption function.
> >>>>>>>>
> >>>>>>>> In fact, the backtests and the debugging logs are exactly identical 
> >>>>>>>> when UsePrevBarEquityForPosSizing is True and when it is False.
> >>>>>>>>
> >>>>>>>> Is this some bug or isn't that setting being used when using CBT for 
> >>>>>>>> position sizing?
> >>>>>>>>
> >>>>>>>> Thanks in advance!
> >>>>>>>>
> >>>>>>>> --- In [email protected], "rise_t575"<rise_t@>     wrote:
> >>>>>>>>> Hello,
> >>>>>>>>>
> >>>>>>>>> The following are the (debug) outputs of a tested position sizing 
> >>>>>>>>> algorithm.
> >>>>>>>>>
> >>>>>>>>> I've attached a) part of the code , b) the output of the _TRACE() 
> >>>>>>>>> function from within the CBT code (the TRACE function had been 
> >>>>>>>>> placed within the 
> >>>>>>>>> most inner "if{}" code block), and c) the output of the AA Results 
> >>>>>>>>> window (Detailed Log).
> >>>>>>>>>
> >>>>>>>>> Note that on the _TRACE() output, the equity on day 2 (21.01.2000) 
> >>>>>>>>> is still at its intial value (100000), so it hasn't been adjusted 
> >>>>>>>>> for price changes 
> >>>>>>>>> of the position taken at the close of day 1 (which did exist).
> >>>>>>>>>
> >>>>>>>>> Since this equity value is used for calculation of the position 
> >>>>>>>>> size of subsequent signals, this is a problem.
> >>>>>>>>>
> >>>>>>>>> On the other hand, the output of the AA Results windows on day 2 is 
> >>>>>>>>> correct (99823.2)
> >>>>>>>>>
> >>>>>>>>> And - no - "Use previous bar equity for position sizing" is not 
> >>>>>>>>> activated.
> >>>>>>>>>
> >>>>>>>>> Does anyone have an idea why bo.equity delivers incorrect values in 
> >>>>>>>>> this case?
> >>>>>>>>>
> >>>>>>>>> Thanks in advance!
> >>>>>>>>>
> >>>>>>>>> Part of CBT code in question:
> >>>>>>>>>
> >>>>>>>>>                     for ( sig = bo.GetFirstSignal( bar ); sig; sig 
> >>>>>>>>> = bo.GetNextSignal( bar ) )
> >>>>>>>>>                     {
> >>>>>>>>>                         if ( sig.IsEntry() )
> >>>>>>>>>                         {
> >>>>>>>>>                             currEquity = bo.Equity;
> >>>>>>>>>                             pointVal = sig.PointValue;
> >>>>>>>>>                             cbtAtr = StaticVarGet( "statAtr" + 
> >>>>>>>>> sig.Symbol );
> >>>>>>>>>                             psUnits = int( currEquity * ( 
> >>>>>>>>> pctVolaRisk / 100 ) / ( cbtAtr[bar] * pointVal ) );
> >>>>>>>>>             [_TRACE]
> >>>>>>>>>                             sig.PosSize = ( 2000 + psUnits ) * -1;
> >>>>>>>>>                         }
> >>>>>>>>>                     }
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> DebugView Output:
> >>>>>>>>> [2856] Date: 20.01.2000 Symbol: FDRY Equity: 100000 Cash: 100000 
> >>>>>>>>> ATR: 14.383258 Units: 69
> >>>>>>>>> [2856] Date: 21.01.2000 Symbol: PCLN Equity: 100000 Cash: 89818.2 
> >>>>>>>>> ATR: 27.671930 Units: 36
> >>>>>>>>> [2856] Date: 21.01.2000 Symbol: TYC Equity: 100000 Cash: 89818.2 
> >>>>>>>>> ATR: 14.318740 Units: 69
> >>>>>>>>> [2856] Date: 25.01.2000 Symbol: AKAM Equity: 98382.8 Cash: 59163.1 
> >>>>>>>>> ATR: 27.247997 Units: 36
> >>>>>>>>> [2856] Date: 03.02.2000 Symbol: IBM Equity: 97308.7 Cash: 49107.9 
> >>>>>>>>> ATR: 4.628230 Units: 210
> >>>>>>>>> [2856] Date: 04.02.2000 Symbol: FDRY Equity: 97846.4 Cash: 42716.2 
> >>>>>>>>> ATR: 13.667122 Units: 71
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> AA Results Output:
> >>>>>>>>> 20.01.2000
> >>>>>>>>>     Entry signals(score):FDRY=Buy(1),
> >>>>>>>>>     Exit signals:
> >>>>>>>>>     Enter Long, FDRY, Price: 147.563, Shares: 69, Commission: 0, 
> >>>>>>>>> Rank: 1, Equity 100000, Margin Loan: 0, Fx rate: 1
> >>>>>>>>>     1 Open Positions: , FDRY (+69), Equity: 100000, Cash: 89818.2
> >>>>>>>>>
> >>>>>>>>> 21.01.2000
> >>>>>>>>>     Entry signals(score):PCLN=Buy(1), TYC=Buy(1),
> >>>>>>>>>     Exit signals:
> >>>>>>>>>     Enter Long, PCLN, Price: 381, Shares: 36, Commission: 0, Rank: 
> >>>>>>>>> 1, Equity 100237, Margin Loan: 0, Fx rate: 1
> >>>>>>>>>     Enter Long, TYC, Price: 245.493, Shares: 69, Commission: 0, 
> >>>>>>>>> Rank: 1, Equity 100237, Margin Loan: 0, Fx rate: 1
> >>>>>>>>>     3 Open Positions: , FDRY (+69), , PCLN (+36), , TYC (+69), 
> >>>>>>>>> Equity: 99823.2, Cash: 59163.1
> >>>>>>>>>
> >>>>>>>>> 24.01.2000
> >>>>>>>>>     Entry signals(score):
> >>>>>>>>>     Exit signals:
> >>>>>>>>>     3 Open Positions: , FDRY (+69), , PCLN (+36), , TYC (+69), 
> >>>>>>>>> Equity: 98382.8, Cash: 59163.1
> >>>>>>>>>
> >>>>>>>>> 25.01.2000
> >>>>>>>>>     Entry signals(score):AKAM=Buy(1),
> >>>>>>>>>     Exit signals:
> >>>>>>>>>     Enter Long, AKAM, Price: 279.313, Shares: 36, Commission: 0, 
> >>>>>>>>> Rank: 1, Equity 98825.1, Margin Loan: 0, Fx rate: 1
> >>>>>>>>>     4 Open Positions: , FDRY (+69), , PCLN (+36), , TYC (+69), , 
> >>>>>>>>> AKAM (+36), Equity: 98806.8, Cash: 49107.9
> >>>>>>>>>
> >>>>>>>> ------------------------------------
> >>>>>>>>
> >>>>>>>> **** 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
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>> ------------------------------------
> >>>>>>
> >>>>>> **** 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
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>> ------------------------------------
> >>>>
> >>>> **** 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
> >>>>
> >>>>
> >>>>
> >>>>
> >>
> >>
> >>
> >> ------------------------------------
> >>
> >> **** 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
> >>
> >>
> >>
> >>
>


Reply via email to