Here is part two of my annual review. Part one looked at my overall portfolio, including long only, but there was only a cursory look at my futures. Here in this second part I will be looking a my futures trading account in a lot more detail.
It's important to say why I'm doing this. I'm certainly not doing it so I can upweight good strategies, and delete badly performing ones. A year of data on top of a 50 year backtest is meaningless. But it's interesting to know what did well or badly, whether my trading costs were higher than expected, how closely my live performance matches simulation, and whether my new dynamic optimisation is adding value compared to the simpler static system I was trading until late 2021 (as requested by Christina).
A reminder of my overall futures performance
It might be interesting to look at the performance of me versus those benchmarks since I started trading my own money:
Me Bench1 Bench2
2014 – 2015 58.2% 70.2% 50.7%
2015 – 2016 23.2% -8.7% -1.6%
2016 – 2017 -14.0% -6.2% -25.5%
2017 – 2018 -3.7% 7.5% -4.4%
2018 – 2019 5.2% 8.1% 0.8%
2019 – 2020 39.7% 22.6% 9.3%
2020 – 2021 0.4% 0.8% 12.7%
2021 – 2022 27.0% -5.2% 38.3%
2022 - 2023 -8.71% 5.0% -1.30%
Mean 14.1% 10.4% 8.8%
Std dev 24.3% 24.3% 23.1%
SR 0.58 0.43 0.38
Geom mean 11.9% 8.5% 6.7%
Correlation 0.71 0.80
alpha 6.7% 6.8%
beta 0.71 0.84
Still looks pretty healthy. I seem to have been hurt less badly by the sell off that occured in March, possibly due to a lower trend following component (more discussion of that later).
Market by market
Here are the numbers by asset class
A big turnaround for energy and ags markets, the darlings of the 2021/22 accounting period. And here are some worst and best:
0 GAS_US_mini -2.0
1 SMI -1.7
2 WHEAT -1.5
3 AUD -1.4
4 US10U -1.4
5 EU-BASIC -1.2
6 IRON -1.2
7 CRUDE_W_mini -1.2
8 SOYOIL -1.0
9 GBPEUR -1.0
47 US20 1.0
48 SOYMEAL 1.1
49 VIX 1.4
50 EUR 1.7
51 JPY 2.0
52 BUND 2.0
Presented initially without comment, a bunch of plots showing p&l for each trading rule group:
The most obvious thing is how depressingly bad all of these graphs are. Pretty much every group of trading rules had a small net loss over the year. Even the diversifying carry and skew strategies weren't much help, although they did make money back in the sell off that caught out all the trend following style rules, narrowing my underperformance against the benchmark for the year. Only mean reversion (within asset classes - basically a value strategy), and relative carry were decently profitable.
It's this lack of signal diversification that brought me to my second worst loss when I started trading: -8.7%. Of course, most equity long only managers would murder half their family for that to be their second worst annual loss, so let's get some perspective here.
Live vs sim
Now let's turn to see how well my live performance matches what my backtest thinks I got. The dynamic optimisation introduces some new jeopardy here, since it results in some path dependence; if the starting positions are different at the start of the time period it's more likely that things will diverge thereafter (I could deal with this by populating my actual starting positions into the backtest on the first of April, but that's a lot of hassle).
Costs and slippage
I already noted above that my commission came in at 21bp (basis points = 0.21%) of account value, but how about slippage?
The cost I would have paid had I crossed the spread every time I traded (market orders) would have been 91bp. However my execution algo by sometimes executing passively saved me 22bp, i.e. around a quarter of the total. So my net slippage was 69bp, for total costs of 90bp.
This is a lot less than last years 3% (due to a one off strategy change), and a little less than my backtest which comes in at around 1% a year. It looks like my new dynamic optimisation algo is doing it's thing.
Dynamic vs static optimisation
Finally let's compare the performance of what I currently trade (dynamic optimisation with over 100 instruments) versus what I was trading before (static optimisation with less than 30). I'm going to compare backtest vs backtest here - I no longer trade static optimisation with real money so there is no other way of doing it; and it seems fairest to compare like with like. Plus we've already seen the difference between the dynamic optimisation backtest and it's live production returns.
Naturally one year doesn't prove anything, and it's also true that the results of a static backtest can be unusually flattered by getting lucky with your choice of instruments (something I discuss at length in my new book).
An important point here is that it's generally a good thing to store the code and config you use for past trading systems so you can do this exercise. It might also be worth noting down the hash number of the repo version you used with the code; firstly in case you fix bugs in the backtest that change the results (or introduce new bugs!) - although arguably if you run the same code with both backtests that is fairer; secondly in case you make changes that are backwardly incompatible and the old code just doesn't run.
First the long view (well since 2000, which is when my stored backtest begins):
I'm not as interested in some of these statistics as other people are; with the exception of costs, and as long as my live p&l is in the same ball park as my backtest. But hopefully your curiosity has been sated.
My short term plan is to add another bunch of instruments to my strategy, since I've added a bunch more to my database. Then I'm going to have a look at implementing some of the novel strategies in my book, albeit with some fun twists.
Post a Comment
Comments are moderated. So there will be a delay before they are published. Don't bother with spam, it wastes your time and mine.