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

[amibroker] Re: Inline Backtester Metrics



PureBytes Links

Trading Reference Links

> Approaches like this might be sufficient for extremely simple 
systems
> trading single securities in or out . no scaling . no position 
sizing . no
> multiple securities . no position scoring .

I am not sure what Herman & Al are up to (don't expect them to tell 
me all OR that they even have fixed needs).

It might do a job for them.

I am using a modular approach, and keeping it basic, because user 
needs could take it in a lot of directions so anyone interested will 
probably have to add their own bells and whistles, unless we touch 
somewhere.

I am really doing it for myself though and I wanted to start with the 
most basic scenario, then build on it from there, so I have a stepped 
degree of difficulty.

I am not interested in scaling (at least I wasn't until Jan said he 
uses it), Psize or Pscore (or open position equity which you didn't 
mention) at the moment.

I wasn't out to solve for multiple securities but I think I have that 
covered anyway (Herman wants that though).

I am interested in all signals so I am starting to play with that - 
not sure what I am letting myself in for there.

> The problem is as you add any of these complexities the AFL to 
>support them
> becomes needlessly complex .

Yes, I might not go much further.

A little bit of experience of the complexities of programming won't 
hurt me.

I am actually comfortable with the metrics like W/L, PayOff Ratio and 
I  can get them pretty easy for the trade series I have already.

Plus I said before that we couldn't get the SD of an inline trade 
series but now that I am into it I think I see a way that I can. 

> Again . Why reinvent the wheel . This is why there is a backtester .

Core reasons:

I have it in my head that there will be a time penalty if I run the 
BT.

It doesn't seem such an elegant solution to me.

