[R-SIG-Finance] Trading system correlation?

Mark Knecht markknecht at gmail.com
Thu Feb 10 00:09:10 CET 2011


On Wed, Jan 5, 2011 at 9:21 AM, David St John <dstjohn at math.uic.edu> wrote:
<SNIP>
>
> x1 x2 x3
>
> x1 1.0000000 0.7682398 0.6788077
>
> x2 0.7682398 1.0000000 0.6088950
>
> x3 0.6788077 0.6088950 1.0000000
>
> As you can see, even if you were just randomly buying and selling these
> contracts at odd times, but most of the time had no position (68% of the
> time in my example), then the systems will still be very strongly
> correlated. Since you are trying to find comparatively lower correlation
> between market/system pairs, I think this would be as fine a measure as
> any.  Just look for the smallest entries in your correlation matrix.
>
>
> Hope this helps,
> -David

Hi all,
   Back from oblivion. I finally got some time over the last few days
to try and put some shape to this problem. Most of this is background.
Skip to the bottom to get the question about R.

REVUE: I have saved historical trade results from a large set of
systems. (In this case 30) Every file used as input to this R program
comes from a completely different trading system operating on the same
market. (In this case about 15 months trading the Russell futures
market - TF.D in TradeStation) I have aggregated the data into
results/day and placed them in a large array. Looking at just the
first 10 systems for the first 20 days the results look like this:
(unlikely to survive email very well...)

> MyResults[1:20,1:11]
   TradingDate PL1  PL2  PL3   PL4   PL5  PL6  PL7  PL8  PL9 PL10
1   2009-06-01   0    0    0     0     0    0    0    0    0    0
2   2009-06-02   0    0    0     0     0    0    0    0    0    0
3   2009-06-03   0    0    0     0     0    0    0    0    0    0
4   2009-06-04   0  341    0     0   -89 -609    0    0 1001    0
5   2009-06-05   0 -569 -569  -299   333  161    0  151    0 -109
6   2009-06-08   0   12 -189  -189   471 -189    0  251    0    0
7   2009-06-09   0   81 -149   -79     0 -159 -379    0    0    0
8   2009-06-10  91 -799 -119  -999     0   11    0    0  401    0
9   2009-06-11   0 -249  191     0   271 -289 -979  571  -49 -639
10  2009-06-12   0  391 -449     0     0  391    0    0  741    0
11  2009-06-15 582  351  591   343     0  581    0    0  291  351
12  2009-06-16   0 -109    0 -1137   612  941    0 1201 1291    0
13  2009-06-17   0  171  151  -329   401 -339    0  451  581    0
14  2009-06-18   0  531 -169   -19     0  552 -109    0    0    0
15  2009-06-19   0 -429 -429  -309   352  271    0 -309  401   -9
16  2009-06-22 592 1342  621   504     0 1222    0    0    0  301
17  2009-06-23   0    0    0   564     0 -429    0    0    0    0
18  2009-06-24  61 -379  -59     0   401   81    0  401    0    0
19  2009-06-25   0 1811    0     0 -1029 1782  801  381 -559  261
20  2009-06-26   0   71   71    71   241    0  241  441   -9   91
>

Here's an idea of the system results from a returns point of view:

> colSums(CorData)
  PL1   PL2   PL3   PL4   PL5   PL6   PL7   PL8   PL9  PL10  PL11
PL12  PL13  PL14  PL15  PL16  PL17  PL18  PL19  PL20  PL21  PL22  PL23
 PL24  PL25
24065 35073 36471 18273 19257 30939 19296 24073 27412 20512 29211
28338 29093 23487 36062 18125 21926 34095 30921 32945 30546 18295
30707 27885 15864
 PL26  PL27  PL28  PL29  PL30
23497 34502 31098 28028 30616

> mean(colSums(CorData))
[1] 27020

> sd(colSums(CorData))
[1] 6054

(Not sure mean and sd make sense for this, but that's about the limit
to my understanding about statistics...) ;-)

OK, so here's the R question. Let's say I'm willing to trade 5 systems
at one time and I have to pick 5. How do I pick?

1) Find the 5 with the largest equity. Too easy. Don't need R to do that.

2) Find some sort of 'optimized' choice...

Looking at the correlation of just the first 10 systems I get this:

> CorResults[1:10,1:10]
         PL1    PL2    PL3     PL4     PL5    PL6     PL7     PL8    PL9    PL10
PL1   1.0000  0.199 -0.030 -0.1534 -0.0433 -0.047 -0.0017 -0.0542  0.052  0.0079
PL2   0.1991  1.000  0.090  0.1306 -0.0398  0.029  0.4504 -0.1713 -0.310  0.5159
PL3  -0.0299  0.090  1.000  0.1848  0.2170  0.157  0.1718  0.3185  0.083  0.4330
PL4  -0.1534  0.131  0.185  1.0000  0.0063  0.170  0.2640  0.0639 -0.178  0.2653
PL5  -0.0433 -0.040  0.217  0.0063  1.0000  0.075 -0.0168  0.1581  0.116  0.1855
PL6  -0.0470  0.029  0.157  0.1700  0.0751  1.000  0.0145  0.1401  0.011  0.0912
PL7  -0.0017  0.450  0.172  0.2640 -0.0168  0.014  1.0000 -0.0666 -0.207  0.5081
PL8  -0.0542 -0.171  0.319  0.0639  0.1581  0.140 -0.0666  1.0000  0.220  0.0098
PL9   0.0520 -0.310  0.083 -0.1781  0.1157  0.011 -0.2071  0.2195  1.000 -0.2296
PL10  0.0079  0.516  0.433  0.2653  0.1855  0.091  0.5081  0.0098 -0.230  1.0000

I'd like to take this to the next level where I pick a group of 5 that
has the lowest overall correlation, and a second group of 5 that has
the highest overall correlation. From that I'll calculate an aggregate
equity curve and then look at things like ROA on the totals as a way
to evaluate how I feel about the groups.

QUESTION:
How can I find the 5 systems in the correlation matrix that when
summed together again all possible combinations of the 5 gives me the
largest or smallest value?

Thanks,
Mark



More information about the R-SIG-Finance mailing list