PureBytes Links
Trading Reference Links
|
Ilhan,
think you are on to something important in the way Amibroker handles
forex trading today. However, after having done some tests on my own,
I think the code below should be modified to use the currency being
traded (first symbol) versus USD instead of "base" (second symbol) in
a currency pair.
so, when trading EURCHF, the line:
md = 1000 * Foreign("USDCHF","Close",True);
would become
md = 1000 * Foreign("EURUSD","Close",True);
would you (or anybody else who might want to chime in) agree?
best regards
Jens Tiedemann
--- In amibroker@xxxxxxxxxxxxxxx, "Ýlhan Ketrez" <ilhanketrez@xxx>
wrote:
>
> Hello Grant,
>
> I am not sure whether it can be called offense or not but I really
felt like
> a child and I really liked it :) Please do not take this expression
as an
> offensiveness towards you and thank you very much for your kindness
of
> expressing your excuses.
>
> Coming back to the business, following simple code is enough for me
in
> EURCHF. Only two lines of code do the job for me. It can also be
easily
> adapted to the other pairs.
>
> In your codes, as I understand, you perform this adaptation by
decomposing
> the pairs by code. I will also examine these in depth, when I have
time.
>
> Since there are limited pairs, I prefer to write the codes by
>
> 1- A maincode.afl (includes if name() = eurusd #include
eurusd.afl type
> codes and scale in/out codes
> 2- A general setting.afl
> 3- n pieces of eurusd.afl, eurchf.afl... files
>
> Hence, examining the codes becomes easier and I can write different
codes
> for different pairs.
>
> As you may see, I am new to custom backtester and didn't know this
process
> is that easy.
> On previous days, I was surprised that Amibroker standard backtest
module
> cannot perform the backtest just like standard forex accounts and I
had a
> problem. Today, I am still suprised that it cannot perform and I
don't have
> a problem. Thank you very much for your kind help again.
>
> Best regards,
> Ilhan
>
>
>
> SetOption("UseCustomBacktestProc", True );
> if( Status("action") == actionPortfolio )
> {
> bo = GetBacktesterObject();
> bo.PreProcess();
> for( bar = 0; bar < BarCount; bar++ )
> {
>
> for( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal(
bar ) )
> {
> md = 1000 * Foreign("USDCHF","Close",True);
> sig.MarginDeposit = md[bar];
>
> }
> bo.ProcessTradeSignals( bar );
> }
> bo.PostProcess();
> }
>
>
>
> 01.07.2008 tarihinde Grant Noble <gruntus@xxx> yazmýþ:
> >
> > 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@xxx
> > > <mailto:gruntus@...>> 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@xxx
> > > <mailto:ilhanketrez@...>
> > > > <mailto:ilhanketrez@... <mailto:ilhanketrez@...>>>
> > > > 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@xxx
> > > <mailto:groups@...>
> > > > <mailto:groups@... <mailto:groups@...>>>:
> > > >
> > > > 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@...
> > > <mailto:ilhanketrez@...>>
> > > > *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
> >
> >
> >
> >
>
------------------------------------
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/
|