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

[amibroker] Re: How to force Backtester to Calculate Position Size on Open Price?



PureBytes Links

Trading Reference Links

Tomasz - I just read this post, and I am now royally confused. I will chalk it up to my brain being slow, but please indulge me once more...

First, I am backtesting Intraday, not EOD, so time stamps are relevant.

Secondly, how can the entry price *not matter* even if I am in FUTURES mode?

To simulate real trading, shouldn't the backtester apply the margin deposit *dynamically*, according to the fluctuating price?

For example:

If IB allows FOREX trading at 40:1 margin, and I am trading EUR.USD, then in order to buy 1 share (100,000 EUR) I only need to pay for 2,500 EUR.

In order to Buy 2,500 EUR on 1/3/2008  @ 23:59, the  Open price was 1.2840

therefore, $3,210.00 USD (2,500 * 1.2840) must be deducted from my IB cash account in order to Buy the 2,500 EUR.

And after buying, my Position Value is $3,143.50 at the Close of the bar (this latter part I now understand).

How can you say that the price of buying 100,000 EUR is always fixed at $2,500 USD no matter how the EUR.USD price fluctuates?! How could that simulate a realistic backtest?!

Anyone else, please feel free to chime in too. I am either totally confused on how the backteter works with Forex or something is being lost in translation.

A bit depressing if I have actually been doing all my backtesting wrong for the past four months. And if that's the case, I need to understand this once and for all.



