Saturday, 4 April 2015

Futures trading performance: Year one

I started trading my automated futures trading system at the beginning of the current UK tax year, on the 7th April 2014; exactly a year ago. So it seems like a good time to review my performance to date (executive summary: brilliantly flukey).


Cash performance


I'm going to start with the actual change in the cash value of my account. The numbers here are shown as a percentage of the capital I began the year with. The average capital at risk over the year varied (I'll go into this below).


So I've more than doubled my money, at least before the tax man takes his share. Let's have a look at where I gained or lost that in some more detail.

To complicate things slightly I partly fund my trading account with stocks (rather than sell them and pay capital gains tax), and I sometimes have to borrow some money secured on them for margin. Because I don't want the stock exposure to affect my account value the stocks are hedged with FTSE and EUROSTOXX futures. All this adds a bit of noise to my profits as no hedge is perfect; you can think of this as a mini equity neutral hedge fund.

Stocks:

Mark to market: 9.2%
Dividends: 7.13%
Commissions: -0.05%
Stamp duty: -0.38%

Sub total: 15.9%

Stock hedges:

Mark to market: -18.1%
Commissions: -0.06%

Sub total: -18.1%

Total for stocks + hedge: -2.3%

Main futures trading:

Gross profit: 130.4%
Commissions: -2.5%
Slippage: -0.6%
Data fees: -0.04%
FX trading: -0.8%
Interest: -0.3%

Total for main trading: 126.4%

Grand total: 124.1%


Couple of things to note. Firstly my hedge was reasonably successful, but not perfect. Given the large size of a typical futures contract its as good as it can be.
The 'costs of doing business' are worth unpicking. We can't control revenue, but we can to an extent control costs. Commissions and slippage I discuss in more detail below. Data fees are pretty much as low as they can be.

FX trading and interest go together. Because I need to hold margin in foreign currency I have two choices. I can eithier borrow it, pay interest, and risk the foreign currency appreciating. Or I can exchange GBP for foreign currency, pay no interest, and risk the foreign currency depreciating.

I mix and match these approaches, trying to borrow only in low interest currencies like CHF, and avoid keeping large excess cash balances in any currrency as they don't pay much interest and give me more risk. The 1.1% cost here is more than I'd like, and was mainly due to losses in holding EUR balances which depreciated against the GBP, of 1.9% of starting capital. But I did make about 4% of starting capital betting against EUR futures as part of my main trading.

This is a cost of doing business, which hopefully will even out over several years.


Performance for capital at risk


I don't think cash performance is the best way of evaluating performance. This is because I adjusted the amount of maximum risk in my portfolio throughout the year (both the amount of money at risk, and the target volatility).

(In subsequent years I intend to keep this maximum constant, so things will be simpler)

Here is the performance when the effect of changing maximum risk is removed. This is shown as a percentage of capital, with a constant annualised risk target of 25% as I currently run.



Note that the risk is more stable. Its more appropriate to work out things like Sharpe Ratio on account curves like these. A hypothetical investor in my "fund" would have received a compounded version of these returns; their returns would be the same as these on a log scale.

Here are some statistics.

Return: 57.2%
Sharpe Ratio: 2.54
Realised annualised standard deviation: 22.0% (versus target 25%)
Average weekly gain versus loss: 1.16
Hit rate (proportion of positive weeks): 0.68
Profit factor: 2.45

Average drawdown:  -2.3%
Worst Drawdown: 8.9%
Proportion of weeks in drawdown: 77%


Benchmarking


My trading system mostly uses a combination of trend following and carry, over a diversified set of futures markets. This makes it similar, although much simpler and less diversified, than the strategies run by the likes of AHL, Winton and Aspect.

Looking at whole months AHL's flagship fund made around 33% to the end of March. Here are my monthly returns, with the same figures for AHL (Man AHL Diversity GBP) in brackets:

2014
April:      5.8%  (1.3%)
May:       14.6%  (6.6%)
June:       9.4%  (2.4%)
July:      -4.1%  (-0.1%)
August:    11.1%  (5.1%)
September: -4.4%  (0.2%)
October:    1.8%  (1.0%)
November:   9.2%  (5.7%)
December:   0.6%  (2.7%)

2015
January:    8.0%  (5.7%)
February:   5.4%  (1.2%)
March:     -0.4%  (1.3%)
April:     -0.1%  [part]