I just like it more (not really a reason since we can't explain our 
likes and dislikes.


Indirect reasons (not in order):

- it might help Herman and he does a lot for others and also has been 
good with me
- I have a stubborn side and once I get my teeth into something?
- I am not so motivated to write code at the moment but I seem to be 
enjoying this one
- my RCE 'theorom' aren't going to be a lot more useful to me if 
I 'write them up' but it has a certan elegance so it is worthy of 
completion
- my RCE theories aren't complete so this helps me sort it in my head 
(I have to take it apart and consider each step logically - if I can 
code it I must understand it)
- we have different personal styles/trading styles. I like to get a 
lot of chart time and trade in the charts without props (sometimes I 
can't use the optimum broker available, which is IB for US 
foreigners, for various reasons, so it is good for me to be able to 
trade in a Java platform without props.  For that reason I need to 
comfortable at working in line (a Java platform with no customisation 
is the real trading world for me).
- it is helping me understand the backtester more
- I am playing around with the idea of an inline MM indicator and I 
might try to throw one in at the end of the code

No guarantee I will go beyond trying concurrent multiple trades 
anyway.

> for (i = 1; i < BarCount; i++)
> {
> EF[i] = EF[i-1] * TradeSeries[i];
> }
>  
> This can be done without a loop using logs, addition and antilogs .

That's great.
Thanks.
I really wanted not to have to use a loop.
I wish I had thought of that.

I have used log before - funny how sometimes you can't connect the 
dots until someone shows you how (experience).

brian_z

--- In amibroker@xxxxxxxxxxxxxxx, Fred Tonetti <ftonetti@xxx> wrote:
>
> Approaches like this might be sufficient for extremely simple 
systems
> trading single securities in or out . no scaling . no position 
sizing . no
> multiple securities . no position scoring .
> 
>  
> 
> The problem is as you add any of these complexities the AFL to 
support them
> becomes needlessly complex .
> 
>  
> 
> Again . Why reinvent the wheel . This is why there is a backtester .
> 
>  
> 
> . And as far as . 
> 
>  
> 
> for (i = 1; i < BarCount; i++)
> {
> EF[i] = EF[i-1] * TradeSeries[i];
> }
> 
> 
> 
> This can be done without a loop using logs, addition and antilogs .
> 
>  
> 
>   _____  
> 
> From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] 
On Behalf
> Of brian_z111
> Sent: Friday, August 01, 2008 6:49 AM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Re: Inline Backtester Metrics
> 
>  
> 
> Herman and Al,
> 
> I took the scissors to my first effort.
> 
> It isn't an inline backtester, rather an inline RootCauseMetrics 
> indicator (possibly it could be used for calculating the common 
> Performance Metrics 'on the fly', including with lookback periods). 
> 
> This is the basic starting module.
> 
> It should be possible to modify it to allow for concurrent signals, 
> open trade interest, although it gets a bit harder from here for me 
> (maybe not for others).
> 
> I have checked it over a few charts and so far it stands up O.K
> I haven't used in the line of fire though.
> 
> Any potential in it for you guys?
> 
> FTR
> 
> This is a continuation of discussion at topic:
> 
> "How To Save Metrics In Composite For Indidual BT's"
> 
> A little background discussion about the idea behind the code is at
> 
> message # 127383 and # 127420 in the above thread.
> 
> //P_InLineMetrics
> 
> //Monday is used as the example because it is an unambiguous Buy
> //Typically most markets have Mon or Fri public holidays so it 
allows 
> for checking code response to duplicate buys and sells (signal 
errors)
> //BarIndex() is added as a buy condition to workaround the 
> propogating of {empty} values that can arise in the first few bars
> //A latch is used so that only one trade can be entered at a time 
and 
> every Sell must have a corresponding Buy
> //Plots the trade series, as GrowthFactor, which is equivalent to %
> //No trades are accounted for and recorded as GF 1
> //The code doesn't identify break even trades i.e. GF == 1 but it 
can 
> be modified to do so
> //since commissions aren't considered the Eq outcome for break even 
> trades is correct
> //the progressive product of the GF is equivalent to the Equity 
Curve 
> for a fixed capital investment
> //if the intitial Equity is 1 the EQ is the standardised Equity 
Factor
> //Equity == Initial Equity * EF
> //the product of individual GF's, sumbol by symbol, is the 
Portfolio 
> Growth Factor the progessive product of which produces the 
Portfolio 
> Equity Factor
> //same bar entry/exits are not allowed but the code can be modified 
> for that if required
> 
> //PART IA TRADE SERIES MODULE (CLOSED TRADES - ONLY ONE TRADE PER 
> SYMBOL OPEN AT A TIME)
> 
> M = DayOfWeek() == 1;
> F = DayOfWeek() == 5;
> BI = BarIndex()== 0;
> 
> B = M;//Buy on Monday
> S = F OR BI;//first bar set to sell and then sell on Friday's 
> thereafter
> 
> B = Flip(B,S);//latches the Buy signal to prevent concurrent buys
> 
> BP = SP = C;//BuyPrice, SellPrice
> 
> //Plot(B,"Buy",5,1);//FFP - fault finding plot used when writing 
the 
> code
> //Plot(S,"Sell",2,1);//FFP
> 
> //Plot(BP,"BuyPrice",5,1);//FFP
> //Plot(SP,"SellPrice",2,1);//FFP
> 
> TradeSeries = IIf(S ==1 AND Ref(B,-1) == 1,SP/ValueWhen(B == 1 AND 
Ref
> (B,-1) == 0, BP,1),1);//
> 
> Plot(TradeSeries,"TradeSeries",1,1);//as GrowthFactor
> 
> EF = 1;//initialises EquityFactor to 1
> 
> for (i = 1; i < BarCount; i++)
> {
> EF[i] = EF[i-1] * TradeSeries[i];
> }
> 
> Plot(EF,"EquityFactor",5,1);
> 
> --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com> 
ps.com,
> "brian_z111" <brian_z111@> wrote:
> >
> > Herman,
> > 
> > IBM PartI
> > 
> > I am not sure if this is along the lines that you are 
investigating.
> > It might be a starting point.
> > Sophisticated functions can be built from the concept.
> > 
> > Example of using single symbol equity function to back calculate 
> the 
> > trade series.
> > 
> > I used buy Tues(C) and sell Thurs(C) with one month of data to 
test 
> > the code as I went along (this gave me unambiguous signals with 
> only 
> > one signal at a time - I believe you can use an eq flag to dump 
> dual 
> > signals for real life use).
> > 
> > Note: some weeks don't have Mons or Fris so I wanted to avoid no 
> > signals, caused by short weeks, during testing
> > 
> > I used barindex() > 4 to cut out the first week in the month so 
> that 
> > I started with no signals for a few bars before the first buy.
> > 
> > I left the plot code in there but commented out (I plotted each 
> line 
> > to test the veracity of the code).
> > 
> > Note that when the trade series is used to recreate the eq curve 
> (as 
> > a cross check) it only matches on the exit bars for each trade.
> > I tried it on 10 years of Yahoo data and the final eqs matched to 
2 
> > decimal places (rounded off).
> > 
> > //P_InLineEquity
> > //code to reverse engineer the trade series from the equity curve
> > //it is reversed at the end to check the accuracy of the method
> > 
> > InitialEq = 10000;//input required
> > 
> > SetOption("InitialEquity", InitialEq ); 
> > 
> > Buy = BarIndex() > 4 AND DayOfWeek() == 2;//use your own
> > Sell = BarIndex() > 4 AND DayOfWeek() == 4;//use your own
> > 
> > BuyPrice = C;//use your own
> > SellPrice = C;//use your own
> > 
> > Plot(Equity(),"Equity",5,1);
> > 
> > Entry = IIf(Equity() == Ref(Equity(),-1) AND Equity() != Ref
(Equity
> > (),1),1,0);
> > 
> > //Plot(Entry,"Entry",1,1);
> > 
> > Exit = IIf(Equity() != Ref(Equity(),-1) AND Equity() == Ref(Equity
> > (),1),1,0);
> > 
> > //Plot(Exit,"Exit",2,1);
> > 
> > TradeSeries = IIf(Exit ==1,ValueWhen(Exit == 1, 
> SellPrice,1)/ValueWhen
> > (Entry == 1, BuyPrice,1),1);
> > 
> > //Plot(TradeSeries,"TradeSeries",1,1);
> > 
> > GF = 1;//GrowthFactor
> > 
> > for (i = 1; i < BarCount; i++)
> > {
> > GF[i] = GF[i-1] * TradeSeries[i];
> > }
> > 
> > //codesters might be able to make the above loop better/prettier?
> > //Plot(GF,"GrowthFactor",5,1);
> > 
> > 
> > Plot(InitialEq * GF,"CalculatedEquity",1,1);
> >
> 
>  
> 
> 
>   _____  
> 
> I am using the free version of SPAMfighter for private users.
> It has removed 516 spam emails to date.
> Paying users do not have this message in their emails.
> Try SPAMfighter <http://www.spamfighter.com/len>  for free now!
>



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

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/