// research

MACD and Bollinger Bands on crypto: a backtest

Rarely better than holding. On 10 large coins in 2020–2026 the MACD(12,26,9) signal-line cross made money in 14 of 20 runs but beat buy and hold in 3; Bollinger(20,2) mean reversion made money in 4 of 20 and beat holding in 1. Against random entries with the same holding time MACD came out ahead in 16 of 20 runs, Bollinger in 5.

9 min read

Two of the most quoted chart signals, tested exactly as the textbooks write them, on the same ten coins, two timeframes and costs as the RSI 30/70 test. The short answer: MACD on daily candles made money on 9 of 10 coins — but in a period when holding the coin did better on 7 of them — and lost most of what it caught to fees on 4-hour candles. Bollinger mean reversion won about two trades of three and still lost money in 16 of 20 runs. Against random entry dates, the two rules split: MACD's timing looked better than chance, Bollinger's worse.

Setup

  • MACD rule: MACD(12, 26, 9) on the run's timeframe. Buy when the MACD line crosses above the signal line, sell when it crosses back below. Long only, no stop.
  • Bollinger rule: Bollinger Bands (20, 2) on closes. Buy when the close crosses back above the lower band (it was at or below the band on the previous candle and is above it now). Sell when the close reaches the middle band — the 20-period average — or goes above it. Long only, no stop, no time limit.
  • Coins: BTC, ETH, BNB, XRP, ADA, DOGE, LTC, LINK, BCH and TRX — ten large coins with Binance spot history on the platform from the start of 2020.
  • Market and period: Binance spot, 4h and 1d candles, 2020-01-01 → 2026-10-01. 20 coin × timeframe runs per rule, 40 in all.
  • Costs and fills: 95% of equity per trade, 0.1% fee and 0.05% slippage on each side, orders filled at the next candle's open after the signal, 10,000 USDT per run.
  • Two baselines: buy and hold of the same coin over the same run, as the platform reports it; and a random-entry baseline computed from candles — 2,000 simulated runs per cell with the same number of trades and the same average holding time as the rule, entered at random dates, with the same size and costs.

Nothing was tuned: one set of textbook parameters per rule. What the numbers on the cards mean is in backtest metrics explained.

The scorecard

MACD 1dMACD 4hBollinger 1dBollinger 4h
Runs in profit9 / 105 / 104 / 100 / 10
Runs ahead of buy and hold3 / 100 / 101 / 100 / 10
Runs ahead of the random median8 / 108 / 103 / 102 / 10
Median return+468.32%-0.56%-2.19%-62.71%
Median win rate36.3%34.1%70.1%65.0%
Median time in the market51.9%51.1%21.6%22.9%

MACD: a trend follower that pays for every wiggle

MACD is a trend rule in disguise: it is long roughly half the time, wins only about one trade in three, and lives off the few trades that ride a long move. On daily candles in 2020–2026 there were enough of those for 9 of 10 coins to end in profit — the median daily run made +468.32%.

Backtest

MACD 12/26/9 signal-line cross — article study

BTCUSDT · 1d · Spot · 2020-01-01 → 2026-10-01

Return
+597.61%
Max drawdown
52.29%
Sharpe
0.94
Win rate
36.7%
Trades
90
Open the report →
MACD, BTC daily: +597.61% against +1,078.75% for holding

That is still less than holding on 7 of 10 coins. MACD got ahead only on XRP (+1,597.10% against +673.84%), ADA and BCH.

On 4-hour candles the same rule fires about six times as often — 560 to 595 trades per coin — and every round trip pays 0.3% in fees and slippage. Adding up the fees and slippage each run reports, those costs came to more than the 10,000 USDT starting capital on 8 of 10 coins, and only 5 of 10 runs ended in profit.

Backtest

MACD 12/26/9 signal-line cross — article study

BTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01

Return
-26.67%
Max drawdown
77.99%
Sharpe
0.08
Win rate
33.9%
Trades
563
Open the report →
MACD, BTC on 4-hour candles: -26.67% against +1,059.22% for holding

The best and the worst MACD cells:

Backtest

MACD 12/26/9 signal-line cross — article study

DOGEUSDT · 1d · Spot · 2020-01-01 → 2026-10-01