Based purely on the 12 matching monthly figures the annualised Sharpe Ratios are 2.8 (me) versus 4.0 (AHL). The correlation was 0.84. So my performance was good, but not as good as my former employer, especially when you consider that fees have been deducted from their performance.

AHL was an exceptional stand out performer in the CTA universe, but other large CTA's did well, with Sharpes from around 2.4 (Cantab) up to 3.6 (Aspect), with Bluetrend and Winton somewhere in between.

As I said in my simulation the last 12 months have been amazing for trend following, but not quite as good for other types of signals. AHL and other CTA's probably have higher allocations to trend following than I did and this partly explains their outperformance; I would probably have done better on a relative basis in 2009-2013 when trend following signals struggled.

However I'd expect AHL to do better in the long run as they trade over 300 markets versus 45 (which is a huge advantage) and have a more sophisticated set of trading strategies (which is less of an advantage than you might expect). You'd hope that 100 or so people working full time could beat one guy, spending 10 minutes a day.

Performance by futures contract


Which instruments did best last year? Let's look at it by asset class first. Numbers shown are the contribution to total profits.

Bonds: 40.3%
STIR: 5.9%
Volatility: 5.7%
Oil and Gas: 5.4%
FX: 4.6%
Equities: +4.4%
Ags: -1.9%
Metals: -0.2%

Clearly this has been the year of the bond, or at least the rolling 12 month of the bond. Let's dig into individual instruments.

First the bad news. The worst performers were Korean KOSPI equities (-1.2%), Lean Hogs (-1%) and Swiss SMI equities (-0.9%). The best were French OAT bonds (contributing 7.9%), Italian BTP bonds (6.3%), VIX (4.9%) and Korean 3 year bonds (3.9%).

So we don't need to look very far for the reason for the performance in bonds. Here are the country by country returns:

German 10.1%
French 7.9%
Korea 7.5%
Italian 6.4%
US 5.4%
Australia 3%
 
Prices of European bonds went up in a straight line, with only a brief pause in September. Although you can see the jump in March when QE was announced this was just the icing on what was already a very large cake. Other bonds, and STIR, also contributed but not by as much, bringing us to the bizarre situation where German 10 year yields are 19bp, French 50bp, Italian 1.30%, and US yields are nearly 2%.

(All these graphs show the total return of the future on the top panel, and the accumulated profits as a proportion of total capital on the bottom)


Volatility was a more interesting story. Essentially we benefited from a squeeze in volatility that lasted just two months. After that vol has been all over the place. A good trading system will capitalise on opportunities; then carefully husband its capital when they aren't around. You can clearly see that happening here.


Another 'one off' trend was in crude oil and other energy products, where we had a decent downtrend for the second half of 2014. I participated in some of that; here the problem was the relatively large risk of the crude oil future which meant I couldn't hold a position until the trend was half over (I had similar problems in Gas and heating oil). However we still ended the year in profit.


Another more recent trend has been the rally in the dollar, accompanied in its deadly duet with a collapse in the Euro. Here again we see a classic trend following account curve. We have minimal risk until the trend begins in earnest at the start of the year. Then we participate in the move, until it reverses. The reversal costs us something, but we hang on to most of our profits, and then reduce our risk again waiting for another move.


In contrast the other asset classes have been disappointing. Although there were no massive horror shows, it's probably worth reminding ourselves of the dangers of trading with one final picture from one of the worst markets.

The Swiss equity market was as boring as the country itself for most of the year (with apologies to my swiss friends for the national stereotyping). Then the SNB, in their infinite wisdom, decided to depeg the Euro. You can probably just about make out on the chart where it was. I wasn't, fortunately, trading the CHFEUR FX rate or CHFUSD future. I thought that having anything to do with this rigged market was the height of madness. Had I been doing so the damage from this debacle would have been much worse.


The long view


A few weeks ago I showed that a simulation of this system had a pre-cost Sharpe Ratio of around 0.94, with around 0.06 spent on costs (around 1.5% of capital with 25% annualised risk). If we assume that 0.88 is the 'true' SR, and that annual returns are normally distributed, then a one year SR of 2.54 is a one in twenty year event. It's nice to start off this way, but such amazing trends in bonds, with a few chucked in for other markets, is unlikely to be repeated anytime soon.


Risk versus expectations


