The series about Harvesting Momentum (see part I, part II and part III) largely covered pairwise strategies. Now it is time to investigate the performance of more diversified universes to generate returns.

A recent post on CSSA presented Momentum Score Matrices as a tool for predicting the profitability of a given asset universe. Assuming a random walk, the momentum profitability depends on the degree in dispersion of mean returns between the assets in a portfolio. David Varadi states: "A heterogeneous universe of assets such as one containing diverse asset classes will have different sources of returns- and hence greater dispersion- than a homogeneous universe such as sectors within a stock index."

Following a similar, but simplified approach to the cross-sectional dispersion of mean returns, the pairwise momentum score can be calculated as the population average of the squared difference between the momentum values of asset ABC against asset XYZ. Or in "R":

Dispersion (D) for $IEF - $TIP based on 3 month returns during 2001 - 2014. Average = 8 |

For an asset collection consisting of 14 assets, this approach results in the below matrix. The calculations can be performed using "R", Excel or AmiBroker. Examples of each are available on the Google Drive connected to this post. AmiBroker has the benefit of exporting the momentum matrix as html-file, which then can be imported into Excel for analysis (and prettifying).

Dispersion matix based on 3 month returns using synthetic $ETF's |

Out of the above asset collection several portfolio's can be assembled. For each portfolio the previously introduced monthly asset rotation strategy is be applied, resulting in the below performance overview.

Based on the readings of the key performance indicators, the N=8 universe was the most profitable. For this universe the portfolio performance breaks down to the following graphs.

N=8 Equity Chart |

N=8 Yearly Profits |

N=8 Profit distribution |

Even though the performance over the 2001 - 2014 bear-bull-bear-bull market cycles is pretty impressive and the strategy already has its build-in c(r)ash protection by allocating capital in treasuries during bear markets, trend filtering can be applied in search for ways to improve profitability.

The trendfilter works like a circuit breaker. Capital can only be allocated to assets that pass the trendfilter test. Each trendfilter is based on the assets own price data, with the exception for the last one, which is an index level trendfilter based on the S&P500 index data (a la Alexander Clenow's filter). The length of the simple and exponential moving averages is based on the default lookback period used in this post: 3 months, hence 4 bars. The index level filter compares a 3 month (4 bars) EMA against a 6 month (7 bars) EMA to distinguish rising trends for stocks in general.

All but one of the trendfilter versions lead to lower CAR, Sharpe, Sortino, Calmar and Ulcer, except for the SMA4 > SMA4[1] version. Applied to monthly quotes this filter compares the current (or last) value of a 4 bar simple moving average against the next to last reading. So for an asset to pass this filter its SMA has to be rising. Albeit the lower CAR, it is interesting to note that the exponential index level trendfilter results in substantially lower max draw down and volatility.

SPY: Buy & Hold (black) compared with SPY filtered on the index level (red) |

The code for AmiBroker strategy with the trend filtering implemented is available on the Google Drive. Look for the

**MRS_TF.afl**.

On the Google Drive also an example of the Excel spreadsheet for this strategy (also known as Simple GMR) is available for the N=6 universe mentioned in the overview table above, though without trend filtering.

Please share your thoughts and idea's in the comment section below. Of course donations are welcome too. As a matter of fact the donation ratio lies below $1/1000 pageviews. Curiously this ratio only has dropped since the last milestone was reached...

[

**Edit August 25, 2014**: dispersion_table.afl updated with automatic count for average length]

[

**Edit August 26, 2014**: Excel example for N=6 universe made available on the Google Drive]