Hello, :-) Well, if you calculate closing equity the way I described, you won't need low level.
Best regards, Tomasz Janeczko amibroker.com On 2010-07-16 19:34, rise_t575 wrote: > > 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 >>>> >>>> >>>> >>>> > > > > ------------------------------------ > > **** 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 > > > >
