Fully automated futures trading

Hi GAT
I have read your book, (some of) your blog plus this thread - you have written a lot of very interesting material. I am interested to understand more about your perspective on the use of stops. I recollect that you are ambivalent towards using stops, and as far as I can make out, you do not use them. Nearly everything else I have read views the use of stops as virtually mandatory. Fundamentally why do you not care? is it because you trade across a very diversified portfolio of futures (40) so if one goes very South very quickly, damage to your portfolio will be limited? Is it because you stay away from low volatility instruments, and think the "amount your instruments can go South by" is therefore limited? You describe your system as relatively slow, so I am assuming even if one of your chosen instruments had a CHF-like event, then your system would still not adjust very quickly. Finally - if you were to introduce stops to your trading as a safety mechanism, how would you go about that? Thanks for your thoughts.
 
Hi GAT
I have read your book, (some of) your blog plus this thread - you have written a lot of very interesting material. I am interested to understand more about your perspective on the use of stops. I recollect that you are ambivalent towards using stops, and as far as I can make out, you do not use them. Nearly everything else I have read views the use of stops as virtually mandatory. Fundamentally why do you not care? is it because you trade across a very diversified portfolio of futures (40) so if one goes very South very quickly, damage to your portfolio will be limited? Is it because you stay away from low volatility instruments, and think the "amount your instruments can go South by" is therefore limited? You describe your system as relatively slow, so I am assuming even if one of your chosen instruments had a CHF-like event, then your system would still not adjust very quickly. Finally - if you were to introduce stops to your trading as a safety mechanism, how would you go about that? Thanks for your thoughts.

" I recollect that you are ambivalent towards using stops, and as far as I can make out, you do not use them."

Not true. There are two ways I like to trade

- with explicit stops

If you (re-) read chapter 13 you'll see a description of a system using stops. Basically you have discrete positions, and you set trailing stops. I explain how to calibrate the stops

- with implicit stops

In my own trading, and in chapter 15, I use implicit stops. So I have a contionous forecast rather than discrete positions - stops don't make sense. But the forecast has a big pile of trend following in it. This means that if the price moves against me, I'll be cutting my position as the forecast fades to zero.

Its just too ways of thinking about risk. In the first way you think about it on a position by position basis. In the second way you're thinking about your daily portfolio risk (I show how to map between them in chapters 9 and 13).

Hope that makes sense
GAT
 
" I recollect that you are ambivalent towards using stops, and as far as I can make out, you do not use them."

Not true. There are two ways I like to trade

- with explicit stops

If you (re-) read chapter 13 you'll see a description of a system using stops. Basically you have discrete positions, and you set trailing stops. I explain how to calibrate the stops

- with implicit stops

In my own trading, and in chapter 15, I use implicit stops. So I have a contionous forecast rather than discrete positions - stops don't make sense. But the forecast has a big pile of trend following in it. This means that if the price moves against me, I'll be cutting my position as the forecast fades to zero.

Its just too ways of thinking about risk. In the first way you think about it on a position by position basis. In the second way you're thinking about your daily portfolio risk (I show how to map between them in chapters 9 and 13).

Hope that makes sense
GAT

Thanks for your reply - I re-read chapter 13 :D

On a separate topic I am interested in how you chose your approach to implementing your system. You seem to have been truly DIY and built nearly everything yourself. Did you ever look closely at the Ninja Traders and Trade Stations of this world? So much seems to come out of the box with those products. Or did you go DIY because you wanted complete flexibility / wanted to know exactly how everything worked / wanted a fun project etc.
 
Thanks for your reply - I re-read chapter 13 :D

On a separate topic I am interested in how you chose your approach to implementing your system. You seem to have been truly DIY and built nearly everything yourself. Did you ever look closely at the Ninja Traders and Trade Stations of this world? So much seems to come out of the box with those products. Or did you go DIY because you wanted complete flexibility / wanted to know exactly how everything worked / wanted a fun project etc.