Return
+2,766.96%
Max drawdown
80.00%
Sharpe
0.94
Win rate
39.2%
Trades
79
Open the report →
The best MACD cell, DOGE daily: +2,766.96% against +3,806.69% for holding

Backtest

MACD 12/26/9 signal-line cross — article study

LTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01

Return
-86.51%
Max drawdown
95.49%
Sharpe
-0.24
Win rate
35.8%
Trades
595
Open the report →
The worst MACD cell, LTC on 4-hour candles: -86.51% against +53.22% for holding

Bollinger Bands: right two times out of three, and still losing

The Bollinger rule is the opposite shape: it buys a close back above the lower band and sells at the average, so it wins often and small. 1,971 of its 3,029 trades across the 20 runs closed in profit, and every run won more than half of its trades — yet in all 20 the average losing trade was larger than the average winning one. Without a stop, a band bounce that fails keeps falling: in 16 of 20 runs the worst single trade lost 30% or more.

Backtest

Bollinger 20/2 lower-band reversion to middle — article study

BTCUSDT · 1d · Spot · 2020-01-01 → 2026-10-01

Return
+44.32%
Max drawdown
45.27%
Sharpe
0.34
Win rate
64.9%
Trades
37
Open the report →
Bollinger, BTC daily: +44.32% against +1,078.75% for holding

Backtest

Bollinger 20/2 lower-band reversion to middle — article study

BTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01

Return
-65.81%
Max drawdown
72.62%
Sharpe
-0.39
Win rate
62.8%
Trades
253
Open the report →
Bollinger, BTC on 4-hour candles: -65.81% against +1,059.22% for holding

On 4-hour candles not one of ten coins ended in profit. On daily candles four did; the only one that beat holding was LTC, +68.77% against +19.11%.

Backtest

Bollinger 20/2 lower-band reversion to middle — article study

BNBUSDT · 1d · Spot · 2020-01-01 → 2026-10-01

Return
+169.76%
Max drawdown
43.01%
Sharpe
0.64
Win rate
75.6%
Trades
41
Open the report →
The best Bollinger cell, BNB daily: +169.76% against +5,525.66% for holding

Backtest

Bollinger 20/2 lower-band reversion to middle — article study

BCHUSDT · 4h · Spot · 2020-01-01 → 2026-10-01

Return
-83.83%
Max drawdown
90.10%
Sharpe
-0.33
Win rate
64.6%
Trades
285
Open the report →
The worst Bollinger cell, BCH on 4-hour candles: -83.83% against +37.67% for holding

Was it the signal or just the market?

A long-only rule can make money just by being in a coin that went up. The random-entry baseline takes that away: for each run, 2,000 simulated runs with the same number of trades and the same average holding time, entered at random dates and charged the same costs. If a signal added nothing, about half of the runs would end above their random median and about two in twenty would land in each 10% tail.

MACD did better than that. It ended above the random median in 16 of 20 runs — 8 of 10 on each timeframe — and in the top 10% of its random runs in 4 (XRP daily; ETH, ADA and DOGE on 4-hour candles), never in the bottom 10%. The median MACD run beat 81.1% of its random runs. Being in the market during the long moves and out of the market in the chop is what a trend rule is for, and in 2020–2026 crypto trended. On 4-hour candles this mostly meant losing less: the random runs paid the same costs, and the median of the ten coins' random medians was -40.85%.

This is a hint, not an edge. It is one rule on one market history, the 20 runs are far from independent — the coins move together, and each coin appears twice — and no holdout was kept; a claim that MACD has an edge would need a proper out-of-sample test. And beating random entry is a lower bar than beating holding, which MACD cleared in only 3 of 20 runs.

Bollinger did worse than random. It ended above the random median in 5 of 20 runs, in the top 10% in none and in the bottom 10% in 3 (ADA daily, BTC and ETH on 4-hour candles); the median run beat 28.1% of its random runs. Buying bounces off the lower band was, if anything, worse than buying at random dates and holding for the same time.

One simplification applies to both rules: every random trade is held for exactly the rule's average time, while the rules' own trades vary in length.

MACD, all 20 runs

