Cross-Sectional Sector Momentum Rotation Strategy

Final Project — FinTech 533 | Duke University

Author

Alex Pina-Nadal

Published

May 2, 2026

Strategy Overview

In this project we have implemented a cross-sectional sector momentum rotation strategy across 11 different sectors that make up the S&P 500. The main idea is that we rank all 11 sectors by their trailing 3-month price return, we go long on the top 3 sectors, and short the bottom 3 sectors. We do this rebalancing every month. 

This hypothesis comes from (Jegadeesh & Titman, 1993), which captures the following market phenomenon: Institutional capital rotates slowly and persistently across economic sectors in response to macro cycle shifts. Sectors that have been winning recently tend to continue winning in the near term because institutional flows are slow to adjust. 

The 11 sectors in this strategy are: Technology (XLK), Financials (XLF), Energy (XLE), Healthcare (XLV), Industrials (XLI), Consumer Staples (XLP), Consumer Discretionary (XLY), Utilities (XLU), Real Estate (XLRE), Materials (XLB), and Communication Services (XLC).

I did a 2 year backtest period starting in September 2024 until April 2026 with a total of 21 monthly rebalances, the rolling window is 3 months as mentioned.


Entry Orders

How We Enter a Position

On the first trading day of each calendar month, the strategy:

  1. Computes the 3-month trailing momentum for all 11 sector ETFs
  2. Ranks all the sectors from strongest (rank 1) to weakest (rank 11)
  3. Goes long on the top 3 ranked sectors at the market open
  4. Goes short on the bottom 3 ranked sectors at the market open

Momentum Signal Formula

\[\text{Momentum}_t = \frac{\text{Close}_{t-1}}{\text{Close}_{t-1-63}} - 1\]

The signal uses yesterday’s close (not today’s), this is in order to ensure no lookahead bias, the ranking is fully formed before the market opens on the rebalance date.

Parameter Justification

  • Lookback = 63 trading days (~3 months): The 3-month momentum window is the most widely validated in academic literature. I also looked into shorter windows like 1 month, but it mainly capture noise,whereas on the other hand longer windows like 12 months lag the economic cycle too much. 63 trading days = 21 trading days/month × 3 months.
  • Top 3 / Bottom 3: With 11 sectors, selecting the top and bottom ~27% gives enough concentration to capture the momentum effect while maintaining minimal diversification across the long and short books.
  • 100 shares per leg: I chose 100 shares per trade, because its what we have done until now, but we could definetly improve the strategy by changing this, it makes it easier to compare between trades.
  • Entry at open: The momentum signal is observable from the prior day’s close. The open is the first tradeable price after the signal is formed, this is just for the no lookahead I have been mentioning.

Exit Orders

How We Exit a Position

Each position leg has two possible exit possibilities:

Exit Description
Rebalance The position is held for the full month, and it is closed at the close of the last trading day of the month
Stop-Loss Position closed early at the daily close on the day the 8% threshold is breached

Stop-Loss Logic

  • Long leg: Exit at close if close < entry_price × (1 - 0.08)
  • Short leg: Exit at close if close > entry_price × (1 + 0.08)

Parameter Justification

  • Stop-loss = 8%: Sector ETFs are broadly diversified instruments, where intra-month moves exceeding 8% are rare under normal market conditions and typically signal a structural shift in that sector rather than noise. A loss of this magnitude indicates the momentum thesis for that leg has broken down and continued holding is not justified.
  • Monthly hold: Cross-sectional momentum is documented to persist over 1–12 month horizons in research and academia. Monthly rebalancing captures the signal while keeping transaction costs reasonable and makes it easy and stable.
  • Exit at close on stop-loss day: Because we use daily (not intraday) data, we conservatively assume the stop-loss fills at the closing price on the breach day. This slightly overstates the loss versus an intraday trigger, which is the correct conservative assumption.

Performance

Portfolio NAV vs SPY

Both series are normalized to $100,000 starting on the first actual trade date (September 3, 2024) for a fair comparison. We can see that we significantly underperfom the S&P, the past 2 years have been very bullish, this causes issues that will mention in the discussion

Monthly Returns — Strategy vs SPY

Drawdown

Rolling 6-Month Sharpe Ratio


Performance Summary

Metric Strategy SPY (Buy & Hold)
Total Return 0.89% 42.69%
Annual GMRR 0.45% 19.62%
Annual Volatility 4.57% 16.69%
Sharpe Ratio (rf=3.75%) -0.72 0.95
Max Drawdown ~6.64% ~19.00%

