On Wed, Feb 9, 2011 at 3:38 PM, Brian G. Peterson <[email protected]> wrote: > On 02/09/2011 05:09 PM, Mark Knecht wrote: <SNIP> >> 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? > > I would ask a different question. > > I assume that the P&L distribution of your strategies is not normally > distributed, so minimizing covariances would also minimize positive skew, > which is likely not the outcome that you want. > > Here's a simplified/modified version of a process I've used in the past to > choose among 'similar' systems (in this case similar in all operating on the > same market). > > 1. first eliminate the ones with 'bad' performance based on criteria you set > (drawdowns, worst day, percent winning/losing days, etc.) > > 2. take your two 'best' performers. this may be just P&L or may be in > combination with other statistics. > > 3. pick the other 3 by looking for low/inverse correlations to your two > best, or alternately just pick the five best > > 4. run a portfolio optimization to decide 'how much' to allocate to each > system. I use an objective like 'maximize return subject to minimizing > drawdowns and minimizing risk concentration (component ES) while keeping my > total drawdown and 1-day (95%, 1 in 20, about 1 day per month) ES below a > specific threshold. > > 5. trade your five systems using those portfolio weights converted backwards > to maximum position sizes. > > If you have the capital, I'd skip steps 2 & 3 entirely, and let the > optimizer decide 'how much'. > > Regards, > > - Brian
Brian, Thanks for the detailed response. It's good info and if I was building a portfolio of these systems to trade then I'd likely do something similar. None the less, off of StackOverflow I received a nice enough solution, shown below in case it helps others looking for similar solutions. (I take no credit other than for asking the question.) ;-) Cheers, Mark x<-matrix(runif(100),10,10) cor<-cor(x) l <- length(cor) l1 <- length(cor[cor<1]) #the actual high and low correlation indexes corHigh <- order(cor)[(l1-4):l1] corLow <- order(cor)[1:5] #(if you just want to view the correlations cor[corLow] or cor[corHigh] works fine) #isolate them in the matrix so you can see where they came from easily corHighView <- cor corHighView[!1:l %in% corHigh] <- NA corLowView <- cor corLowView[!1:l %in% corLow] <- NA #look at your matrix with your target correlations sticking out like a sore thumb options(digits=2) cor corLowView corHighView _______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. If you want to post, subscribe first. -- Also note that this is not the r-help list where general R questions should go.
