Óscar Romero Quincoces

Projects / Master's coursework

Momentum backtest

The 20 strongest S&P 500 stocks, monthly

2026MIAX master's, Instituto BME
Cumulative return of the strategy against SPY
Figure 1. Cumulative return of the strategy against SPY

Summary

Each month it buys the 20 S&P 500 stocks with the strongest 6- and 12-month momentum, from 2015 on, paying 0.23% per trade and handling stocks that get delisted. Its 10.93% a year beat every one of 25 million random portfolios, which averaged 4.54%.

What it does

A monthly momentum strategy adapted from MSCI's method: each month it buys the 20 S&P 500 stocks with the strongest combined 6- and 12-month momentum, from 2015 on, paying 0.23% per trade. A reserve list handles stocks that stop trading, and prices are kept in a wide dates-by-tickers table so the calculations run vectorised.

Results

It returned 10.93% a year and beat every one of 25 million random portfolios, which averaged 4.54%. The write-up ends with a critical look at what that does and doesn't prove.

Figures

Annual return of 25 million random portfolios, with the strategy in red
Figure 2. Annual return of 25 million random portfolios, with the strategy in red
Quarterly returns of the strategy against SPY
Figure 3. Quarterly returns of the strategy against SPY
Eligible universe over time and range of momentum scores
Figure 4. Eligible universe over time and range of momentum scores

Built with

PythonpandasNumPyParquetMonte CarloJupyter