I am obsessed with two things: risk, and costs (okay there are other things I'm obsessed with, like my weird crush on Olivia Colman but I'm talking specifically about this trading system now). I am not obsessed with performance (except in as much as day to day p&l tells me what my realised risk is). You probably don't believe me but until I did this performance exercise I was completely unaware of the italian bond yield, or that french bonds had been responsible for such a big chunk of my performance; though I had been vaguely aware of the VIX squeeze last year, and the dollar downtrend this year.

So why I am obsessed with risk, and costs? It's because unlike performance they are controllable. You can't control performance, it's just down to luck. Having the illusion of control can lead to meddling with your system, and destroying it's performance.

Anyway here is my actual and expected risk (measured in units of annual vol per year, and correcting for changes in risk targeting. Expected risk is missing before June as before then I didn't calculate it). The long run system target is 25%. They track each other reasonably well, although the actual risk measure is noisier. I'm comfortable with how well my risk targeting is working.



Costs


The other thing I am obsessed with is trading costs, both commissions and slippage (the difference between where I get filled, and the mid price when I submit the order).

In terms of expectations  I said I expect my overall cost bill to be around 1.5% a year, based on simulation. The split it varies by market, but very roughly around 20% of that (or 30bp) should be commission, and the rest (120bp) slippage.

My commission bill for the year (once I've corrected for changes in capital at risk - so its different from the cash figure above) comes in at 48bp, which is a little higher. There are a few reasons for that. Firstly my simulated cost bill doesn't include rolling costs. Secondly I've experimented with trading my system at two or three different speeds over the last year; now I'm comfortable with my trading costs I've settled at a slightly slower speed which the simulated expectation reflects.

The good news is I've only paid 17bp of slippage. If I look at a time series of slippage paid over the year its quite noisy, but it looks like I've effectively paid negative slippage (i.e. been paid to trade) since I started using a simple execution algo for trading, rather than just placing market orders.

Overall I'm comfortable that 1.5% should be a very conservative figure to pay in costs annually.

Lessons learnt

Don't focus on things you shouldn't control- only the things you can

Keep your costs low. Don't trade quickly on expensive markets in the expectation you'll get enough of a high Sharpe Ratio to compensate. Watch your risk like a hawk.

Ignore your performance, or you'll be tempted to meddle. A well designed system will do all the right things for you. Don't read the financial news. I can't believe I'm lending money to the Italian government at 1.3% (Apologies to my Italian friends. Actually, no apologies. I know for a fact none of you guys would lend them money at any rate). If I'd realised this sooner I might have cut a very profitable position.

Diversify

Who knows where the next mega trend will come from? If I'd just been trading US bonds, or commodities, I would have been barely up, flat or even down this year. Have the most diversified portfolio you can for the amount of money you have.

Patience and realism

It's been fantastic to start off like this. But a downside of that is when (not if) I start to lose money, and enter say a 15 or 25% drawdown, it will be harder not to be patient since if I'm not careful I'll have unrealistic expectations. Anyone starting to trade this kind of system in 2009 would have really been hacked off by March 2014. If they'd thrown in the towel then they'd have missed out on the incredible performance we've seen since then.

If you believe in your system, then sooner or later the markets will turn in your favour. Until then your job is to lose the minimum amount of money whilst you wait. Those losses are just the antes you have to pony up whilst you wait for a decent hand (yes I've been reading poker books recently, can you tell?).

Friday, 20 March 2015

Things I wish interactive brokers would do with their API software


As regular readers know I use interactive brokers (IB) to run an automated futures trading system. Now in many ways IB are great. They have several huge plus points compared to most other brokers:

  • Uniquely (?) they offer an API that allows you to build your own automated trading system. What's more the trading server software is available for Unix (and Mac, if that's your thing), not just Windows.
  • They have extremely low commissions.
  • They have a flexible and straightforward portfolio margin and multi-currency system.
  • They have a very wide range of markets.
However now I have been running my system for around a year with real money (with several months of test trading before that) there are a few things that are really annoying.

There are a few more things that other people might find annoying, but which I don't. For example IB don't offer UK spread betting, but then spread betting is the work of Satan so that's fine with me. I don't mind the lack of futures execution algos, despite the fact there are loads for stocks, because I'm perfectly happy with my own. The API documentation is... sketchy... but you can read my blog instead!

No python, matlab, or R API


(In 2017, a couple of years after I wrote this post, IB finally offered a native python API. I wrote a series of posts on this, starting here. I've edited this section to reflect that change). 

IB offers their API in five flavors:

  • Excel DDE 
  • Active X
  • C++
  • Java
  • C#
  • Python
Now there has some very big omissions from that list. The five languages used most in the systematic trading world are (in no particular order): C++, Java, Python, R and Matlab.

I've never really understood why Active X needs to be included as well as DDE; surely one spreadsheet based solution is enough? I've never met anyone who uses C#, though I'm sure they exist, but isn't having C++ and C# gilding that particular lily?

So why no Python, R or Matlab? An entire middle ground of people between Excel using 'F9 monkeys' and hairy chested C++ programmers has been missed out.

Fortunately there are third party API's available to support the likes of Python, R and Matlab; such as the swigibpy API that I use which wraps around the C++ code. However it makes me slightly nervous to use a third party product which has been written and is only supported by someone on a part time basis (though I hasten to add this hasn't given me any problems yet). It particularly worries me when combined with the possibility of an IB API upgrade breaking everything (see below). And it would absolutely terrify me if I was using this platform to trade other peoples money.

Why can't IB create proper API's for these three two high level languages? I am not an expert on Matlab and R, but it would be trivial for IB to do the wrapping of their C++ (as they appear to have done for POSIX). At least then we have some comfort that we are using an official product.


API and server updates aren't always backwardly compatible


There is nothing more annoying than people changing their software so that the changes aren't backwardly compatible. Add new functions? By all means, I don't have to use them do I? Fix bugs? Feel free, as long as it's not a 'bug' whose behaviour I have been relying on (so that is an undocumented feature, not a bug).

Change the name of an existing function just to annoy me? Force me to download the latest version of your API server or stop me trading altogether? No thank you. Especially not while I am relying on a third party to update their python API so it still works. Also why should I have to rewrite my code, retest it and generally make sure its still stable?


No free delayed data via API


When I use the IB front ends (of which more in a second), and I try and look at FTSE futures prices I get the nice friendly message 'Would you like to use 15 minute delayed data, you cheapskate?' (I'm paraphrasing). Click yes, and I can. I can even trade the dammn things, once I've ticked another disclaimer 'Would you really put your families future at stake by submitting a blind market order, just because you refuse to pay the very reasonable fee that Euronext LIFFE want to charge you for live data?'. Oh yes I would.

However when you use the API to get a FTSE futures price you get a very unfriendly message 'IB error id 23 errorcode 200: No security definition has been found for the request'.

Why oh why oh why is it so hard to have a tickbox in the IB API server that says 'Yes I want delayed data where I don't have a subscription. Yes I don't mind trading blind. Yes I am a cheapskate'.

Please IB - give us delayed API data.


No multiple trading login


You can only have be logged into IB in one place at a time.

This means:
  • It means you can't have multiple IB servers running for one account. No problem since you can connect over a network to your server from multiple machines. 
  • It means you can't have multiple IB servers for two linked accounts. Cue lots of messy code specifying which account you are trading from and hoping the server doesn't get it wrong. So a small problem, but with a solution.
  • It means you can't have a manual front end (see next section) open, perhaps to monitor your trades or do a little manual trading in another account. Unsolvable problem.
  • It means you can't have an IB server running a test account, and another for your live account, so running proper tests is impossible. Unsolvable, and very annoying, problem.
  • It means, it sucks.

No lightweight stable front end for manual trading


Apart from the API server, which is a very stable product that you can leave running for weeks on end, IB offer a number of ways to trade manually. At the time of writing these are:
  • Client side TWS. You download this thing and run it on your machine. It is an obese piece of software with far too many bells and whistles. When I run it it freezes eithier immediately, or when I try and do something complicated, like search for a symbol.
  • Server side TWS. Half the time this doesn't download the thin client properly and the other half the time it freezes.
  • Web trader. The vanilla version of this just freezes. The 'beta' version of this runs brilliantly, at least compared to the other front ends. Which is to say that I've managed to use it to submit one order at a time. After that, when I try and find the next symbol, it freezes. And I have to close the session. And login again (using my stupid security card, see below). Half a dozen end of tax year housekeeping trades took me the best part of an hour.
  • Mobile. I haven't tried this. But if something doesn't run on my 4GB laptop it probably won't run on my little Samsung...
I don't know if it's my machine, operating system or browser that is at fault (though I've tried it on every machine I have which covers both windows and linux, though not Mac). But all the UK retail stockbrokers I use seem to manage to create simple lightweight web front ends that are platform independent, and just work. Yet IB cannot.


1990's style security access protocol


Darn, a power cut. I'll just reset my fuse box. Now all I have to do is use vncviewer to log in to my headless trading box*, run the IB gateway server, pull out a stupid plastic card thing from my wallet (assuming I haven't temporarily mislaid it) which I need to log in and restart my own client processes.

It's like digital security was never invented. If I have to login to something like webtrader then fair enough, let me use a cruddy plastic card. But why can't I just have a secure ID sitting on a file on my machine? I can then setup my crontab so that the IB API, and all my server side stuff, restarts when I switch the machine on. After each power cut all I would need to do is reset the fuse box and then turn my server back on again.

* This now reflects my current setup - in earlier versions of this post I wasn't using vnc. Thanks to all those who commented below so that I could address this issue - the security is still rubbish but at least I don't have to plug a keyboard and monitor into my headless trading box.

To conclude...


It does seem as an outsider that the IB development team spend most of their time adding new features to the already bloated TWS front end, and designing things that they think are cool and pretty. It might be that the API community are responsible for only a tiny fraction of IB's income. However I seriously doubt that since algorithimic traders will trade a lot more, and probably use margin more aggresively, than the average Joe.

So please guys, I love the product, lets make it better.

Thursday, 5 March 2015

Simulating my futures system

As most of you know I'm running a fully automated futures trading system. This system uses a number of different signals to forecast price movements, but is mostly a trend following system.

I've had quite a few requests for a simulated back-test of this system. Although the system has done very well since I began trading in April 2014, this has been at a time when most trend following systems have done very well.  In particular the flagship fund of quant shop AHL (where I used to work) made about 34% last year.

(I'll be providing a more thorough review of my own performance after I've done a full year of trading, in a few weeks time).

So there is natural curiosity as to whether 2009 - 2013, much worse for trend following, would also have been bad for my system.

This will also be an educational exercise, as I'll talk through some of the issues involved in making a backtest as realistic as possible, and avoiding the deathly curse of "overfitting". Overfitted back-tests can look amazing, but they are unlikely to do well in actual trading.


Futures markets


I will use data from 43 futures markets to simulate the model. These have been chosen to cover a wide range of asset classes, and also based on factors like trading cost and data availability. One slight wrinkle is that I don't have a long series of price history for all my instruments. The data I get from my broker only goes back to late 2013 when I started collecting prices, and although www.quandl.com has been a great resource for backfilling longer price data, it doesn't cover every market. If anyone knows of another site for getting (free) historical daily price data for individual futures contracts, preferably which provides .csv files or an API, I'd love to hear about it.

Here you can see how many markets I have data for over time:


Notice the big jump in 2013 when I started getting broker data. This should mean the backtest is a little conservative, since you get better performance from more markets (I know this from simulating performance of similar systems in my old job where I had access to much more data).

However it also means I've needed to take care to make sure that the weights to different instruments in the portfolio is rescaled and fitted properly as new series of data arrives.


Trading rules


I have four main kinds of trading rules:

 Most rules have variations that work at different speeds. So there is a total of 32 possible rules that can be used. However unless an instrument is very cheap to trade we won't be able to access many of the faster rules, as they'll be too expensive. I drop these rules before proceeding.

How do we decide how much weight to give to each trading rule? I use a technique called non parametric bootstrapping to do my portfolio optimisation. Bootstrapping automatically gives you the right weights depending on how different the underlying data is from random noise, so it produces less extreme portfolios.

This is done on an expanding window out of sample. For example to trade in 1987 I used data from 1978 to 1986 to fit my weights. For 2015 I used data from 1978 to 2014. So I'm only using the past, not forward looking data.

To avoid over fitting I pool the pre-cost returns across all the instruments for which I have data. I've rarely found enough consistent evidence that different trading rules work better pre-cost on different kinds of instrument to justify doing anything else, especially given the paucity of available data in the past.
I then work out after cost returns, so it's likely that on expensive markets there will be less weight on faster trading rules.

Over fitting and data mining


Other than making sure you account properly for the effect of costs the main issue to worry about is over fitting AKA data mining. As you can see I am quite careful not to use forward looking information, and bootstrapping ensures we don't over fit based on limited data.

However I can't get away from the fact that I am using trading rules that I know will work, based on my own experience and general market knowledge. So there will be some implicit data mining going on before the backtest is even run.

This issue is discussed briefly in this blog. It will be discussed more thoroughly in my forthcoming book (details to follow, but hopefully out later this year), where there will also be more information about backtesting and fitting generally.

But my rules are generally simple, and having a number of variations for each rule should minimise the bias this causes. Still I wouldn't expect to realise the backtested Sharpe Ratio that I see in this back-test (this is also because future asset returns generally aren't likely to be as high in the simulated period, when a secular in inflation caused large one off repricing gains). But its much more realistic than an overfitted version would be.


A portfolio of futures


I then use a similar procedure to get weights for the instruments in my portfolio, with a few tweaks. I use weekly returns, otherwise the correlations are unrealistically low due to different market closing times (all other work is done with daily data). Obviously I don't pool data from different instruments together!

However if I don't have at least a year of data for an instrument when I start trading it I use average returns from the rest of the asset class, plus some noise such that the new asset will be 80% correlated on average with the other instruments of the same group. This gives me reasonable weights until I have enough data to fit them more precisely.

I also don't take pre cost performance into account (again there isn't much evidence that this is statistically different between markets); although because I'm bootstrapping it wouldn't change the weights much anyway.

Here are the final weights from the bootstrapping procedure, for each asset class:

Agricultural: 21.5%
Bonds and STIR: 17.5%
Equity index, including volatility: 17.3%
FX: 19.1%
Metals: 16.7%
Oil and Gas:  8.3%


These are nice and even.

Risk targeting


I assume here that we start with £500,000; and are targeting risk such that our annualised returns will have an average volatility of 25% of this, £125,000 (this is the same percentage risk target, but not the same size portfolio as I have).

It's imperative that we know we're getting this right. Here is a an estimate of the realised rolling annualised volatility of returns.  Higher peaks mean that we have strong forecasts from our trading rules, or that correlations are particularly high, or that the markets were more volatile than we hoped when we originally put on our positions. However the average is about right; and if anything is a little lower and more conservative than it should be.

(This is to do with a risk management overlay that I use in my model, which reduces risk when it thinks there is potential for large losses)




And the winner is...

Here is what you've all been waiting for - the veritable money shot.

You can see that the last year has been exceptionally good. Overall though this is a good, but not unbelievable performance. It would have been very easy to get a much better curve by fitting in sample, and by using more aggressive fitting techniques. But that would prove nothing, and I'd probably be doing much worse in real trading.

Some statistics:

Sharpe Ratio: 0.88
Realised annualised standard deviation: 19%
Average drawdown: 9.2%
Ratio of winning days to losing day returns: 1.006
Proportion of winning days: 54%
Worst drawdown: 33%
Proportion of days spent in drawdown: 94%

Note that without costs the sharpe would be higher, around 0.94. So I'm paying 0.06 SR in costs. This is an outcome of how I excluded faster trading rules for more expensive instruments.

These returns assume we maintain the same risk target. However all traders should reduce their risk when they lose money. Most will also want to increase exposure as their account value grows. In the latter case the returns shown above are effectively a log graph of what your returns would be. Since the system makes 16% a year on average over 32 years the compounded returns would be pretty good.

I reduce my capital when I make losses, but keep it at a capped maximum when I am at my high water mark. This would slightly increase the Sharpe shown above and reduce the drawdowns, at the expense of a lower total gain.

Here are returns we get from the different styles of trading (don't worry about the units on the y-axis):


You can see that trend following (which contributes about 60% of my risk), as has been well documented, did poorly from 2011-2013. However the other trading rules saved the day; in particular Carry. On the other hand 2014 was a great year for trend following, and this is reflected in my overall performance and those of large funds with similar styles such as AHL, Bluetrend, Winton and Cantab.

Note that in calculating profits I always lag my trades by one day, and assume they are done at the next days closing price, paying half the usual spread on the market, and the normal commission. This is all fairly conservative.

These simulated returns don't include interest charges, gains or losses on converting FX for margin payments, or data fees. In my annual review of actual performance I'll give you some idea of how large these elements are (sneak preview, not that large).

If you'd like any more detail or stats, then please comment on this post. I hope this has been interesting.