Moving-average crossovers on crypto: what survived the fees
Every one of the 26 crossover settings made money on 4-hour bars after costs, with a median of +36.9% a year. On bars of 10 minutes or less, none did: crossovers trade too often for the size of the moves they catch.
How it works
A moving average is the average closing price of the last n bars. The simple version (SMA) weights every bar equally; the exponential version (EMA) gives recent bars more weight, so it turns sooner. A crossover rule holds the coin while a fast average, say 20 bars, is above a slow one, say 50 bars. When the 50-day line crosses above the 200-day line on a daily chart, traders call it a golden cross.
A simpler rule holds the coin whenever the price itself closes above one average. Both are trend-following: they buy after a rise has started and sell after a fall has started, so they give up the first and last part of every move.
What we tested
- Crossover: SMA or EMA; fast average 5, 10, 20 or 50 bars; slow average 20, 50, 100 or 200 bars, the fast one always shorter: 26 settings. Buy when the fast average crosses above the slow one; sell when it crosses back below.
- Price above an average: SMA or EMA of 10, 20, 50, 100 or 200 bars: 10 settings. Hold while the close is above the average.
Every setting was run on eight bar lengths, from 1 minute to 4 hours, on Upbit's Korean-won market: 12 large coins from January 2024 to October 2026 (from January 2025 on 5- and 10-minute bars; 8 coins from April 2026 on 1- and 3-minute bars). Signals are taken at a bar's close and filled at the next bar's open, spot buying only, with equal money in each coin. Every trade pays Upbit's 0.05% fee plus one price tick of slippage. That makes 36 single-indicator settings, and 3,474 more combinations where the best of them were given a filter or an exit rule. Full method.
Results by setting and bar length
Each cell is the yearly return after costs over the whole period. An outlined cell passed the two-period test: at least +10% a year in both the first and the second period, with the second keeping at least half of the first.
Return per year after costs, %
Sea level (0) is break-even after costs: blue is under water, green to brown is land.
Moving-average crossover
Settings above water after costs: 26 of 26 on 4-hour bars, 18 of 26 on 1-hour bars, 10 of 26 on 30-minute bars, 2 of 26 on 15-minute bars, and none on 10-minute bars or shorter. Passed the two-period test: 1 on 4-hour bars.
| Setting | 1m | 3m | 5m | 10m | 15m | 30m | 1h | 4h |
|---|---|---|---|---|---|---|---|---|
| SMA 5 / 20 cross | −100.0 | −100.0 | −100.0 | −100.0 | −99.3 | −88.4 | −52.6 | +29.1 |
| SMA 5 / 50 cross | −100.0 | −100.0 | −100.0 | −99.5 | −93.0 | −62.3 | −18.9 | +37.6 |
| SMA 5 / 100 cross | −100.0 | −100.0 | −100.0 | −96.7 | −79.8 | −37.6 | +6.2 | +43.6 |
| SMA 5 / 200 cross | −100.0 | −100.0 | −99.4 | −90.2 | −58.0 | −7.9 | +26.9 | +46.6 |
| SMA 10 / 20 cross | −100.0 | −100.0 | −100.0 | −100.0 | −98.2 | −83.3 | −36.8 | +35.2 |
| SMA 10 / 50 cross | −100.0 | −100.0 | −100.0 | −97.6 | −83.1 | −39.3 | +8.6 | +34.9 |
| SMA 10 / 100 cross | −100.0 | −100.0 | −99.4 | −89.3 | −59.5 | −11.3 | +21.6 | +36.3 |
| SMA 10 / 200 cross | −100.0 | −100.0 | −96.0 | −77.2 | −33.1 | +9.7 | +31.0 | +43.0 |
| SMA 20 / 50 cross | −100.0 | −100.0 | −99.8 | −93.9 | −75.5 | −20.7 | +5.3 | +24.0 |
| SMA 20 / 100 cross | −100.0 | −100.0 | −97.3 | −77.4 | −37.9 | +8.0 | +29.8 | +38.2 |
| SMA 20 / 200 cross | −100.0 | −99.7 | −88.1 | −60.4 | −10.9 | +25.2 | +32.7 | +34.1 |
| SMA 50 / 100 cross | −100.0 | −99.8 | −92.5 | −63.3 | −9.6 | +3.8 | +28.4 | +24.2 |
| SMA 50 / 200 cross | −100.0 | −96.8 | −71.0 | −39.5 | +13.1 | +36.5 | +29.8 | +26.5 |
| EMA 5 / 20 cross | −100.0 | −100.0 | −100.0 | −100.0 | −99.7 | −90.6 | −59.0 | +35.0 |
| EMA 5 / 50 cross | −100.0 | −100.0 | −100.0 | −99.9 | −96.7 | −72.6 | −24.2 | +42.5 |
| EMA 5 / 100 cross | −100.0 | −100.0 | −100.0 | −98.9 | −88.6 | −48.3 | −3.5 | +46.2 |
| EMA 5 / 200 cross | −100.0 | −100.0 | −99.9 | −94.8 | −71.8 | −23.4 | +14.1 | +48.4 |
| EMA 10 / 20 cross | −100.0 | −100.0 | −100.0 | −99.9 | −97.6 | −77.7 | −34.7 | +41.6 |
| EMA 10 / 50 cross | −100.0 | −100.0 | −100.0 | −98.7 | −88.4 | −50.8 | −4.4 | +37.4 |
| EMA 10 / 100 cross | −100.0 | −100.0 | −99.9 | −94.3 | −72.8 | −24.5 | +15.4 | +43.9 |
| EMA 10 / 200 cross | −100.0 | −100.0 | −98.9 | −84.8 | −48.0 | +2.3 | +28.5 | +42.9 |
| EMA 20 / 50 cross | −100.0 | −100.0 | −99.8 | −93.2 | −71.7 | −23.9 | +13.4 | +34.8 |
| EMA 20 / 100 cross | −100.0 | −100.0 | −98.6 | −83.9 | −48.8 | +0.5 | +28.5 | +37.4 |
| EMA 20 / 200 cross | −100.0 | −100.0 | −93.4 | −70.4 | −20.9 | +26.3 | +35.6 | +36.3 |
| EMA 50 / 100 cross | −100.0 | −99.8 | −89.3 | −57.3 | −12.1 | +20.8 | +33.5 | +29.3 |
| EMA 50 / 200 cross | −100.0 | −98.4 | −76.4 | −48.6 | +10.8 | +36.1 | +29.2 | +29.4 |
Price above a moving average
Settings above water after costs: 6 of 10 on 4-hour bars, and none on 1-hour bars or shorter. None passed the two-period test.
| Setting | 1m | 3m | 5m | 10m | 15m | 30m | 1h | 4h |
|---|---|---|---|---|---|---|---|---|
| Close above SMA 10 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −99.9 | −96.9 | −25.2 |
| Close above SMA 20 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −99.5 | −89.4 | −6.4 |
| Close above SMA 50 | −100.0 | −100.0 | −100.0 | −100.0 | −99.9 | −95.4 | −66.1 | +25.5 |
| Close above SMA 100 | −100.0 | −100.0 | −100.0 | −100.0 | −99.3 | −85.6 | −44.1 | +38.7 |
| Close above SMA 200 | −100.0 | −100.0 | −100.0 | −99.9 | −95.9 | −67.3 | −22.8 | +44.5 |
| Close above EMA 10 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −97.5 | −33.3 |
| Close above EMA 20 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −99.7 | −91.9 | −8.8 |
| Close above EMA 50 | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −96.9 | −73.9 | +23.6 |
| Close above EMA 100 | −100.0 | −100.0 | −100.0 | −100.0 | −99.6 | −89.6 | −51.6 | +37.4 |
| Close above EMA 200 | −100.0 | −100.0 | −100.0 | −100.0 | −97.5 | −74.1 | −30.4 | +45.5 |
Adding filters and exit rules
On each bar length, the settings with the best first-period results were combined with up to two filters (trend on a longer chart, ADX, volume, RSI range, Bitcoin's trend) or one filter and an exit rule (stop-loss, trailing stop, take-profit, time limit). Combinations were only built where this indicator ranked among the leaders in the first period.
Moving-average crossover
| Bars | Combinations that traded | Passed | Best that passed | Return a year | Worst fall | Second period |
|---|---|---|---|---|---|---|
| 3-minute | 579 | 0 | None passed. Best overall: −8.9% a year | |||
| 5-minute | 579 | 0 | None passed. Best overall: +2.0% a year | |||
| 10-minute | 579 | 0 | None passed. Best overall: +7.3% a year | |||
| 15-minute | 579 | 0 | None passed. Best overall: +33.1% a year | |||
| 30-minute | 579 | 49 | SMA 50 / 200 cross + RSI(14) above 50 + Bitcoin daily above EMA 100 | +33.1% | −22.5% | +30.9% |
| 1-hour | 579 | 39 | EMA 10 / 200 cross + volume above its 20-bar average + Bitcoin daily above EMA 100 | +34.9% | −22.1% | +32.7% |
What we learned
- The bar length mattered more than the pair of averages. On 4-hour bars every crossover made money; on 1-hour bars the pairs with a 5-bar fast average lost a median −11.2% a year, while 20- and 50-bar fast averages made +29.1% and +29.5%.
- Simple against exponential averages made little difference on 4-hour bars: medians of +35.2% and +37.4% a year.
- Only one crossover passed the two-period test on its own: SMA 20/50 on 4-hour bars, +24.0% a year. The best crossover overall, EMA 5/200 (+48.4%), made +74.6% a year in the first period and +22.7% in the second, less than half.
- Price-above-average rules switch in and out constantly. On 1-hour bars all ten lost money; on 4-hour bars only the 50-, 100- and 200-bar versions made money (close above EMA 200: +45.5% a year).
- Filters rescued the shorter bars: on 30-minute bars 49 combinations passed, the best being SMA 50 / 200 cross + RSI(14) above 50 + Bitcoin daily above EMA 100: +33.1% a year, worst fall −22.5%.
- In our separate daily-chart test on 22 coins, the classic 50/200 golden cross lost 13.4% over two years with only 32 trades, while SMA 10/50 made +43.3%. The 34-rule test.
Questions
Does the golden cross work for crypto?
On daily charts, rarely enough to matter: in our separate test on 22 coins the 50/200 cross traded 32 times in two years and lost 13.4%. On 4-hour bars the same SMA 50/200 pair made +26.5% a year after costs in this study, but so did almost every other pair; the signal is a slow trend filter, not a timing tool.
Which moving average works best for crypto?
No single pair stood out. On 4-hour bars every crossover made between +24.0% and +48.4% a year, and simple and exponential averages were close. The choice that mattered was the bar length: the same pairs lost money on bars of 10 minutes or less.
Why do moving-average crossovers lose on short timeframes?
Because they flip on every small wiggle and each flip costs a fee and a tick. SMA 5/20 on 1-minute bars made 82,919 trades across 8 coins in six months and lost everything.
Every setup with this indicator in the explorer: 4h 1h 30m 15m