Golden Cross Trading Strategy: 20-Year Backtest on the S&P 500
The golden cross is one of the most recognized signals in technical analysis. When the 50-day moving average crosses above the 200-day moving average, traders take notice. But does it actually work? We backtested the golden cross on the S&P 500 over 20 years of market data to find out.
What Is a Golden Cross?
A golden cross occurs when a shorter-term moving average crosses above a longer-term moving average. The standard version uses the 50-day simple moving average (SMA) and the 200-day SMA. Traders interpret this crossover as a shift from bearish to bullish momentum.
The golden cross has three stages. First, the shorter moving average sits below the longer one while selling pressure dominates. Second, the 50-day SMA crosses above the 200-day SMA. Third, both averages trend upward as buyers take control.
What Is a Death Cross?
The death cross is the inverse pattern. The 50-day SMA crosses below the 200-day SMA, signaling that short-term momentum has turned negative relative to the long-term trend. Headlines tend to amplify death cross events, but the actual predictive value is more nuanced than the name suggests.
Not every death cross leads to a market crash. Some produce brief pullbacks before the broader uptrend resumes. The 2020 death cross that occurred during the initial COVID sell-off preceded one of the fastest recoveries in market history.
Golden Cross vs. Death Cross
The golden cross is a bullish signal that occurs when the 50-day SMA crosses above the 200-day SMA, while the death cross is a bearish signal triggered when the 50-day crosses below the 200-day. Both signals are lagging indicators that confirm trend changes already underway.
| Factor | Golden Cross | Death Cross |
|---|---|---|
| Signal | 50 SMA crosses above 200 SMA | 50 SMA crosses below 200 SMA |
| Interpretation | Bullish momentum shift | Bearish momentum shift |
| Typical action | Enter long or add to positions | Reduce exposure or hedge |
| Confirmation | Rising volume on crossover | Rising volume on crossover |
| Main weakness | Lag: signal fires after the move starts | Lag: sell-off often priced in already |
20-Year Backtest Results: S&P 500
We tested a simple golden cross and death cross strategy on the S&P 500 from 2003 through 2023. The rules were straightforward: buy when the 50-day SMA crosses above the 200-day SMA, sell when it crosses below. No additional filters, no discretionary overrides.
The results reveal both the strengths and the limitations of this approach. The golden cross captured most major bull runs, including the recoveries after 2009 and 2020. However, it also produced whipsaw signals during sideways markets, where the averages crossed back and forth repeatedly.
The golden cross works best in strongly trending environments. When the market chops sideways inside a range, both the golden cross and death cross generate false signals. Traders who combine the crossover with a trend filter or volatility measure tend to reduce the whipsaw problem.
What the Backtest Shows
Watch the full video above for the complete year-by-year breakdown. The data covers every golden cross and death cross on the S&P 500 across two decades, including how the strategy handled the 2008 financial crisis, the 2020 pandemic crash, and the 2022 bear market.
How to Build a Golden Cross Scanner in ThinkOrSwim
You can scan for golden cross signals across your entire watchlist using ThinkOrSwim's Stock Hacker. This ThinkScript code identifies stocks where the 50-day SMA just crossed above the 200-day SMA within the last 3 bars.
# Golden Cross Scanner for ThinkOrSwim
# Scans for 50 SMA crossing above 200 SMA
input shortLength = 50;
input longLength = 200;
input lookback = 3;
def shortSMA = Average(close, shortLength);
def longSMA = Average(close, longLength);
plot signal = shortSMA crosses above longSMA
within lookback bars;
To use this in ThinkOrSwim: open the Scan tab, go to Stock Hacker, add a custom filter, and paste the code above. Adjust the lookback period to widen or narrow your results. A value of 1 catches crossovers from the current bar only.
Golden Cross Alert Script
This version adds real-time alerts so you get notified the moment a golden cross or death cross occurs on any chart.
# Golden Cross / Death Cross Alert
# Add to any chart for real-time signals
input shortLength = 50;
input longLength = 200;
def shortSMA = Average(close, shortLength);
def longSMA = Average(close, longLength);
def goldenCross = shortSMA crosses above longSMA;
def deathCross = shortSMA crosses below longSMA;
AddLabel(goldenCross, "GOLDEN CROSS", Color.GREEN);
AddLabel(deathCross, "DEATH CROSS", Color.RED);
Alert(goldenCross, "Golden Cross", Alert.BAR, Sound.Ding);
Alert(deathCross, "Death Cross", Alert.BAR, Sound.Ring);
When the Golden Cross Works (and When It Fails)
Strong Performance
The golden cross tends to perform well after extended bear markets. When the broader trend reverses from down to up, the crossover catches the early stages of the new bull market. The signal after the March 2009 bottom and the April 2020 bottom both preceded sustained rallies.
Trending sectors also produce reliable golden cross signals. If a sector is rotating into favor based on macro conditions, the crossover on individual stocks within that sector can confirm the move.
Poor Performance
Range-bound markets generate the most false signals. When price oscillates around the 200-day average without committing to a direction, the 50-day and 200-day averages weave around each other. Each cross triggers a trade, and each reversal triggers a stop. The result is a series of small losses that compound.
The golden cross also struggles during sharp V-shaped reversals. By the time the 50-day crosses above the 200-day, the recovery move may already be 15-20% off the bottom. Traders who wait for the golden cross confirmation enter well above the low.
Combining the Golden Cross with Other Indicators
The golden cross produces more reliable results when combined with volume confirmation, volatility filters, or moving average slope requirements. Using the crossover as one input among several reduces false signals in choppy markets.
Volume confirmation. Require volume on the crossover bar to exceed its 50-day average. This filters out weak crossovers that occur during low-participation trading days.
Squeeze filter. Use the Multi-Timeframe Squeeze to confirm that volatility is contracting before the cross. A golden cross that coincides with a squeeze release on the weekly timeframe carries more weight than one firing in isolation.
Moving average slope. Only take golden cross signals where the 200-day SMA is rising or flat. If the 200-day is still declining at the crossover point, the long-term trend has not turned yet. Our Moving Average Crossover Backtester lets you test different slope requirements on historical data.
Tools for Golden Cross Analysis
TOS Indicators provides free backtesting and scanning tools for golden cross strategies. The Moving Average Crossover Backtester tests any combination of moving average lengths on historical data for any ticker.
- Moving Average Crossover Backtester — Test golden cross strategies on any ticker
- Stacked Moving Averages Indicator — Visualize multiple MAs on one chart
- Multi-Timeframe Squeeze — Combine with golden cross for confirmation
- MACD Explained — Compare MACD crossovers with golden cross signals
Ready to Trade With an Edge?
Join 40,000+ traders using institutional-grade tools for ThinkOrSwim.
Get the Bundle