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

Re: [amibroker] Re: Incorrect rounding of shares in backtester!



PureBytes Links

Trading Reference Links

You are making mistake.

bo.UpdateStats( bar, 2 )

should be called AFTER signals are processed
and ONLY in LOW level mode.
In Low level mode you don't call bo.ProcessTradeSignals().
If you call bo.ProcessTradeSignals (MEDIUM level mode) you should never
call UpdateStats (Low level mode) because.

Because of the mistake you are making in your formula, CurEquity you
are using for calculation is wrong (should be PREVIOUS bar equity,
not current bar equity).

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "olivier_molongo" <olivier_molongo@xxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Sunday, November 23, 2008 8:31 PM
Subject: [amibroker] Re: Incorrect rounding of shares in backtester!


> Hi Thomaz,
> 
> I still notice this problem. Here is an example code:
> 
> SetCustomBacktestProc("");
> 
> if( Status("action") == actionPortfolio )
> {
>  bo = GetBacktesterObject();
> 
>  bo.PreProcess(); // Initialize backtester
> 
>  for(bar=0; bar < BarCount; bar++)
>  {
>       bo.UpdateStats(bar, 2); //  Update MAE/MFE stats for bar
> 
>    CurEquity = bo.Equity;
> 
> for (sig = bo.GetFirstSignal(bar); sig; sig = 
> bo.GetNextSignal(bar))
>        { //  Loop through all signals at this bar
> 
> if ( sig.IsEntry() ) 
> {
>            NbShares= -ceil(sig.PosSize*CurEquity/100/
> (sig.price+0.01)) ;
> _TRACE
> ("Symbol,"+sig.Symbol+", NbShares calculated:"+ NbShares + ", 
> PosValueCalculated:"+NbShares*sig.price+", PosSize:"+sig.PosSize+" 
> CurEquity:"+CurEquity+", Sig.Price:"+sig.Price); 
> }
> }
> 
> 
>    bo.ProcessTradeSignals( bar );
> 
> 
>  for( pos = bo.GetFirstOpenPos(); pos; pos = 
> bo.GetNextOpenPos() )
>   {
> _TRACE("Symbol,"+pos.Symbol+", 
> realShares:"+pos.shares + ", PosValue:"+pos.getpositionvalue()+", 
> L/S:"+pos.islong()+", Price:"+pos.getprice(bar,"C")+", 
> CurEquity:"+CurEquity); 
>  }
> 
>   }
> 
> 
> 
>  bo.PostProcess(); // Finalize backtester
> }
> 
> 
> PositionSize= -5;
> 
> Buy = 1;
> Sell=0;
> 
> 
> I run this code on a yahoo database and I notice I have very 
> different NbSHares calculated from the real NbShares.
> 
> 
> Here are some trace samples:
> [14300] Symbol AALA realShares 60955 PosValue 24382
> L/S -1 Price 0.41 CurEquity 5000
> [14300] Symbol AALA NbShares calculated 59523 
> PosValueCalculated 24404.4 PosSize -5 CurEquity 500000
> Sig.Price 0.41 
> 
> [14300] Symbol AAME realShares 16510 PosValue 24765
> L/S -1 Price 01/01/51 CurEquity 500000
> [14300] Symbol AAME NbShares calculated 16447 
> PosValueCalculated 24835 PosSize -5 CurEquity 500000
> Sig.Price 01/01/51 
> 
> They are differences. I use thess settings:
> 
> Min. shares=1
> Round lot size=1
> commissions in $ per share/contract=0.01
> 
> 
> Can you help?
> 
> Regards,
> Olivier
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 
> wrote:
>>
>> I can ensure you that AmiBroker would round DOWN to 1000.
>> 
>> You have mistakes elsewhere in your formula and/or settings, but 
> unless you 
>> send FULL formula and settings to SUPPORT, no one would able to 
> help you.
>> 
>> You may not be aware of the settings you are using specifically
>> if you are using today or previous day equity for position sizing
>> and what is your actual equity. Your "CurEquity" may not be actual 
> equity
>> but something else like initial equity causing confusion in your 
> understanding
>> of calculations. Again:
>> FULL formula, SETTINGS and send them to SUPPORT
>> 
>> 
>> Best regards,
>> Tomasz Janeczko
>> amibroker.com
>> ----- Original Message ----- 
>> From: "olivier_molongo" <olivier_molongo@xxx>
>> To: <amibroker@xxxxxxxxxxxxxxx>
>> Sent: Sunday, November 16, 2008 9:47 PM
>> Subject: [amibroker] Incorrect rounding of shares in backtester!
>> 
>> 
>> > Hello,
>> > 
>> > How can I get the number of shares that would be bought on a 
> given 
>> > signal in low level CBT?
>> > 
>> > I use the formula :
>> > 
>> > NbShares=-ceil
> (sig.PosSize*CurEquity/100/sig.price/sig.RoundLotSize)
>> > *sig.RoundLotSize;
>> > 
>> > I don't get the exact number of shares bought or sold by AB. As 
> an 
>> > exemple, with:
>> > 
>> > CurEquity=500000-5
>> > PosSize=-5
>> > sig.Price=22.86
>> > sig.RoundLotSize=100
>> > 
>> > my formua gives NbShares=1000. The exact value is 1093 rounded to 
>> > 1000.
>> > 
>> > The signal processed trades 1100 shares. The position value for 
> 1100 
>> > shares is 25113 that is above the 5% equity limit given by 
> PosSize 
>> > (25000=5% * 500000). 
>> > 
>> > Amibroker default calculation seems incorrect.
>> > 
>> > WHat is the formula used by AB?
>> > 
>> > Regards,
>> > Olivier
>> > 
>> > 
>> > ------------------------------------
>> > 
>> > **** IMPORTANT ****
>> > This group is for the discussion between users only.
>> > This is *NOT* technical support channel.
>> > 
>> > *********************
>> > TO GET TECHNICAL 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
>> > 
>> > 
>> >
>>
> 
> 
> 
> ------------------------------------
> 
> **** IMPORTANT ****
> This group is for the discussion between users only.
> This is *NOT* technical support channel.
> 
> *********************
> TO GET TECHNICAL 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
> 
> 
> 

------------------------------------

**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

*********************
TO GET TECHNICAL 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/