Portfolio Design

Advanced concepts in stock investment portfolio design.  Fundamentals, technical analysis and many other related topics are discussed.

Momentum: Getting My Feet Wet

In the last post, I introduced an idea for development of a momentum-based ranking system specific to asset class ETFs. Today, I would like to share the results of some initial tests that I have performed.


In the previous post Momentum-Based Ranking System For Asset Class ETFs, I identified three ETFs that I would initially start with:  Gold (Symbol:  GLD), US Real Estate (Symbol: IYR), and Bullish US Dollar (Symbol: UUP). UUP started trading in late 2007, so results won't be completely representative of my desired 3:1 multiplexor (one ETF from three inputs). 

As with all experimental testing that I do with Portfolio123 tools, my commissions and slippage are set to zero, the reason being that at this stage I am not worried about the ability to invest practically, but to view results that might be impaired by transaction costs. Also, I always set simulation rebalance period to Weekly.

For this session, my objective is to run some basic tests to see whether a momentum rule for these ETFs is practical.  After I see the results then I can determine where to go from there.  I thought I would start with basic Rate Of Change (ROC) for 4 weeks, 3 months, 6 months, and 1 year.  The reason is that I know of people using either 3 month or 1 year ROC for sector rotation strategies. Portfolio123 has some convenient factors for ROC that include dividends paid.  They are TotalReturn4W, TotalReturn13W, TotalReturn26W, and TotalReturn (i.e. 1 year). The results using these as a single factor in a ranking system is shown below.

Comparison of 4 Week to 52 Week Total Return ranking systems tested on GLD, IYR, and UUP

Comparison of 4 Week to 52 Week Total Return ranking systems tested on GLD, IYR, and UUP

Backtest result for the 26 Week Total Return ranking system applied to GLD, IYR, and UUP

The results in all cases are pretty disappointing, particularly in the later years once UUP enters the picture.


Then I ran tests using the closing price divided by a Simple Moving Average (SMA).  I kept the tests minimal, testing using a 50 day, 100 day, and 200 moving average. Again, the results were not exciting. The recent performance appears to be slightly worse than the previous set of tests.

Comparison of ranking system results with variations of Close / SMA(n), where n=50, 100, 200.

Comparison of ranking system results with variations of Close / SMA(n), where n=50, 100, 200.

Backtest result for Close / SMA(100) ranking system applied to GLD, IYR, and UUP


This is where things start to get a bit more interesting.  This set of tests executes a slightly more complex rule dividing one SMA  i.e. SMA(x) / SMA(y), where x is less than y. The higher the result, the greater momentum the asset is assumed to have. The results are somewhat better than previous testing, and now gives me some optimism about the makings of a momentum RS. Note for future reference that the optimum rule is SMA(100)/SMA(200).  

 

Comparison of ranking system results with variations of SMA(n) / SMA(200), where n=10, 20, 30, ..., 120

Comparison of ranking system results with variations of SMA(n) / SMA(200), where n=10, 20, 30, ..., 120

Backtest result for SMA(100) / SMA(200) ranking system applied to GLD, IYR, and UUP


The previous test is now repeated using Exponential Moving Averages (EMA) instead of SMA.  Note that the optimum result occurs at EMA(80)/EMA(200) and also at EMA(100)/EMA(200).  The point in between these two runs is a very slight dip in performance.

Comparison of ranking system results with variations of EMA(n) / EMA(200), where n=10, 20, 30, ..., 120

Comparison of ranking system results with variations of EMA(n) / EMA(200), where n=10, 20, 30, ..., 120

Backtest result for EMA(100) / EMA(200) ranking system applied to GLD, IYR, and UUP


The EMA(x)/EMA(y) and SMA(x)/SMA(y) are examples of bandpass filters with one zero and one pole, being at x and y respectively (you have to convert to the frequency domain).  Don't ask me to draw the Bode plot for these as I haven't done this kind of exercise in 40 years, way back in my electrical engineering studies.  I kind of wish Portfolio123 would offer a zero lag bandpass filter as we can't do this with our existing tools. This is something that I'll put on my Christmas list.  Is there really a Santa Claus?

Now I asked the reader to note the peak returns for the previous two test runs.  The first was SMA(100)/SMA(200).  The second was EMA(100)/EMA(200). So this is probably coincidence but I am curious to know if the peak return always occurs when x=1/2*y.  Perhaps there is kind of a Nyquist-like thing going on.  So I ran another set of tests, this time with EMA(x)/EMA(100).

Comparison of ranking system results with variations of EMA(n) / EMA(100), where n=10, 20, 30, ..., 70

Comparison of ranking system results with variations of EMA(n) / EMA(100), where n=10, 20, 30, ..., 70

Backtest result for EMA(50) / EMA(100) ranking system applied to GLD, IYR, and UUP

The peak return occurs at EMA(50)/EMA(100), so again the top number (50) is one half the bottom number (100). I'll have to think about this for a while and come up with some analysis and identify new tests.  The results look promising so far. But keep in mind this is highly optimized work.