--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> wrote:
>
> Hello,
>
> You are completely missing the point and mix up things.
>
> First: the timestamp - if you backtest on EOD data, the time component does not matter (should be ignored),
> because the EOD bar timestamp depends on data source delivering data.
> If you use true EOD data, it will be without time component at all.
> If you are using compressed intraday data it will use timestamp that is either beginning or end
> of interval based on Preferences Tools->Preferences->Intraday "Timestamp ... shows:".
> Anyway, the time component does not matter if you backest EOD system and solely depends
> on how data source time stamps bars, and has no indication when trade happened.
>
> Second: position sizing - you are using FUTURES mode. In futures mode when you defined
> MarginDeposit, entry price does not matter ! Why? Because in FUTURES mode you just pay
> MARGIN DEPOSIT (i.e. $2500) in your case, regardless of current price.
> Since you also defined position size of ONE contract, the position sizing DOES NOT depend
> on Equity at all, since it will be JUST ONE contract.
>
>
> MarginDeposit = 2500; // $2500 is required to enter that trade, price of actual contract does NOT matter
> in futures mode
>
> SetPositionSize(1, spsShares); // here you say to enter ONE contract.
>
> So simply $2500 is taken from your account and you have 1 futures contract
> open pos, regardless of account equity and any other conditions.
>
> The price used TO ENTER this position was CORRECT OPEN price:
>
> "The prices on 11/3/2008 are as follows: Open = 1.2840"
> 1.2840
>
>
> So everything operates as it should
>
> The EXIT was on 11/4/2008 (not 11/3) therefore data from 11/3 are irrelevant for the exit.
> The OPEN price for 11/4/2008 apparently is 1.2574 so the exit is at that price. Again as it should be.
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: ozzyapeman
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Thursday, January 22, 2009 1:13 AM
> Subject: [amibroker] Re: How to force Backtester to Calculate Position Size on Open Price?
>
>
> Here is an explicit example.
>
> In addition to OPEN being set in the reserved variables below, OPEN is also set for all trade prices in AA settings:
>
>
> // -----------------------------------------------------------------------
> // BACKTESTER SETTINGS
> // -----------------------------------------------------------------------
>
> SetBarsRequired(10000, 0);
> SetOption("AllowPositionShrinking", False);
> SetOption("AllowSameBarExit", True);
> SetOption("CommissionAmount", 3.00);
> SetOption("CommissionMode", 3);
> SetOption("FuturesMode", 1);
> SetOption("InitialEquity", 100000);
> SetOption("InterestRate",0);
> SetOption("MaxOpenPositions", 1);
> SetOption("MinPosValue", 0);
> SetOption("MinShares", 1);
> SetOption("PriceBoundChecking", False );
> SetOption("ReverseSignalForcesExit", False);
> SetOption("UsePrevBarEquityForPosSizing", False );
> SetTradeDelays(0, 0, 0, 0);
> SetPositionSize(1, spsShares);
> TickSize = 0.0001; // The minimum price move of symbol for Forex
> PointValue = 100000;
> RoundLotSize = 1;
> MarginDeposit = 2500;
> BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
>
>
> // -----------------------------------------------------------------------
> // SIMPLE TRADING SYSTEM
> // -----------------------------------------------------------------------
>
> fast = Optimize( "fast", 3, 5, 10, 1 );
> slow = Optimize( "slow", 6, 10, 15, 1 );
>
> Buy = Cross( MACD( fast, slow ), Signal( fast, slow ) );
> Sell = Cross( Signal( fast, slow ), MACD( fast, slow ) );
>
> Short = Sell;
> Cover = Buy;
>
>
> Backtesting the above on EUR.USD for 11/01/2008 - 12/01/2008 gives the following result ( I will just paste the first line):
>
> Ticker Trade Date Price
> EURUSD Short 11/3/2008 23:59 1.284
>
>
> Ex. date Ex. Price % chg Profit
> 11/4/2008 23:59 1.2575 -2.06% 3326.11
>
>
> % Profit Contracts Position value Cum. Profit
> 105.81% 1 3143.5 3326.11
>
>
> # bars Profit/bar MAE MFE Scale In/Out
> 2 1663.06 -0.47% 2.45% 0/0
>
>
> The prices on 11/3/2008 are as follows:
>
> Open = 1.2840
> Low = 1.2525
> High = 1.2900
> Close = 1.2574
>
>
> If you reverse the Position Value, based on 40:1 leverage, you find that it was calculated on a price of 1.2574, which is the CLOSE:
>
> $3,143.50 * 40 / 100000 = 1.2574
>
>
>
>
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote:
> >
> > I should note that for Entry prices, the backtester is correctly using
> > OPEN prices and for ApplyStop, it is correctly exiting at the right
> > price point between LOW and HIGH.
> >
> > It is only for the position values that the backtester is using CLOSE
> > prices to calculate, even though CLOSE is nowhere in my AA settings or
> > AFL reserved variables or SetOptions.
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote:
> > >
> > > Tomasz,
> > >
> > > Thanks for the reply, but I *did* read the manual and *did* set the
> > > buyprice reserved variables, etc. (all to OPEN), and yet the
> > > backtester is still using CLOSE for position value calculations.
> > >
> > > Hence I posted the question.
> > >
> > > So either this is a bug or there is some other setting which is
> > > overriding both my AA settings and reserved variable settings. I can't
> > > seem to find any such setting error, so at this point I am thinking
> > > it's a bug.
> > >
> > > Is it?
> > >
> > >
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@> wrote:
> > > >
> > > > Hello,
> > > >
> > > > When everything fails consult..... the manual:
> > > >
> > > > http://www.amibroker.com/guide/h_backtest.html
> > > >
> > > > Quote
> > > >
> > > > "Controlling trade price
> > > >
> > > > AmiBroker now provides 4 new reserved variables for specifying the
> > > price at which buy, sell, short and cover orders are executed.
> > > > These arrays have the following names: buyprice, sellprice,
> > > shortprice and coverprice.
> > > >
> > > > The main application of these variables is controlling trade price:
> > > >
> > > > BuyPrice = IIF( dayofweek() == 1, HIGH, CLOSE );
> > > > // on monday buy at high, otherwise buy on close
> > > >
> > > > So you can write the following to simulate real stop-orders:
> > > >
> > > > BuyStop = ... the formula for buy stop level;
> > > > SellStop = ... the formula for sell stop level;
> > > >
> > > > // if anytime during the day prices rise above buystop level
> > > (high>buystop)
> > > > // the buy order takes place (at buystop or low whichever is higher)
> > > > Buy = Cross( High, BuyStop );
> > > >
> > > > // if anytime during the day prices fall below sellprice level ( low
> > > < sellstop )
> > > > // the sell order takes place (at sellstop or high whichever is lower)
> > > > Sell = Cross( SellPrice, SellStop);
> > > >
> > > > BuyPrice = max( BuyStop, Low ); // make sure buy price not less
> > than Low
> > > > SellPrice = min( SellStop, High ); // make sure sell price not
> > > greater than High
> > > >
> > > > Please note that AmiBroker presets buyprice, sellprice, shortprice
> > > and coverprice array variables with the values defined in system
> > > > test settings window (shown below), so you can but don't need to
> > > define them in your formula. If you don't define them AmiBroker
> > > > works as in the old versions.
> > > >
> > > > During back-testing AmiBroker will check if the values you assigned
> > > to buyprice, sellprice, shortprice, coverprice fit into high-low
> > > > range of given bar. If not, AmiBroker will adjust it to high price
> > > (if price array value is higher than high) or to the low price
> > > > (if price array value is lower than low)"
> > > >
> > > > Best regards,
> > > > Tomasz Janeczko
> > > > amibroker.com
> > > > ----- Original Message -----
> > > > From: "ozzyapeman" <zoopfree@>
> > > > To: amibroker@xxxxxxxxxxxxxxx
> > > > Sent: Wednesday, January 21, 2009 10:46 PM
> > > > Subject: [amibroker] Re: How to force Backtester to Calculate
> > > Position Size on Open Price?
> > > >
> > > >
> > > > > and here are all my other options set in the AFL.
> > > > >
> > > > > I can't see how any of them would force the backtester to use Close
> > > > > prices, but maybe one option does?
> > > > >
> > > > >
> > > > > SetBarsRequired( 10000, 0 );
> > > > > SetOption( "AccountMargin", 100 );
> > > > > SetOption( "ActivateStopsImmediately", True );
> > > > > SetOption( "AllowPositionShrinking", False );
> > > > > SetOption( "AllowSameBarExit", True );
> > > > > SetOption( "CommissionAmount", 3.00 );
> > > > > SetOption( "CommissionMode", 2 );
> > > > > SetOption( "FuturesMode", 1 );
> > > > > SetOption( "InitialEquity", 100000 );
> > > > > SetOption( "InterestRate", 0 );
> > > > > SetOption( "MaxOpenPositions", 1 );
> > > > > SetOption( "MinPosValue", 0 );
> > > > > SetOption( "MinShares", 1 );
> > > > > SetOption( "PriceBoundChecking", True );
> > > > > SetOption( "ReverseSignalForcesExit", False );
> > > > > SetOption( "UsePrevBarEquityForPosSizing", False );
> > > > > SetTradeDelays( 0, 0, 0, 0 );
> > > > > SetPositionSize( 1, spsShares );
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> > > > >>
> > > > >> Buyprices set in AFL formula are all Open:
> > > > >>
> > > > >> BuyPrice = Open;
> > > > >> ShortPrice = Open;
> > > > >> SellPrice = Open;
> > > > >> CoverPrice = Open;
> > > > >>
> > > > >> very wierd...
> > > > >>
> > > > >>
> > > > >> --- In amibroker@xxxxxxxxxxxxxxx, "Anthony Faragasso" <ajf1111@>
> > > wrote:
> > > > >> >
> > > > >> > Is there anywhere in your code formula that you may be
> > specifying a
> > > > >> different buyprice....because I believe the formula overrides the
> > > > >> settings in the preference window..
> > > > >> >
> > > > >> > Anthony
> > > > >> >
> > > > >> >
> > > > >> > ----- Original Message -----
> > > > >> > From: ozzyapeman
> > > > >> > To: amibroker@xxxxxxxxxxxxxxx
> > > > >> > Sent: Wednesday, January 21, 2009 3:41 PM
> > > > >> > Subject: [amibroker] Re: How to force Backtester to Calculate
> > > > >> Position Size on Open Price?
> > > > >> >
> > > > >> >
> > > > >> > I've always had the trade settings set to buyprice Open.
> > > > >> >
> > > > >> > Unfortunately, the backtester insists on using the Close, and I
> > > > > can't
> > > > >> > figure out why that is.
> > > > >> >
> > > > >> > --- In amibroker@xxxxxxxxxxxxxxx, "gonzagags" <gonzagags@>
> > wrote:
> > > > >> > >
> > > > >> > > Try in settings- trades, set in long trades buyprice in
> > open..
> > > > >> > >
> > > > >> > >
> > > > >> > > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@>
> > > wrote:
> > > > >> > > >
> > > > >> > > > Hello, even though I have set Buyprice = Open; I noticed
> > > > > that the
> > > > >> > > > backtester report is displaying position sizes based on the
> > > > >> Close of
> > > > >> > > > the bar. On some trades this makes a huge difference.
> > > > >> > > >
> > > > >> > > > I am backtesting Forex. And I imagine that when trading
> > > on the
> > > > >> Open,
> > > > >> > > a
> > > > >> > > > broker like IB will use the dynamic price of the Open to
> > > > >> calculate
> > > > >> > > the
> > > > >> > > > exchange rate and position size, since the Close price is
> > > > > not yet
> > > > >> > > > known at the time of the trade.
> > > > >> > > >
> > > > >> > > > So how do I force the backtester to mimic the above, and
> > > > > calculate
> > > > >> > > > position sizes based on Opens? Or is this not even an
> > option?
> > > > >> > > >
> > > > >> > > > I looked up Setoption in the reference guide, and don't
> > seem
> > > > >> to see
> > > > >> > > an
> > > > >> > > > appropriate setting to switch.
> > > > >> > > >
> > > > >> > > > Any input appreciated.
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >>
> > > > >
> > >
> > ------------------------------------------------------------------------------
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> > No virus found in this incoming message.
> > > > >> > Checked by AVG - http://www.avg.com
> > > > >> > Version: 8.0.176 / Virus Database: 270.10.10/1906 - Release
> > Date:
> > > > >> 1/21/2009 7:07 AM
> > > > >> >
> > > > >>
> > > > >
> > > > >
> > > > >
> > > > > ------------------------------------
> > > > >
> > > > > **** 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

*********************************




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

__,_._,___