Trade Statistics

Metric Value
Total legs traded 126
Rebalance exits 113 (89.7%)
Stop-loss exits 13 (10.3%)
Overall win rate 49.2%
Long leg win rate 58.7%
Short leg win rate 39.7%
Avg return per leg -0.054%
Expected P&L per leg $7.07
Avg holding period 25.4 days

Blotter & Ledger

The complete trade log and daily NAV record are available for download below.

⬇ Download Blotter (CSV)   ⬇ Download Ledger (CSV)


Sector Analysis

Sector Rotation Heatmap

Each row is a rebalance month. Color shows 3-month momentum score (green = strong, red = weak). ▲ = long position, ▼ = short position.

Monthly Sector Exposure

Average Return by Sector


Long vs Short Decomposition

Trade Return Distribution

Momentum Spread

Alpha / Beta Analysis


Strategy Monitoring

How will we know the strategy is performing in line with expectations?

We monitor two real-time metrics at each monthly rebalance to determine if we should stop at any given moment:

1. Rolling 6-Month Sharpe Ratio : if it drops below 0.5 for three consecutive months, the strategy is underperforming its historical risk-adjusted baseline and requires us to give it a full review to understand what is going on. Maybe this change is caused by a macro regime change, but it might mean we have to adjust the strategy.

2. Momentum Spread (avg momentum of top-3 minus avg momentum of bottom-3), if this spread compresses below 2% for three consecutive months, sectors are moving together and the cross-sectional rotation signal has effectively disappeared. We might have to reduce trading size if this happens

How will we know when the strategy stops working?

We declare the strategy non-functional and we stop trading if any one of these 2 triggers happen:

  1. Momentum reversal: The long portfolio underperforms the short portfolio for 4 consecutive months, this would mean the momentum effect has fully reversed and our hypothesis doesn’t hold anymore.

  2. Win rate collapse: If the leg win rate drops below 40% for 3 consecutive months, if fewer than 2 of 6 legs are profitable per month, this would mean the ranking signal is no longer predictive.


Commentary

Did the strategy work?

Okay so clearly the strategy didn’t work as well as expected, we only got a 0.45% annual GMRR, vs the SPY got 19.62%. So this is a clear underperformance, but when we look at it deeper, we can see that the long book did work, it had a win rate of 58.7%, this means that the strategy is correctly identifying the winners. The signal was present all along, with cross sectional dispersion between sectors consistlently large (8-27% every month).

On the other hand, the short book did not work, thats why the overall strategy failed, the short book had a 39.7% win rate. The long book generated around $4800 in cumulative PnL, wheeras the short book lost roughly -$4000. This erased all of our returns

Why did the short book fail?

So looking a bit deeper as to why the short book failed I believe the following: from 2024 to 2026, we had a very bullish market, since cross sectional momentum is a relative signal, its telling you how the outperfom each other (the ranking). If the market is very bullish, even the bottom 3 might still go up. Shorting these bottom 3 was unprofitable, because the ones with the weakest momentum aren’t necessary equal to negative return in a bull market.

For example, if it had been a bear market we would have had the same issue with the top 3 of the ranking. So i believe that this strategy works better during more volatile market, where there is clear winners and losers. ### The April 2025 event

For example, in April 2025, when Trump announced the Tariffs, all 11 sectors dropped simultaneously and the cross sector correlation spiked towards 1. The long book got hit hard the short book did not compensate. It just shows once again that the strategy is market neutral.

How would we improve the model?

1. Market regime filter: In order to improve the main flaw of this strategy we can do the following: When the SPY is above its 200 day moving average (bull market), the strategy would go long only on the top 3 sectors, and not short on any. Whereas if its below the 200 day moving average, we would run the strategy asn normal, long top 3, short bottom 3. This is where the cross sectional momentum would be the most powerful, we wouldn’t be abadoning the strategy.

2. Inverse-volatility position sizing: Instead of 100 shares per leg, allocate capital so each leg contributes equal risk. High-volatility sectors like Energy currently receive the same share count as low-volatility sectors like Consumer Staples, creating an implicit risk concentration.

4. Transaction cost modeling: Maybe we could aslo add a realistic cost per share (e.g., $0.005) to each leg to assess whether the strategy survives after execution costs.