Tag: momentum

Factor MAX

The paper Factor MAX and Predictable Factor Returns from Liyao Wang and Ming Zeng presents a twist on momentum investing that goes long the factor that had the largest single-day return in the previous month. It is distinct from factor momentum goes long the factor that had the largest return over a specific formation period.

We have been running factor and model momentum for a while now with mixed results so we decided to have a look at this new strategy in the Indian long-only context.

tl;dr: not so hot!

We selected the NIFTY500 factor indices: LOW VOLATILITY 50 TR, MOMENTUM 50 TR, QUALITY 50 TR and VALUE 50 TR to compare Factor MAX vs. Factor Momentum. Factor Momentum out-performed Factor MAX.

The problem with using a single day’s performance to select a factor is that more volatile factors get picked more often. Here’s a plot of the monthly active factor between the two strategies.

Quality and Low-volatility factors do not jump around every day. Hence, their low representation in Factor MAX. You could use volatility adjusted returns to paper over this. However, we felt that went against the main thrust of the paper that investors systematically under-react to factor-level news embedded in these extreme returns, creating exploitable return predictability.

We ran the same backtest over a subset of our momentum and value models. Factor Momentum bested Factor MAX here as well.

If you want to DIY Factor Momentum based on this backtest, you can do so with cheap index funds:

  • Nippon India Nifty 500 Quality 50
  • Nippon India Nifty 500 Low Volatility 50
  • Nippon India Nifty 500 Momentum 50
  • Axis Nifty500 Value 50

Code and charts on github.

Sector Momentum

Previously, we had looked at using the momentum of S&P 500 Sector SPDRs for potential rotation strategies. How would the Indian story unfold?

We take 16 sector indices, use a 6-month look-back window and go long the sector with the highest returns, holding it for a month.

You end up with higher returns but lower Sharpe – makes sense given the super-concentrated nature of the portfolio.

The 4 points of out-performance (after costs, pre-tax) over the NIFTY 100 index is not much to write home about. Besides, this strategy trailed the benchmark pre-2020. If this were pitched back then, nobody would’ve deployed it and nobody would’ve been around for the post-2020 out-performance. On a positive note, the availability of index funds and ETFs should make this strategy fairly easy to implement.

The main caveat is that the index construction rules themselves are subject to change. Mid last year, SEBI capped the maximum concentration of a single stock for a sector index at 35% and required them to have at least 10 stocks.

Code and charts are on github.

Here are some other things we tried, so that you don’t have to:

Equal-weight all Sector Indices

Inverse-volatility weight all Sector Indices

Equal-weight Sectors in an Up Trend

Inverse-volatility weight Sectors in an Up Trend

The excess returns of these alternatives do not justify the costs.

Momentum Skip Month (II)

Our earlier post on using a “skip” month for setting up momentum portfolios saw a slight advantage in skipping a month. However, it very will could have been because of path dependence.

Going back to a 20-stock portfolio and separating out the monthly returns of stocks only in the “no-skip” portfolio (RET_NOSKIP) and those that are only in the one-month skipped portfolio (RET_SKIP) doesn’t really settle the debate in favor of skipping a month.

The summary stats are similar as well.

Perhaps the mean reversion that was observed prior to the early 90’s when the original paper was published is weaker now?

Code on github.

Intra-Stock Correlation and Momentum Returns

Vojtko, Radovan and Pauchlyová, Margaréta, How to Improve Commodity Momentum Using Intra-Market Correlation (SSRN) discusses using short-term and long-term correlations between constituents to bet on momentum and reversal.

Since we are always on the lookout for strategies for reducing momentum drawdowns, we did a quick check to find out if a similar strategy can be used for long-only momentum.

The rule is fairly basic. Using the momentum portfolio already formed, if 20-day average correlation between them is greater than 200-day average correlation, then go long, else, go to cash.

Ignoring transaction costs, it looked like it avoided the brutal 2018-2019 drawdown. So, we dived a bit deeper to see if it was materially better than our 50-day SMA idea.

Here, COR_RET represents using only correlations to go long/cash, SMA_RET represents using only SMA, EITHER_RET is correlation or SMA and COMBINED_RET is correlations and SMA.

Going long if either correlations or SMA (EITHER_RET) seemed to be a winning strategy. However, high transaction costs in India can turn any decent strategy into a loser in a heartbeat.

25bps in transaction costs negates most of the advantages of considering the correlation signal. However, the post-COVID data does point towards EITHER_RET outperforming SMA_RET.

The biggest disappointment for us was that there was no improvement in drawdown metrics but 5% of outperformance might be worth the additional complexity.

Code and charts are on github.

SVM for Momentum

Previously, we explored if Meta’s Prophet library could be used to drive a momentum portfolio (Prophet for Momentum, Prophet for Momentum, Part II). We found that a simple (naïve) momentum strategy outperformed whatever we did with Prophet.

More generally, using a Neural Network or an SVM to drive portfolios have been a disappointment in live scenarios (Machine Learning Themes). Their after cost performance trail benchmarks.

Moreover, a big problem with these models is that there are a million different ways to specify them and a few of them will go on to outperform in a forward-test simply because they load on a factor that is working for that moment in time. So, you never know if you found the “right” set of specs (because there is none) and if you are not careful, you will forever be tuning the model based on what worked in the recent past.

Even simple SVMs come with so many different ways to specify them: classification vs. regression, polynomial degree, cost (static vs. auto-tune), feature selection, feature tuning, etc. And, since we don’t know which ones work beforehand, we try most of them and settle on those specs that output the results we wanted.

For example, an SVM can be trained with a time-series of previous month’s returns to predict the next month’s returns. A momentum portfolio can be created by ranking these predictions. Rebalance every month and you have something that works.

The problem is that to arrive at this model, we went through a fair amount of parameter and feature tweaking/tuning which may or may not work in the future.

Here, we published the charts of an SVM that uses a 5th degree polynomial kernel because it worked (higher Sharpe!) and not because there is a strong theoretical reason why 5 is better than 1.

For every model that is published, be rest assured that there are thousands hidden away in a drawer.

This is why we remain skeptical of “A.I.” investment strategies.

Code and charts on github.