Yes, correct - that's exactly what I am trying - completely overriding normal spsPercentOfEquity.
Your reply also clears up the question if using UpdateStats() within the barcount loop *and* calling ProcessTradeSignals() thereafter would be equal to using UpdateStats() twice per bar - which seems to be a "yes". --- In amibroker@yahoogroups.com, Tomasz Janeczko <gro...@...> 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 amibroker@yahoogroups.com, 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 amibroker@yahoogroups.com, 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 amibroker@yahoogroups.com, 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 amibroker@yahoogroups.com, "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 > > > > > > > > >