So it's basically the end of the year. If I still had a proper job, this would be the last day that anyone with any seniority would be in the office until January 4th. When I worked in IB as a junior trader I did have to work in that weird period between Christmas and New years eve when markets are open but nothing is happening. Of course back in those days you could get away with a little lunchtime drinking courtesy of your friendly neighborhood broker, or knocking off at 3pm (okay twenty years before you could do that *every single day* rather than just in late December).
Now because of COVID very few people will be in the office next week anyway, and I suspect that even for quite senior bankers it will become more appealing to 'just going to the study to "check my emails" darling' by December 27th than spend any more time with your family (since until 2020 you probably spent more time with your secretary than your wife - nudge nudge - and it's been a bit of a shock to the system), or your in laws (assuming they've made the cut into your Christmas bubble).
As I can now do whatever I bleedin' like, it will be no surprise that today is going to be my last day of 'work' for a couple of weeks. Right now I'm mostly refactoring code (see discussion later), and since I never test everything properly I don't want to make any changes right now so that I can rely on the system running smoothly for the next couple of weeks (more on that later as well). Everything ran last night and today without any issues so the changes I made yesterday will be the last I do until January.
So it seems like an appropriate time to do some kind of 'review of the year'
First performance. I don't normally do a proper full on calendar year peformance review, but people like that sort of thing so here are some figures, for the period up to yesterday (for my trading account, not my long only stuff):
Overall 13.4%
Core futures trading 16.6%
ETFs, hedge, FX movements -3.2%
I paid around 0.5% of account value in commissions, which is around 1.6% in SR units. Of course there's slippage as well, which will probably double that number (my trade report code crashed when trying to do the entire year, and I can't be assed to fix it in case I introduce a bug: see earlier comments).
Here's the tail of the tape in a bit more detail (numbers on left are pandas indices, ignore):
Code:
codes pandl
0 V2X -4.41
1 SOYBEAN -1.96
2 KR10 -1.48
3 VIX -1.42
4 MXP -1.42
5 COPPER -0.89
6 CAC -0.84
7 SP500 -0.78
8 JPY -0.72
9 AEX -0.67
10 GOLD -0.27
11 KR3 -0.08
12 EUR -0.03
13 US5 0.00
14 GBP 0.05
15 US10 0.07
16 OAT 0.09
17 US2 0.20
18 KOSPI 0.33
19 GAS_US 0.53
20 NZD 0.56
21 BOBL 0.56
22 PLAT 0.73
23 NASDAQ 0.73
24 LIVECOW 0.87
25 CRUDE_W 0.97
26 BUND 1.12
27 CORN 1.36
28 LEANHOG 1.53
29 AUD 3.08
30 BTP 3.68
31 WHEAT 4.14
32 EDOLLAR 4.84
33 PALLAD 6.11
==================
P&L by asset class
==================
codes pandl
Vol -5.83
Equity -1.17
OilGas 1.50
FX 1.52
Bond 4.17
STIR 4.84
Metals 5.68
Ags 5.93
Apart from banging my usual drum about diversification, it's difficult to know what to say about the above.
I would do you a nice chart, but I haven't written the code. I promise my April review will be charts galore. Suffice to say that looking at Fundseeder (which I see isn't updating again; I fear it will be like my other favourite fintech firm Quantopian and vanish, killed by a market that doesn't like people who try and do things properly) I basically made all this money in January, and I've since run flat; up a bit, down a bit. That means the p&l for the financial year, which I actually care about, is -4% (incidentally, I've never lost money in a financial year on my entire trading account, though I came close in 2017. It's looking like this will be the year). Current d/d is around 11.5%.
OK that's the boring stuff over with. How has 2020 been for everyone? Stupid question, perhaps. I had a quick look at my new years resolutions- mostly stuff about spending less time on social media and exercising more- and they haven't worked out so well.
I also had a bit of fun looking back to a post I made almost exactly a year ago, which I quote from here:
"Since the summer I've rethought my plan to shut down my existing trading system and pysystemtrade in favour of a completely new platform. Instead I've gone back to plan A: keep the existing system running whilst adding production logic to pysystemtrade so it will be able to replace the legacy code. I'm also going to implement my new ideas on pysystemtrade, although this will require some tweaking to the current system it's worth doing.
....
My initial goal is to get FX and futures price collection running, and in preparation for that I have been copying across my legacy data and rebuilding the adjusted price curves for each market. To help with that process I've taken out a one year subscription to another price service. It cost $300, but it means I've been able to backfill some more data history. I also want to add price collection for some futures I don't currently trade, since the new system (which exists only in my head at the moment).
As you may have noticed, I've had an early new years resolution of writing one new blog post a month, which I've so far managed to stick to.
I've had a lot of conference requests for 2020, and so far I've said yes to all of them. Definites are New York, possibles are Australia, Hamburg and Istanbul. I'm also doing some talks at local universities. I start teaching in January, so it's looking pretty busy for next year."
OK we can all have a good laugh about the fact I didn't end up flying all over the world talking to people; in fact I haven't been on an aircraft since a skiing trip to Northern Italy in February that may well have made me a localised patient zero for all I know. But otherwise the plan has gone pretty well. I did close down my existing system, albeit I was forced to in the end. Pysystemtrade is now a fully fledged trading system that runs pretty well, and I'm very comfortable to let it run for two weeks with no intervention. As well as the daily emails it sends me, I even have a little web page now which monitors the status of every process on the machine (the first HTML I have done in over 20 years):
Code:
Last update 2020-12-18 10:29:07.064857
run_capital_update Started 12/18 01:00:00 ended 12/17 19:00:28 Status GO PID 107046.0 running
run_daily_prices_updates Started 12/17 20:05:18 ended 12/17 21:40:48 Status GO PID 0.0 not running
run_systems Started 12/17 21:40:48 ended 12/17 22:13:25 Status GO PID 0.0 not running
run_strategy_order_generator Started 12/17 22:13:25 ended 12/17 22:17:00 Status GO PID 0.0 not running
run_stack_handler Started 12/18 00:30:23 ended 12/17 19:30:18 Status GO PID 106943.0 running
run_reports Started 12/17 22:55:27 ended 12/17 23:23:59 Status GO PID 0.0 not running
run_cleaners Started 12/17 22:00:18 ended 12/17 22:00:53 Status GO PID 0.0 not running
run_backups Started 12/17 22:05:21 ended 12/18 00:02:29 Status GO PID 0.0 not running
Status of run_reports changed from running to not running at 12/16 23:27:17
Status of run_backups changed from running to not running at 12/17 00:07:19
Status of run_stack_handler changed from not running to running at 12/17 00:32:20
Status of run_capital_update changed from not running to running at 12/17 01:02:21
Status of run_capital_update changed from running to not running at 12/17 19:03:20
Status of run_stack_handler changed from running to not running at 12/17 19:33:21
Status of run_daily_prices_updates changed from not running to running at 12/17 20:08:23
Status of run_daily_prices_updates changed from running to not running at 12/17 21:43:27
Status of run_systems changed from not running to running at 12/17 21:43:27
Status of run_backups changed from not running to running at 12/17 22:08:28
Status of run_systems changed from running to not running at 12/17 22:13:28
Status of run_strategy_order_generator changed from not running to running at 12/17 22:13:28
Status of run_strategy_order_generator changed from running to not running at 12/17 22:18:28
Status of run_reports changed from not running to running at 12/17 22:58:30
Status of run_reports changed from running to not running at 12/17 23:28:32
Status of run_backups changed from running to not running at 12/18 00:03:33
Status of run_stack_handler changed from not running to running at 12/18 00:33:34
Status of run_capital_update changed from not running to running at 12/18 01:03:36
(yeah I know, I should have spent months learning the docker/kubernetes/puppet/chef/ansible stack and do this properly, instead of a few hours writing my own process manager)
So what does 2021 look like (ignoring, again, the pandemic sized pachyderm in the parlour). Much to my surprise my teaching contract was renewed, so I have to prep my course which starts in late January. That will be a bit more work than usual since it's going to be online, and I need to create a lot more resources (not easy, as there is a lot of confusion about exactly how this is going to be delivered, plus a beweildering array of advice when I just want to be told what to do).
The first of my new trading PCs should be delivered on Monday, so I'll be configuring that, and perhaps even building another one (see previous posts). I'm about halfway through a refactoring/tidying up of pysystemtrade to ensure everything is reasonably bullet proof and also extendable. Then there's a relatively short list of features I want to add to it before heading into my first piece new trading system research, what I've called 'stage 5' of the 'project'. Most of these are things to make the system easier to run more easily on a day to day basis; the only one that might cause some pain is upgrading pandas to 1.0
Stage 5 basically involves an optimiser that utilities small amounts of capital more efficiently, and can thus 'trade' (or at least generate signals for) a very large number of markets (including markets I can't actually trade, because the undelayed data is too expensive or the lot size too big). I'm fairly confident I can finish stage 5 and get something implemented fairly quickly. My other major goal is to get a proposal written for my next book, and start writing it. Working backwards, if I can get a proposal done by April then the book will come out in October 2022. So there will probably be some overlap; I find I'm happier if I'm not 100% on one project at a time (context switching in weekly blocks works pretty well).
Anyway, good wishes to all and all that stuff, and let's hope things look generally better in a years time.
GAT