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

Re: [amibroker] Portfolio backtest in forex



PureBytes Links

Trading Reference Links

Sorry if I offended you (sleep deprivation you know..). Let me know how it goes for you. Happy to 
help out more. Regards, GRANT

İlhan Ketrez wrote:
> Dear Grant,
>  
> Thank you for making me feel like a child :)
>  
> And thank you for your detailed e-mail. It seems useful but I don't have 
> enough time now to examine in depth.
>  
> As you mentioned, I need to make some modifications I guess. I will post 
> here as soon as I make it work for me.
>  
> Bes regards,
> Ilhan Ketrez
> 
>  
> 01.07.2008 tarihinde *Grant Noble* <gruntus@xxxxxxxxxxx 
> <mailto:gruntus@xxxxxxxxxxx>> yazmış:
> 
>     Quit your whining. It took me the best part of 2 years to get
>     accurate profit & margin calculations.
>     It didn't help that there was a bug in fx profit calculations
>     involving leverage but Thomasz fixed
>     that a few releases ago (ta :)). Along the way I realised that not
>     all brokers calculate margin the
>     same way - my broker actually has three different calculations
>     depending on the type of stop used.
>     Some base margin on CCY1, some on CCY2. Also margin, as a symbol
>     information property, is defined
>     statically whereas I needed to define it dynamically at order time
>     based on entry price. Therefore I
>     needed CBT code which I was able to create with the help of another
>     participant on this forum (g'day
>     Aron). You too will probably need something like this. Amibroker
>     support is tip-top but working out
>     how to set backtest preferences for your broker is your job.
> 
>     I'll attach some code I use. I #include it in all my systems. Note
>     that is uses ATC so you'll have
>     to retrieve this data within your system code. Note also that this
>     code is partially obsolete (since
>     that bug was sorted out). Will it do exactly what you want? Probably
>     not, you'll need to tweak
>     depending upon your use. I need to do more work on it but I've been
>     busy with twin babies. Hope it
>     helps. G
> 
>     /*
>            Grant's FX preferences
>     */
>     SetOption("FuturesMode",
>     True);                                         // = use
>     MarginDeposit and PointValue in calculations
>     SetOption("InitialEquity", 10000
>     );                                             // Initial equity $
>     SetOption("MaxOpenPositions", 4
>     );                                      // Max number of positions
>     SetOption("CommissionMode",
>     3);                                         // 3 = $ per share/contract
>     SetOption("CommissionAmount",
>     0);                                               // Commission amount
>     SetOption("AccountMargin",
>     100);                                                // Account
>     margin, 100 = no margin
>     SetOption("PriceBoundChecking", True
>     );                                 // Price to stay in bar range ?
>     SetOption("UsePrevBarEquityForPosSizing", True );       // Use last
>     known bar for position sizing ?
>     SetOption("ActivateStopsImmediately", False);                   //
>     Intraday stops ?
>     SetOption("Allowsamebarexit",
>     True);                                    // Allow same bar exit for
>     profit stops ?
>     SetOption("Allowpositionshrinking", True);                      //
>     Take partial trades if equity available ?
>     SetOption("InterestRate",0);                                                    //
>     Set interest rate earned for free cash, zero to evaluate system
>     SetOption("UseCustomBacktestProc", True);                       //
>     Use Custom backtest for reporting ?
>     SetOption("MinShares",
>     1);                                                              //
>     Min number shares one
>     SetOption("MinPosValue",
>     0);                                                    // Min
>     position value to make trade worthwhile, 0 = no limit
>     SetTradeDelays(0,0,0,0);                                                                //
>     Trade delays applied by the backtester
> 
>     lotsize =  StrToNum( ParamList("Lot size", "100000|10000|1000", 0)
>     );           // default lot 100000
>     leverage = Param("Leverage rate", 50, 1, 100,
>     1);                                                       // default
>     leverage 50:1
>     base = ParamList("Base currency","AUD|CAD|CHF|EUR|GBP|USD",
>     0);         // default base currency AUD
> 
>     ccy2 = StrRight( Name(), 3
>     );                                                   // eg. EURJPY
>     gives JPY
>     TickSize = IIf( ccy2 == "JPY", 0.01, 0.0001 );                  //
>     the minimum price move of symbol
>     RoundLotSize =
>     1;                                                                              
>     // whole contracts only
>     contracts =
>     1;                                                                                  //
>     contracts to acquire
>     SetPositionSize( contracts, spsShares
>     );                                // spsShares = size expressed in
>     shares/contracts
> 
>     fxRate = IIf( ccy2 == base, 1, Ref( Foreign( StrFormat( ccy2 + base
>     ), "Close" ), -1 ) ); // eg.
>     close of JPYAUD yesterday
>     pv = lotsize * fxRate;                  // the amount of profit
>     generated by one contract for a one point increase
>     in price
>     md = pv * Close * 1 / leverage; // the amount of money required to
>     open single contract position [IG
>     margin - no stop]
> 
>     // note: ATC code produces future leak warning when code is Checked
>     by editor..
>     AddToComposite( pv, "~spec_" + Name(), "O", atcFlagDeleteValues +
>     atcFlagCompositeGroup +
>     atcFlagEnableInExplore + atcFlagEnableInBacktest ); // store daily
>     point value in composite
>     AddToComposite( md, "~spec_" + Name(), "C", atcFlagCompositeGroup +
>     atcFlagEnableInExplore +
>     atcFlagEnableInBacktest ); // store daily margin deposit in composite
> 
>     SetCustomBacktestProc(""); // no external backtest procedure
>     if ( Status("action") == actionPortfolio) {
>            bo = GetBacktesterObject();     // get backtester object
>            //
>            // set correct MarginDeposit & PointValue on entry signal days
>            //
>            bo.PreProcess();                                // do
>     pre-processing (always required)
>            for (i = 1; i < BarCount; i++)          // loop through all bars
>            {
>                    for (sig = bo.GetFirstSignal(i); sig; sig =
>     bo.GetNextSignal(i)) // loop through all signals at
>     this bar
>                    {
>                    if( sig.IsEntry() ) // is it an entry signal
>     (buy/short) ?
>                             {
>                                    pv = Foreign( "~spec_" + sig.Symbol,
>     "O" );             // entry day point value
>                                    md = Foreign( "~spec_" + sig.Symbol,
>     "C" );             // entry day margin deposit
>                                    _TRACE( StrFormat( "Ticker=" +
>     sig.Symbol + "  PointValue=%1.0f  pv=%1.0f  MarginDeposit=%1.0f
>     md=%1.0f", sig.PointValue, pv[i], sig.MarginDeposit, md[i] ) );
>                                    sig.PointValue =
>     pv[i];                 // set symbol PointValue
>                                    sig.MarginDeposit =
>     md[i];              // set symbol MarginDeposit
>                            }
>                    }
>                    bo.ProcessTradeSignals(i); // process trades at bar
>     (always required)
>            }
>            bo.PostProcess(); // do post-processing (always required)
>     }
>     //
> 
>     İlhan Ketrez wrote:
>      > Dear friends,
>      >
>      > Before registering the mailgroup, I was quite frustated regarding the
>      > customer support for Amibroker. Now I observe that Tomasz is very
>     busy
>      > with the new technological developements of the software and
>     replies the
>      > related questions mostly. I appreciate his great effort and magical
>      > software.
>      >
>      > In my recent e-mails, I believe that I emphasize an important point
>      > about forex backtesting in Amibroker. Currently, I see that it is
>      > impossible to truly backtest multiple forex pairs with the standard
>      > backtester interface. Below, I am trying to explain in detail.
>      >
>      > - For EURUSD and XXXUSD pairs everything is OK.
>      > - When the second unit is not USD, problem arises. I'm taking the
>     EURJPY
>      > as my example. Brokers calculate the profit-loss of these trades
>     in JPY
>      > (using the pointvalue * pricechange formula) and then converts to
>     USD,
>      > using the USDJPY pair as you know.
>      > - In Amibroker, when we set the currency as JPY and indicate
>     USDJPY in
>      > the settings, it calculates the profit-losses correctly.
>      > - In this case, it takes also the margin deposit scalar in JPY.
>      > - Hence, all the traded contract quantities increase to extreme
>     values
>      > and all the backtest becomes incorrect.
>      >
>      > How can we (do you) overcome this hindrance?
>      >
>      > Thanks in advance and best regards,
>      > Ilhan
>      >
>      >
>      >
>      >
>      >
>      >
>      > ---------- Yönlendirilmiş ileti ----------
>      > Kimden: *İlhan Ketrez* <ilhanketrez@xxxxxxxxx
>     <mailto:ilhanketrez@xxxxxxxxx>
>      > <mailto:ilhanketrez@xxxxxxxxx <mailto:ilhanketrez@xxxxxxxxx>>>
>      > Tarih: 27 Haziran 2008 Cuma 15:28
>      > Konu: Re: [amibroker] Portfolio backtest in forex
>      > Kime: amibroker@xxxxxxxxxxxxxxx
>     <mailto:amibroker@xxxxxxxxxxxxxxx> <mailto:amibroker@xxxxxxxxxxxxxxx
>     <mailto:amibroker@xxxxxxxxxxxxxxx>>
>      >
>      >
>      >
>      > Thanks Tomasz,
>      >
>      > Curreny setting in the symbol information window is OK.
>      >
>      > The settings in the Tools->Preferences->Currencies windos are
>     also OK.
>      >
>      > When we change the currency, the currency of the margin deposit also
>      > changes. That is the problem.
>      > In forex accounts all of the margins are (Say) 1000 USD.
>      > Hence, in the current situation it becomes 1000 CHF. (Small Problem,
>      > average in last years is around 1.4)
>      > If the pair is USDJPY, it becomes 1000 JPY. (Greater problem
>     average in
>      > last years is around 110)
>      >
>      > As a result, almost all of the results become insignificant, starting
>      > with exposure, total profit/loss calculations.
>      >
>      >
>      > Please note that, unit profit-loss calculation is correct. Infact
>      > everything else seem to be correct.
>      >
>      > I understand the need for setting the margindeposit currency to the
>      > active currency to make trade in different markets.
>      >
>      > One temporary solution can be making an approach by adjusting the
>      > position size accordingly But the real, exact solution can only be
>      > achieved by defining a seperate currency setting for the margin
>     deposit.
>      >
>      > I am waiting for your comments.
>      >
>      > Best regards,
>      > Ilhan
>      >
>      >
>      > 2008/6/27, Tomasz Janeczko <groups@xxxxxxxxxxxxx
>     <mailto:groups@xxxxxxxxxxxxx>
>      > <mailto:groups@xxxxxxxxxxxxx <mailto:groups@xxxxxxxxxxxxx>>>:
>      >
>      >     Hello,
>      >
>      >     You need to define CURRENCY (symbol->information) for that
>     pair to
>      >     match the deposit currency.
>      >     You also need to setup currency tables in
>     Tools->Preferences->Currencies
>      >
>      >     Best regards,
>      >     Tomasz Janeczko
>      >     amibroker.com <http://amibroker.com> <http://amibroker.com/>
>      >
>      >         ----- Original Message -----
>      >         *From:* İlhan Ketrez <mailto:ilhanketrez@xxxxxxxxx
>     <mailto:ilhanketrez@xxxxxxxxx>>
>      >         *To:* amibroker@xxxxxxxxxxxxxxx
>     <mailto:amibroker@xxxxxxxxxxxxxxx> <mailto:amibroker@xxxxxxxxxxxxxxx
>     <mailto:amibroker@xxxxxxxxxxxxxxx>>
>      >         *Sent:* Thursday, June 26, 2008 4:24 PM
>      >         *Subject:* [amibroker] Portfolio backtest in forex
>      >
>      >
>      >         Hello,
>      >
>      >         While the currency for the margin deposit is not USD, how
>     can we
>      >         perform a correct portfolio backtest in XXXYYY where YYY
>     is not
>      >         USD such as EURCHF?
>      >
>      >         Thanks in advance.
>      >         Ilhan
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>      >
>     ------------------------------------------------------------------------
>      >
>      >
>      > No virus found in this incoming message.
>      > Checked by AVG.
>      > Version: 8.0.101 / Virus Database: 270.4.3/1527 - Release Date:
>     6/30/2008 6:07 PM
> 
>     ------------------------------------
> 
>     Please note that this group is for discussion between users only.
> 
>     To get support from AmiBroker please send an e-mail directly to
>     SUPPORT {at} amibroker.com <http://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
> 
> 
>        mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
>     <mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx>
> 
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> No virus found in this incoming message.
> Checked by AVG. 
> Version: 8.0.101 / Virus Database: 270.4.3/1527 - Release Date: 6/30/2008 6:07 PM

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

Please note that this group is for discussion between users only.

To get 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/