SpreadAtlas

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

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.

Setting1m3m5m10m15m30m1h4h
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.

Setting1m3m5m10m15m30m1h4h
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

BarsCombinations that tradedPassedBest that passedReturn a yearWorst fallSecond period
3-minute5790None passed. Best overall: −8.9% a year
5-minute5790None passed. Best overall: +2.0% a year
10-minute5790None passed. Best overall: +7.3% a year
15-minute5790None passed. Best overall: +33.1% a year
30-minute57949SMA 50 / 200 cross + RSI(14) above 50 + Bitcoin daily above EMA 100+33.1%−22.5%+30.9%
1-hour57939EMA 10 / 200 cross + volume above its 20-bar average + Bitcoin daily above EMA 100+34.9%−22.1%+32.7%

What we learned

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

Related research