Full index of posts »
StockTalks

Modified GMR Signal For September: ILF http://seekingalpha.com/p/1x321 Sep 2, 2014

Modified GMR Signal For August 2014: EEM http://seekingalpha.com/p/1w47v Aug 18, 2014

Options Trading System: SSO $SSO, $VXX http://seekingalpha.com/p/1ue55 Jul 25, 2014
Latest Comments
 berry on Modified GMR Signal For August 2014: EEM For anyone who wishes to see the effects of var...
 Algyros on Modified GMR Signal For September: ILF Thanks.
 nike X on Modified GMR Signal For September: ILF Yep.
 scarecrow93 on Modified GMR Signal For September: ILF Gotta like the gap down on "buy day"!
 tmdoherty on Modified GMR Signal For August 2014: EEM Right Chuck31, that's the correct formula: calc...
Most Commented
 Modified GMR Signal For June 2014: ILF (Again) (42 Comments)
 Modified GMR Signal For July 2014: SSO (37 Comments)
 Modified GMR Signal: ILF (31 Comments)
 Modified GMR Signal For August 2014: EEM (23 Comments)
 New Options Trading System Signals (CAGR Over 500%??) (21 Comments)
Posts by Themes
asset allocation,
call write,
corrlation,
covered call,
daily,
dynamic,
EDV,
EEM,
EPP,
etf,
ETF,
etflongshortideas,
FEZ,
Fidelity,
funds,
GMR,
GMRE,
Grossman,
ILF,
momentum,
optimize,
options,
portfoliostrategyassetallocation,
profits,
protect,
rotation,
Rotation,
sector,
Sector,
Sharpe,
SHY,
SSO,
swing,
trading,
volatility,
ZIV
Instablogs are Seeking Alpha's free blogging platform customized for finance, with instant set up and exposure to millions of readers interested in the financial markets. Publish your own instablog in minutes.
Equity Curves, A New Sharpe* Ratio, And 20Year Testing Of The Modified GMR 21 comments
EQUITY CURVES
I have posted several articles recently about my modified version of Grossman's Global Rotation Strategy.
I have used the standard metrics to evaluate the system, including CAGR, standard deviation, maximum drawdown, and Sharpe rato. (Sorry, but Sortino gives me a headache.)
I also calculated a value that is similar to standard deviation but which measures the deviation of growth from a monotonic exponential curve. Very simply, I take the LN of returns and fit a straight regression line. Then I calculate the difference between each month's returns from the regression line at that month. I take the root mean square of these differences to arrive at what I call the "linearity" value.
You can see below that the linearity of the modified GMR system over the last 10 years is quite good:
(click to enlarge)
On an arithmetic scale, the returns look like this:
(click to enlarge)
Again, we see quite monotonic growth.
The use of the linearity value was helpful now in optimizing the system some more. Or, actually, deoptimizing it, depending on your point of view.
As discussed in my previous blog post, the maximum returns were provided when the performance and volatility coefficients were 0.75 and 0.25, respectively, and the cash stop threshold was set at 0.75. The linearity value was 14.2% with these parameters.
I found, however, that the "linearity" value could be lowered with other parameters for the weights and cash stop threshold. But these lower values affected performance negatively. I needed to find a way to see the combination of these effects.
The New Sharpe* Ratio
To account for all this, I calculated a new ratio that I call the Sharpe* which is simply the CAGR of returns divided by the linearity value.
The best value for Sharpe* was achieved when the weights were 1.0 and 0.0 for performance and volatility, respectively. In other words, volatility increased the volatility, which makes sense when you consider that higher volatility increased the ranking. Any use of volatility at all in the system reduced the Sharpe* value. While the rate of return fell, the linearity increased by a greater proportion, thereby increasing the Sharpe* ratio.
I found that lowering the stop also improved the Sharpe* value. The optimal value of Sharpe* was achieved with the cash stop threshold at 0.5 (with the weights at 1.0 and 0.0 as above).
With these parameters, the Sharpe* value was a whopping 3.62 with a linearity of 11.1%. (By contrast, the S&P's Sharpe* value is 0.254 with a linearity of 28.9%.) The log of the equity curve and the fit line of my system is shown below:
(click to enlarge)
The 11% linearity is truly remarkable over a 10 year period.
Testing The Modified GMR Back 20 Years
One of the commenters on Grossman's original GMR article had professed to backtesting the system using similar Vanguard mutual funds for which price data was available into the early 1990s. He identified FDVLX (US), FIEUX (Europe), FEMKX (Emerging), FLATX (Latin), FPBFX (Pacific), and VUSTX (Long Bonds).
I found price data for these funds on Yahoo! Finance back to December 1993 and applied the system to this price data. For cash, I used SHY from inception in 2003 and a fixed dollar amount before then.
The system still beat the market handily but did not provide nearly the same returns as the version with modern ETFs. I suspect this may be due at least in part to the fact that the volatilities of the funds had a much larger variation than the ETF volatilities. For instance, the bond fund's volatility was less than half of the other funds, so I doubled the log of monthly performance for that fund only. This improved the performance of the system when applied the funds.
With no cash stop (threshold = 1) and only performance used for ranking (weights = 1.0 and 0.0), the system returned the following since Jan 31, 1994:
Although not as good as the recent ETF system, this is fantastic over 20 years, and I believe it confirms the economic hypothesis of the system.
The equity curve for the fundbased system is below:
(click to enlarge)
The use of volatility impairs performance significantly. When I use 0.75/0.25 for the performance and volatility weighs, results suffer:
You can see the increased choppiness in returns:
(click to enlarge)
Again, still good for 20 years.
At the 1.0/0.0 weights, the linearity was 12.5% with a Sharpe* ratio of 1.65. At the 0.75/0.25 weights, the linearity was 16% with a Sharpe* ratio of 1.05.
Using the cash stop improved the Fidelity system as well, albeit marginally. With the 1.0/0.0 weights, the results with a cash stop threshold at 0.75 were:
Although returns were lower than with no cash stop, linearity was a mere 9.7% and the Sharpe* was maximal at 1.67.
From here, though, lowering the cashstop threshold further gave worse results in a way that was not seen in the ETF system. For instance, if the stop was set to 0.5 (the optimal value for the ETF system) the results were worse:
Linearity was 15.5% and Sharpe* was 0.91.
I have no explanantion for why the cash stop operates at a different threshold for the mutual funds than for the ETFs. (But there are so many differences in these, that it should perhaps be more of a surprise that the system works on them at all.)
The yearoveryear returns for the fundbased system with 0.75 cash stop is shown below compared to FDVLX. I have bolded the years in which the system beat the market.
Conclusions
Given these findings, I have decided to abandon volatility in the system. As Occam suggested, simpler is better. The performanceonly system appears to provide the best results and the most robustness.
Further, given how poorly the 20year system performed with the cash stop set at 0.5, I have determined that the optimal value of the cash stop for the ETF system should be 0.75, even though we saw a higher Sharpe* ratio with cash stop at 0.5. The difference is only very small as shown below and in fact the 0.75 system gives better returns:
Cash stop on ETF system at 0.75:
Linearity of 12.8% and Sharpe* of 3.26
Cash stop on ETF system at 0.5:
Linearity of 11.1% and Sharpe* of 3.62.
The modified GMR system appears to be incredibly rebust over a long period of time. The 20year test confirms the economic principle behind the system. One can only cross our fingers for the future.
With the current settings, the yearoveryear results of the ETF system since 2004 were:
P.S. As I finish typing this, I realized that the figures for my ETF system above and throughout the article do include commissions of 0.04% per trade (i.e. $20 on $50,000). I am not going to go back and replace everything. Obviously, the system performs slightly better than what is shown if you can avoid commissions.
Disclosure: I am long SSO.
Instablogs are blogs which are instantly set up and networked within the Seeking Alpha community. Instablog posts are not selected, edited or screened by Seeking Alpha editors, in contrast to contributors' articles.
Share this Instablog with a colleague
http://bit.ly/MpPxvn
A follow up question: When using the Excel Corel function how many months of previous data of monthly performance do you use?
I'm semiretired after 38 years in Human Resources specializing in Compensation Plan Design for hightechnology companies. I have a relatively good understanding of Excel as a result of my profession. I'm concerned about the risk of losing a big chunk of my already inadequate retirement account and recently subscribed to the SeekingAlpha newsletter. I would like very much to get a copy of an Excel spreadsheet containing your system so I can look at the possibility of using it to protect & grow my IRA. Regards, Jim Johnson
Would you mind explaining the idea behind having a "Cash stop on ETF system at 0,5 or 0,75? What is your cash stop based on? I remember reading in one of your previous articles that it is a correlation between SSO and EDV.
Thanks for sharing.
Just a hint, to step forward from excel you could try R.
It is a great tool adn FREE.
You will find many samples through which you can familiarize with it even if you are not a programmer.
See> http://bit.ly/1gSbWKO
thanks
 calculate log returns of both
 calculate correlation between them over (P_Cor) periods.
 If correlation > C_tresh go SHY, else stick to ticker choosen by system.
Monthly prices: P_Cor = 4, C_tresh = 0.75
Daily prices: P_Cor = 84, C_tresh = 0.00
synEDV = log(synEDV/ref(synEDV,...
synSSO = getseries("synSSO", close);
synSSO = log(synSSO/ref(synSSO,...
corr1 = correl(synEDV, synSSO, P_Cor);
Correlationtrigger = iff(corr1 > C_tresh, stringequal(name(),"sh... !stringequal(name(), "shy"));