The reasons you give are correct (flexibility, control, fun). Also please bear in mind where I've come from; when I came to do this project I'd been designing and building automated trading systems for nearly a decade (though admittedly I'd never built a complete end to end system, mainly focusing on the backtesting part). But I'd never touched NT or TS, or anything like it (nearly every systematic fund out there prefers to build their own system), so I'd have had a steep learning curve to learn those products, and then I might not be able to do exactly what I wanted. It only took me a few months to implement exactly what I wanted but building it entirely myself (standard python libraries, and swigibpy aside).

GAT
 
Monthly review (last one was Jan 5th)

figure_2.png

figure_1.png

P&L: 18.9%. Total since inception 92.7%

Drawdown: 3.5% off new HWM (set yesterday morning)

As I've already hinted (with my post about a record day) this has been an absolutely cracking month. In August 2014 I made 11.1%, so this is a record. One of the things about fully automated trading is you don't neccessarily realise what the heck is going on (actually in August 2014 I went on holiday for 2 weeks... so I really didn't know what was going on). I'd assumed that I'd mainly benefited from the continued sell off in Crude (plus some Gas). In fact when I checked out my p&l by far the biggest gain was in Eurodollars which has done something like 70 ticks in a month. That's a lot. It's a move that had completely passed me by, since the media was focusing so much on Crude....

Reports:

P&L

Gainers:

Eurodollar: 11K
OAT: 5.2K
Crude: 4.7K
Gas: 3.9K
GBP: 3.7K
MXP: 3.2K

Losers:

BTP: -2.2K
PLAT: -2.6K
Soy: -2.6K
Corn: -3.5K


Positions
Code:
       code contractid  positions   Lock WrongContract InFwdNotRoll
13     BOBL     201603          3  False         False        False
16      BTP     201603          3  False         False        False
22     BUND     201603          1  False         False        False
20   COPPER     201603         -2  False         False        False
1      CORN     201612         -6  False         False        False
10  CRUDE_W     201612         -2  False         False        False
6   EDOLLAR     201906          8  False         False        False
11  EDOLLAR     201903          6  False         False        False
3   EUROSTX     201603        -13  False         False        False (Hedge)
0    GAS_US     201604         -3  False         False        False
12     KR10     201603          3  False         False        False
24      KR3     201603          8  False         False        False
17  LEANHOG     201606          1  False         False        False
21  LIVECOW     201610         -1  False         False        False
2       MXP     201603         -3  False         False        False
14      OAT     201603          3  False         False        False
4    PALLAD     201603         -1  False         False        False
8      PLAT     201604         -1  False         False        False
23  SOYBEAN     201611         -1  False         False        False
19     US10     201603          1  False         False        False
18      US2     201603          3  False         False        False
5       US5     201603          2  False         False        False
7       V2X     201604          1  False         False        False
15      V2X     201603          3  False         False        False
9     WHEAT     201612         -5  False         False        False



Risk
Code:
       code  multisignal  expected_annual_risk  expected_annual_risk_per_contract  position  expected_annual_risk_rounded_pos

Longs
1   LEANHOG          7.2                  4989                               2712         1                              2712
3   SOYBEAN         -4.6                  3205                               3613        -1                              3613
13      US2          5.1                  3507                               1233         3                              3699
16      V2X          7.3                  5035                                996         4                              3986
12     US10          6.1                  4222                               4003         1                              4003
15      US5          6.6                  4585                               2300         2                              4600
6       KR3          8.3                  5754                                682         8                              5456
7      BOBL          8.1                  5627                               1918         3                              5753
9      BUND         12.2                  8430                               6318         1                              6318
5      KR10         11.3                  7823                               2991         3                              8974
10      OAT         24.4                 16860                               5968         3                             17903
8       BTP         27.1                 18768                               7192         3                             21575
36  EDOLLAR         27.5                 19036                               1350        14                             18907


Shorts:
2   LIVECOW         -8.5                  5866                               5093        -1                              5093
29      NZD         -4.0                  2791                               7054        -1                              7054
33     PLAT         -7.0                  4848                               8574        -1                              8574
28      MXP        -11.0                  7586                               2983        -3                              8950
0      CORN        -15.4                 10650                               1700        -6                             10200
32   PALLAD        -23.2                 16072                              11543        -1                             11543
30   COPPER        -15.7                 10840                               7462        -2                             14924
4     WHEAT        -22.6                 15623                               3002        -5                             15008
35   GAS_US        -34.7                 24051                               7118        -3                             21355
34  CRUDE_W        -35.5                 24558                              12978        -2                             25956

Trades
Code:
         code contractid     filled_datetime  filledtrade  filledprice
8209      AUD     201603 2016-01-07 09:49:12            1     0.700300
8245      AUD     201603 2016-01-12 05:25:35           -1     0.695600
8341      AUD     201603 2016-01-21 17:29:43            1     0.698000
8419      AUD     201603 2016-01-28 09:54:47            1     0.707500
8221     BOBL     201603 2016-01-08 07:41:12            1   131.200000
8416     BOBL     201603 2016-01-28 07:45:38            1   132.060000
8500     BOBL     201603 2016-02-04 07:42:11            1   132.530000
8242      BTP     201603 2016-01-11 12:49:06           -1   138.250000
8335      BTP     201603 2016-01-20 12:05:13           -1   137.380000
8392      BTP     201603 2016-01-26 08:34:18            1   138.540000
8428      BTP     201603 2016-01-28 13:07:06            1   139.160000
8203     BUND     201603 2016-01-07 09:46:09            1   159.980000
8248     BUND     201603 2016-01-12 08:36:57           -1   158.870000
8278     BUND     201603 2016-01-13 12:42:23            1   159.760000
8233      CAC     201601 2016-01-11 10:18:23            1  4350.000000
8236      CAC     201602 2016-01-11 10:18:23           -1  4342.500000
8371      CAC     201602 2016-01-22 15:38:46            1  4356.500000
8281   COPPER     201603 2016-01-13 19:31:57           -1     1.955500
8320   COPPER     201603 2016-01-19 11:39:37            1     1.998500
8329     CORN     201612 2016-01-19 14:30:00            1   388.750000
8359     CORN     201612 2016-01-22 14:53:07            1   391.750000
8323  CRUDE_W     201612 2016-01-19 11:45:11            1    36.900000
8227  EDOLLAR     201906 2016-01-08 15:39:48            1    98.010000
8317  EDOLLAR     201906 2016-01-18 14:38:53            1    98.215000
8368  EDOLLAR     201903 2016-01-22 15:26:29           -1    98.225000
8389  EDOLLAR     201906 2016-01-25 17:27:12            1    98.185000
8404  EDOLLAR     201906 2016-01-27 12:47:28            1    98.195000
8425  EDOLLAR     201906 2016-01-28 13:03:50            1    98.210000
8449  EDOLLAR     201906 2016-01-29 13:57:40            1    98.285000
8218      EUR     201603 2016-01-08 02:21:05            1     1.089700
8377      EUR     201603 2016-01-25 02:13:26           -1     1.081500
8407      EUR     201603 2016-01-27 13:57:48            1     1.090750
8239   GAS_US     201603 2016-01-11 12:15:17            1     2.442000
8275   GAS_US     201604 2016-01-13 12:34:17           -1     2.355000
8332   GAS_US     201604 2016-01-19 16:21:45           -1     2.186000
8383   GAS_US     201603 2016-01-25 12:08:51            1     2.147000
8386   GAS_US     201604 2016-01-25 12:08:51           -1     2.225000
8212      GBP     201603 2016-01-07 09:50:32           -1     1.458100
8344      GBP     201603 2016-01-22 06:54:51            1     1.423700
8422      GBP     201603 2016-01-28 10:40:22            1     1.434000
8479      GBP     201603 2016-02-02 02:10:42            1     1.443200
8497      GBP     201603 2016-02-04 02:30:03            1     1.458300
8434      JPY     201603 2016-01-29 03:34:55           -1     0.008407
8494      JPY     201603 2016-02-03 19:08:07            1     0.008535
8374    KOSPI     201603 2016-01-25 02:08:11            1   231.300000
8488     KR10     201603 2016-02-02 04:25:27            1   127.990000
8413      KR3     201603 2016-01-28 02:27:06            1   109.750000
8476      KR3     201603 2016-02-01 04:36:59           -1   110.080000
8410  LEANHOG     201606 2016-01-27 14:09:27            1    79.900000
8215  LIVECOW     201610 2016-01-07 15:35:23            1   124.225000
8347      MXP     201603 2016-01-22 10:00:56            1     0.053760
8260   NASDAQ     201603 2016-01-12 14:04:03           -1  4313.250000
8296   NASDAQ     201603 2016-01-15 14:21:48            1  4131.750000
8287      NZD     201603 2016-01-15 02:40:11           -1     0.642500
8506      NZD     201603 2016-02-05 05:54:46            1     0.667100
8509      NZD     201603 2016-02-05 05:56:51           -1     0.666900
8206      OAT     201603 2016-01-07 09:46:34            1   151.600000
8257      OAT     201603 2016-01-12 10:39:16           -1   150.430000
8272      OAT     201603 2016-01-13 10:37:48            1   151.130000
8395      OAT     201603 2016-01-27 07:37:36            1   153.300000
8398   PALLAD     201603 2016-01-27 12:28:11           -1   494.700000
8503   PALLAD     201603 2016-02-04 18:10:04            1   517.150000
8290     PLAT     201604 2016-01-15 12:51:06           -1   830.700000
8401     PLAT     201604 2016-01-27 12:31:07            1   874.700000
8269  SOYBEAN     201611 2016-01-12 17:26:26            1   889.000000
8284  SOYBEAN     201611 2016-01-14 14:56:58            1   886.250000
8326  SOYBEAN     201611 2016-01-19 11:53:10            1   889.250000
8350  SOYBEAN     201611 2016-01-22 12:22:46            1   890.250000
8491  SOYBEAN     201611 2016-02-02 17:19:50            1   897.750000
8338     US10     201603 2016-01-20 13:25:52            1   128.859375
8293      US2     201603 2016-01-15 14:13:38           -1   109.109375
8452      US2     201603 2016-01-29 14:12:50            1   109.296875
8224      US5     201603 2016-01-08 14:13:08            1   119.132812
8431      US5     201603 2016-01-28 14:07:25            1   120.265625
8230      V2X     201603 2016-01-11 08:10:21            1    26.150000
8299      V2X     201603 2016-01-18 09:35:28            1    27.700000
8380      V2X     201603 2016-01-25 09:02:50            1    27.050000
8437      V2X     201604 2016-01-29 08:05:53            1    26.900000
8254      VIX     201602 2016-01-12 10:07:01            1    21.650000
8266    WHEAT     201612 2016-01-12 17:24:36            1   513.000000
8356    WHEAT     201612 2016-01-22 14:31:16            1   510.250000
8446    WHEAT     201612 2016-01-29 13:14:55           -1   506.500000

Expected slippage £417, actual £86

GAT
 
Your actual slippage seems to be a lot better than your expected, is this true? If it is true, is there some inherent conservatism in your algo that may cause you to miss trades?
 
Your actual slippage seems to be a lot better than your expected, is this true? If it is true, is there some inherent conservatism in your algo that may cause you to miss trades?

Expectation is bid-ask. So if my execution algo is any good I should do better than that on average. I don't yet have any stats on how well my algo is expected to do.

Although it's theoretically possible to miss a trade I don't think its ever happened.

GAT
 
I'll add to this: it also seems your performance overall is better than what you'd expected. So really, is your conservatism in testing causing you to miss trades? There's a central question here that I'm doing a poor job of articulating.
 
One is I trade relatively slowly (average holding period of perhaps a month), so I don't react much to intraday moves. Suppose I was long Emini and the market dropped 300 points; then reversed and rose 300 points, and then dropped 300 points. On the first drop I would have cut my position massively; partly because the trend has started to fade, mainly because volatility has spiked. On the move up I wouldn't do anything. Volatility hasn't fallen, if anything it's gone up. On the next down move again I wouldn't do anything.


GAT

Hi - I have a question on the cut in your position in this scenario. During the first drop of 300 points, you state you system will cut your position massively: how quickly will it achieve this? I assume the EWMAC rules of 30, 60, 120 days that you run are the ones which will respond to a move like this: do they really move quickly enough to cut your position quickly? I have tried poking around with your EMWAC trading rule example spreadsheet in your book resources, e.g. dropping the price at the tail end from 70s to 50s, the forecast changes but takes days to reach a hard negative -20. What am I missing.
 
Hi - I have a question on the cut in your position in this scenario. During the first drop of 300 points, you state you system will cut your position massively: how quickly will it achieve this? I assume the EWMAC rules of 30, 60, 120 days that you run are the ones which will respond to a move like this: do they really move quickly enough to cut your position quickly? I have tried poking around with your EMWAC trading rule example spreadsheet in your book resources, e.g. dropping the price at the tail end from 70s to 50s, the forecast changes but takes days to reach a hard negative -20. What am I missing.

I said I cut my position quickly. I didn't say I'd go massively short quickly. Most of the position cutting would come from the spike in volatility by the way. Also to someone whose average holding period is a month a few days is quickly.

GAT
 
Back
Top