A moving average is the least controversial tool in technical analysis, because it makes no prediction. It is an average of the last N closes, redrawn each day. That is the whole of it.
The controversy starts when people trade the cross. So we ran it, and then we ran it again with faster averages, because the gap between those two runs is the actual lesson.
The golden cross did respectably. The fast cross did not.
Across 22 US stocks and sector ETFs, over the window the free backtester covers:
| Golden cross 50/200 | Fast cross 20/50 | Buy and hold | |
|---|---|---|---|
| Trades | 63 | 299 | n/a |
| Win rate | 60.3% | 44.1% | n/a |
| Median hold | 201 bars | 37 bars | n/a |
| Time invested | 61.6% | 56.2% | 100% |
| Median return | +37.0% | +6.0% | +57.3% |
| Median worst drawdown | -21.5% | -26.6% | -33.8% |
| Beat buy and hold | 7 of 22 | 1 of 22 | n/a |
Same idea, same names, same window, same fees. One number changed, and the return fell by six times.
That is the finding, and it is not the one most people expect from a backtest of a famous indicator. The golden cross was not a disaster. It captured roughly two thirds of the market's return while spending 38% of the period in cash, and it did so with a third less drawdown. Seven of 22 names beat holding outright.
Speeding the averages up did not make it more responsive. It made it trade five times as often, win 16 points less of the time, and hand back almost all of the return to whipsaws.
Why the fast version fails, and where the 200 does its work
A cross fires whenever the two averages meet. In a range they meet constantly, and every one of those meetings is noise that costs a spread and a commission. The slower the pair, the fewer meetings, and the more of them are real regime changes rather than a quiet week.
The 200-day is doing something specific here: at 201 bars, the median golden-cross trade lasts about ten months. It is not a trade, it is a regime call. The 20/50's median hold of 37 bars is under two months, which is short enough to be inside the noise it is trying to filter.
This is why "optimise the lengths" is bad advice in the direction people usually take it. The parameter is not a dial to be tuned for a better backtest; it is a choice about what timescale you are claiming to see. Faster is not sharper.
A note on the win rate, because it will mislead you
The golden cross won 60.3% of its 63 trades. That looks strong and it is the wrong yardstick, in both directions.
A cross exits on a signal rather than a clock, so it cuts losers when the average turns and holds winners while it does not. And its trades are long: over 201 bars in this window, a randomly timed hold of the same length finished green 71.7% of the time, because a rising market makes almost any ten-month hold profitable. Against that, 60.3% is not impressive at all.
So neither number settles anything on its own. Judge a signal-exit system on return, drawdown and exposure, which is what the table above reports. Save the win-rate-against-a-matching-null comparison for fixed-length rules, like the one in our stochastic oscillator test, where every trade is the same length by construction and the comparison is like for like.
What a moving average is
- Simple (SMA). The plain average of the last N closes. Every bar counts the same.
- Exponential (EMA). Weighted toward recent closes, so it turns sooner and whipsaws more.
The length is the whole personality. A 20-day average tracks price closely and changes direction often. A 200-day barely moves, which is why it works as a regime line rather than a trigger.
Two properties explain most disappointments:
- A moving average lags by construction. It is an average of the past. It cannot turn before price does, so it confirms a move rather than predicting one. That is not a flaw to be tuned away; it is arithmetic. The golden cross's returns came despite arriving late, not by avoiding it.
- It has no opinion in a range. When price oscillates around a flat average, the cross fires repeatedly and every signal is noise. That is the 20/50 column.
The common beginner errors
- Treating a cross as a forecast. It describes what already happened to the average. By the time the 50 crosses the 200, the move is typically months old.
- Optimising the lengths on one window. Any stretch of history has a best pair, and it is rarely the next stretch's best pair. Our two rows are not a search for the best numbers, they are the two everyone already uses.
- Assuming faster is better. It is the single change we made, and it cost six times the return.
- Reading a golden cross as a headline event. It is widely reported, which is why the surprise is unlikely to be tradeable on the day.
Where averages earn their place
- As a trend filter. "Only buy when price is above the 200-day" is a condition on other signals rather than a signal. The pullback strategy uses it exactly this way.
- As a level to trade against. A pullback buys a dip back to a rising average. The average supplies the location; something else supplies the entry.
- As a regime line. Given a median hold of ten months, that is the honest description of what the golden cross is: a slow statement about which side of the market you should be on.
Test it yourself
Open the golden cross preset, which starts on 50/200, pick a ticker, and run it. The free backtester has the same strategy under SMA cross if you want to set the lengths yourself.
The experiment that produced this page is one field: change 50/200 to 20/50 and watch what happens to the trade count before you look at the return. Compare against the buy-and-hold curve the tool draws beside yours and the drawdown figure underneath it, never against zero.
Frequently asked questions
Does the golden cross work? Better than its reputation among backtesters. On 22 US names it made 63 trades, returned a median 37.0% against 57.3% for holding, and did it with a -21.5% worst drawdown against -33.8%. Seven of the 22 beat holding outright. It trails the index and takes noticeably less pain to get there.
Is a faster moving average cross better? The opposite, on our test. Changing 50/200 to 20/50 took the median return from +37.0% to +6.0% and the win rate from 60.3% to 44.1%, because five times as many crosses means five times as many whipsaws in a range.
Which moving average is best for beginners? The 200-day, used as context rather than a trigger. It answers "is this stock in an uptrend" at a glance, which is the question an average can actually answer.
SMA or EMA? The EMA turns sooner, which helps in a trend and hurts in a range. Our runs used simple averages, so switching changes the timing of every signal and is worth testing on your own tickers rather than adopting on reputation.
What is the difference between a golden cross and a death cross? Direction. A golden cross is the 50-day crossing above the 200-day; a death cross is the reverse. Both describe the averages, not what price does next.
Before you use this
The figures come from one run over 22 large-cap US stocks and sector ETFs, in a window that was mostly a bull market, with the golden cross invested about 62% of the time and the fast cross about 56%. Returns include commission and slippage. The script that produced them is in the repository (backend/scripts/research/candle_study.py); the exact runs are --preset 'sma_cross:{"fast":50,"slow":200}' and the same with 20/50, so they can be repeated rather than trusted. The tool will show you today's numbers on any ticker you choose, and they will not match these exactly. Past prices are not a forecast, and nothing here is investment advice.