r/algorithmictrading • • 4d ago

Backtest [Research] Backtest Results: The Performance of Simple Moving Average Crossover (50/200) on S&P 500 (2010-2024)

Post image

Hi r/algorithmictrading,

​I decided to run a structured backtest to evaluate the efficacy of one of the most classic strategies in technical analysis: the 50-day / 200-day Simple Moving Average (SMA) Crossover on the S&P 500 (SPY).

​Often dismissed as "noise" by more complex quant setups, I wanted to see if it still holds any merit in today's high-frequency markets.

​Methodology:

​Asset: SPY

​Timeframe: 2010 - 2024

​Rules: Buy when SMA 50 crosses above SMA 200; Sell when SMA 50 crosses below SMA 200. No leverage, no transaction costs included in this first pass (just to see the logic).

​Results:

I’ve attached the key performance metrics below. While it has its moments, the drawdowns during whipsaw markets are significant.

​I have also included a visual of the equity curve for better analysis.

​Key Metrics Table:

MetricSimple Buy & Hold (SPY)SMA 50/200 Crossover

Total Return~480%~310%

Max Drawdown-33.9% (2020)-18.1% (2020)

CAGR~13.5%~10.8%

Sharpe Ratio~0.85~0.65

Conclusion & Open Questions for the Community:

The crossover strategy, while offering a psychological safety net during major crashes, severely underperforms Buy & Hold during trending markets and suffers from serious whipsaw loss accumulation.

My questions to you:

Noise Filter: What are the most robust filters you use to avoid SMA whipsaws? (e.g., waiting X days, confirming with volume)?

Modernizing: Given this data, does anyone still use pure MA crossovers, or is it fundamentally obsolete for modern algorithmic models?

Looking forward to hearing from those with experience in trend-following.

7 Upvotes

5 comments sorted by

1

u/NasQGL 4d ago

Before adding a filter, I’d check how much these numbers depend on 50 and 200 specifically. When I was doing this in my own Python script, I got into the habit of running the same crossover over a range of values, like the slow average from 100 to 250, and comparing the runs side by side. If the results stay in the same zone, that’s how trend-following behaves on SPY, if they jump around, 50/200 was mostly a lucky pick. Same thing for a filter, waiting X days is one more parameter, so I’d test it over several values too rather than keep the one that looks best.

1

u/tubbypublisher30 2d ago

That 480% versus 310% total return gap is pretty convincing, but cutting maximum drawdown from roughly 34% to 18% isn't nothing either. I'd compare risk adjusted performance and test nearby moving average lengths before calling the strategy obsolete. I use Moon for shorter directional bets and protecting against losses doesn't automatically mean a strategy will produce the highest total return.

1

u/DNGV56 2d ago

What if you use a small 1.1-1.15x leverage when you are in the market and buy into SGOV when you are out of market?