CoinTFRuleBuy & holdRandom entry, medianRandom runs beatenTradesMax drawdown
BTC1d+597.61%+1,078.75%+176.17%89.9%9052.29%
ETH1d+446.72%+1,969.60%+280.69%63.3%9357.72%
BNB1d+2,052.11%+5,525.66%+545.74%88.9%8344.43%
XRP1d+1,597.10%+673.84%+127.26%94.7%7872.41%
ADA1d+489.93%+332.58%+91.33%83.6%8487.95%
DOGE1d+2,766.96%+3,806.69%+549.32%82.9%7980.00%
LTC1d-47.29%-2.20%-17.70%32.7%8684.58%
LINK1d+196.19%+419.16%+95.02%62.7%9481.80%
BCH1d+93.54%-19.51%-29.12%81.1%10077.06%
TRX1d+61.71%+2,432.53%+296.75%15.3%10277.55%
BTC4h-26.67%+1,059.22%-37.40%58.7%56377.99%
ETH4h+217.89%+1,970.71%-17.72%91.5%56680.57%
BNB4h+214.75%+5,469.44%+32.06%83.0%59485.19%
XRP4h-16.91%+673.83%-44.31%64.6%58887.68%
ADA4h+223.83%+601.20%-47.33%93.4%56086.90%
DOGE4h+1,354.77%+4,436.97%+27.98%93.2%57887.98%
LTC4h-86.51%+53.22%-76.05%29.5%59595.49%
LINK4h+15.79%+672.78%-44.65%71.0%57790.86%
BCH4h-74.41%+31.58%-76.28%52.1%56793.11%
TRX4h-38.55%+2,447.03%-6.26%32.2%59190.18%

Bollinger Bands, all 20 runs

CoinTFRuleBuy & holdRandom entry, medianRandom runs beatenTradesMax drawdown
BTC1d+44.32%+1,078.75%+43.85%50.1%3745.27%
ETH1d-3.95%+1,969.60%+67.76%24.9%4056.28%
BNB1d+169.76%+5,525.66%+81.64%69.6%4143.01%
XRP1d+30.19%+673.84%+36.59%47.9%4874.30%
ADA1d-76.27%+462.81%+49.87%4.4%3783.29%
DOGE1d-57.82%+3,871.80%+119.89%12.0%3872.19%
LTC1d+68.77%+19.11%-8.73%78.1%4055.13%
LINK1d-15.40%+435.19%+26.51%35.7%3658.94%
BCH1d-50.10%-9.93%-18.10%31.0%4172.97%
TRX1d-0.43%+2,432.53%+40.66%28.1%3051.67%
BTC4h-65.81%+1,059.22%-18.28%7.1%25372.62%
ETH4h-73.41%+1,970.71%-6.73%7.4%25879.22%
BNB4h-35.24%+5,469.44%+12.09%25.8%25662.58%
XRP4h-32.15%+673.83%-32.19%50.1%28460.26%
ADA4h-59.60%+637.88%-19.75%26.0%26484.63%
DOGE4h-72.16%+4,580.87%+11.92%15.1%26386.49%
LTC4h-26.86%+58.96%-48.04%66.5%26868.74%
LINK4h-74.73%+705.92%-24.97%14.8%26083.34%
BCH4h-83.83%+37.67%-55.41%14.1%28590.10%
TRX4h-31.33%+2,447.03%-11.18%35.0%25077.09%

Each return links to its run where it was saved — BTC and ETH on both timeframes plus the best and worst cell of each rule; the others are re-runs of the same two strategies that were not stored, and the saved runs reproduce them to the cent. "Random runs beaten" is the share of the 2,000 random-entry runs that ended below the rule.

Conclusion

  • MACD on daily candles made money on 9 of 10 large coins in 2020–2026, but beat simply holding on only 3 — and on 4-hour candles fees and slippage ate most of what it caught.
  • Bollinger mean reversion won about two trades of three and lost money in 16 of 20 runs: without a stop, the losers were bigger than the winners every time.
  • Against random entries with the same holding time MACD came out ahead in 16 of 20 runs and Bollinger in 5 — a hint that trend timing mattered in 2020–2026 and band bounces did not, from one untuned test without a holdout.

The same test for RSI: RSI 30/70 on crypto. A trend rule on a wider set of coins: the golden cross on the top-20.

Test your own idea

Create a free account, start from a template or from your own rules, and read your first report.

More articles