Tag: backtest

Dual Momentum: NIFTY vs MIDCAP

In Global Equities Momentum, we looked at how toggling between US Equity Momentum and World ex-US Equity Momentum ETFs gave superior returns to buy-and-hold. Can the same framework be applied to toggle between NIFTY 50, MIDCAP 100 and bonds?

Relative Performance

For dual momentum to work, you need the excess returns of the two equity assets to be un-correlated (or very loosely correlated.) Here is the plot of rolling 200-day cumulative returns of the equity indices minus that of the 0-5 year bond total return index:

excess returns of NIFTY and MIDCAP
The line marked RELATIVE is the difference between MIDCAP 100 returns and NIFTY 50 returns.

What we see here is that there is a high degree of correlation between the two when it comes to excess returns over bonds. At the same time, however, the relative performance between the two equity indices tends to be sticky. So, a dual momentum model tuned to sniff out the “regime” should be able to give returns better than buy-and-hold.

For reference, here is how buy-and-hold performed:
buy-and-hold NIFTY/MIDCAP/bonds

Backtest

Over different look-back periods, here is how the dual-momentum strategy worked:
NIFTY/MIDCAP dual momentum over different look-back periods

Over 3- and 4- month look-backs, the model does seem to show higher returns and lower drawdowns than buy-and-hold. But this is probably going to over-fit past data. But what happens if we specify the model to use “any” of the lookbacks? i.e., stay in equities if any of the look-backs signals the NIFTY 50 has out-performed bonds over the same period?

NIFTY 50/MIDCAP 100 dual momentum over any lookback

Here are its worst drawdowns:
drawdowns of NIFTY 50/MIDCAP 100 dual momentum over any lookback

A model setup this way has lower drawdowns and returns that better than NIFTY 50 but lower than that of MIDCAP 100 buy-and-hold. It really just boils down to how much pain you can bear – for those with a lot of testicular fortitude, buy-and-hold MIDCAPs are the best. But for the rest of us mere mortals, this strategy makes sense. And unlike an SMA model that checks for potential trades every day, this one checks only once a month. This keeps transaction costs low for long-term investors.

Code and more charts are on github.

SMA Strategies, Part III

In Part II of SMA Strategies, we saw how we could reduce drawdowns by making sure that we go long only when the slope of the SMA is positive. i.e., when the SMA is trending higher. Here, we will look at cross-overs.

While previous strategies compared the current value of the index vs. its SMA, a cross-over strategy uses a smaller look-back SMA instead of the index. Essentially, go long if SMA(N/4) > SMA(N).

NIFTY 50 Cumulative Returns

Cross-over only

NIFTY%2050

Cross-over with slope check

NIFTY%2050

The stand-alone slope check from Part II has lower peak drawdowns than the cross-over versions. The additional averaging of recent prices leads to a lagged response. Given the proclivity of our markets to cliff dive, a lagged response will result in higher drawdowns. It could, however, lead to lower transaction costs by papering over short-term mean-reverting moves.

Code and additional charts are on github.

SMA Strategies, Part II

In Part I we saw how a simple tactical strategy that can be implemented by ETfs out-performs an actively managed mutual fund even after transaction costs. However, there are more than a million ways to implement an SMA strategy. Everything from picking the lookback period, cross-overs and enveloping are all open questions. There is no single “best” way to do it. Here, we add a simple check that makes sure that the SMA is trending higher before going long.

Quite simply, for an N-day SMA, we compare Nth-day to N/2th-day. If it is higher, then we go long.

Cumulative returns

NIFTY 50

NIFTY%2050

NIFTY MIDCAP 100

NIFTY%20MIDCAP%20100

NIFTY SMLCAP 100

NIFTY%20SMLCAP%20100

Take-away

The gross returns are lower than the “raw” strategy that we saw in Part I. However, the drawdowns for the 10-day SMA are a lot shallower. Shallower drawdowns allow a bit of leverage to be employed. This could be a good starting point for a NIFTY futures trading strategy.

In Part III, we look at how cross-over strategies perform.

Code and charts are on github.

SMA Strategies using ETFs

A simple moving average of an index is nothing but the average of closing prices of that index over a specified period of time. We did a quick backtest to see how an SMA based toggle between going long an index vs. cash performed.

Cumulative returns

NIFTY 50

NIFTY%2050

NIFTY MIDCAP 100

NIFTY%20MIDCAP%20100

NIFTY SMLCAP 100

NIFTY%20SMLCAP%20100

Feasibility

The backtest, unsurprisingly, shows that shorter the SMA look-back period, better the performance. However, the boost in performance comes at the expense of higher number of trades. Lower look-backs are only viable now thanks to brokerages where you would pay zero for these trades (however, you still pay the securities transaction tax.) To see how this would shake out in the real world, have a look at how our Tactical Midcap 100 Theme has performed in the last ~2 years:

The Theme used the M100 ETF (Motilal Oswal Midcap 100 ETF) with a 10-day SMA toggle to switch between the ETF and LIQUIDBEES. The blue line represents zero brokerage and 0.1% STT and the green line represents a brokerage of 5p and 0.1% STT. The chart shows it beating an actively managed midcap fund across all transaction fee scenarios.

The snag is that this strategy is tough to scale. The M100 ETF just doesn’t trade enough for this strategy to absorb more than Rs. 10 lakhs. And there is no small cap ETF on the horizon to implement the strategy in that space.

The second problem is that M100 trades to a wide premium/discount to NAV (see: ETF Premium/Discount to NAV.) This is another layer of risk that an investor could do without.

However, things seem to be moving in the right direction. Reliance Capital launched a new ETF recently that tracks the NIFTY MIDCAP 150 index. Their ETFs usually trade better – tighter spreads, narrower tracking errors, better liquidity. Hopefully, it will emerge as a stronger alternative to M100 and allow these strategies to scale. We setup the Tactical Midcap 150 Theme that uses the RETFMID150 ETF instead of the M100 ETF for those who are interested.

In Part II, we will see how adding a simple check on the SMA can reduce drawdowns.

Code and charts are on github.

Global Equities Momentum, Part IV

Our GEM backtest in Part III used a 12-month formation period to measure momentum. Here, we look at alternative formation periods with an eye on drawdowns.

6- through 12-month formation periods

GEM.6-12mo.cumulative

Even though the 10-month version has higher returns, the 6-month one has lower peak drawdowns.

The average of all

The problem with picking one formation period out of 6 is that it smells of data-mining. What happens if you average them all out?

GEM.avg.cumulative

The average works in reducing drawdowns compared to the traditional 12-month version.

GEM.avg.dd

GEM.m12.dd

We will setup a virtual portfolio for this “averaging” strategy and post the link here when it is up and running.

Code and more charts on github.