// 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 1d | MACD 4h | Bollinger 1d | Bollinger 4h | |
|---|---|---|---|---|
| Runs in profit | 9 / 10 | 5 / 10 | 4 / 10 | 0 / 10 |
| Runs ahead of buy and hold | 3 / 10 | 0 / 10 | 1 / 10 | 0 / 10 |
| Runs ahead of the random median | 8 / 10 | 8 / 10 | 3 / 10 | 2 / 10 |
| Median return | +468.32% | -0.56% | -2.19% | -62.71% |
| Median win rate | 36.3% | 34.1% | 70.1% | 65.0% |
| Median time in the market | 51.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 studyBTCUSDT · 1d · Spot · 2020-01-01 → 2026-10-01
- Return
- +597.61%
- Max drawdown
- 52.29%
- Sharpe
- 0.94
- Win rate
- 36.7%
- Trades
- 90
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 studyBTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01
- Return
- -26.67%
- Max drawdown
- 77.99%
- Sharpe
- 0.08
- Win rate
- 33.9%
- Trades
- 563
The best and the worst MACD cells:
Backtest
MACD 12/26/9 signal-line cross — article studyDOGEUSDT · 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
Backtest
MACD 12/26/9 signal-line cross — article studyLTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01
- Return
- -86.51%
- Max drawdown
- 95.49%
- Sharpe
- -0.24
- Win rate
- 35.8%
- Trades
- 595
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 studyBTCUSDT · 1d · Spot · 2020-01-01 → 2026-10-01
- Return
- +44.32%
- Max drawdown
- 45.27%
- Sharpe
- 0.34
- Win rate
- 64.9%
- Trades
- 37
Backtest
Bollinger 20/2 lower-band reversion to middle — article studyBTCUSDT · 4h · Spot · 2020-01-01 → 2026-10-01
- Return
- -65.81%
- Max drawdown
- 72.62%
- Sharpe
- -0.39
- Win rate
- 62.8%
- Trades
- 253
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 studyBNBUSDT · 1d · Spot · 2020-01-01 → 2026-10-01
- Return
- +169.76%
- Max drawdown
- 43.01%
- Sharpe
- 0.64
- Win rate
- 75.6%
- Trades
- 41
Backtest
Bollinger 20/2 lower-band reversion to middle — article studyBCHUSDT · 4h · Spot · 2020-01-01 → 2026-10-01
- Return
- -83.83%
- Max drawdown
- 90.10%
- Sharpe
- -0.33
- Win rate
- 64.6%
- Trades
- 285
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
| Coin | TF | Rule | Buy & hold | Random entry, median | Random runs beaten | Trades | Max drawdown |
|---|---|---|---|---|---|---|---|
| BTC | 1d | +597.61% | +1,078.75% | +176.17% | 89.9% | 90 | 52.29% |
| ETH | 1d | +446.72% | +1,969.60% | +280.69% | 63.3% | 93 | 57.72% |
| BNB | 1d | +2,052.11% | +5,525.66% | +545.74% | 88.9% | 83 | 44.43% |
| XRP | 1d | +1,597.10% | +673.84% | +127.26% | 94.7% | 78 | 72.41% |
| ADA | 1d | +489.93% | +332.58% | +91.33% | 83.6% | 84 | 87.95% |
| DOGE | 1d | +2,766.96% | +3,806.69% | +549.32% | 82.9% | 79 | 80.00% |
| LTC | 1d | -47.29% | -2.20% | -17.70% | 32.7% | 86 | 84.58% |
| LINK | 1d | +196.19% | +419.16% | +95.02% | 62.7% | 94 | 81.80% |
| BCH | 1d | +93.54% | -19.51% | -29.12% | 81.1% | 100 | 77.06% |
| TRX | 1d | +61.71% | +2,432.53% | +296.75% | 15.3% | 102 | 77.55% |
| BTC | 4h | -26.67% | +1,059.22% | -37.40% | 58.7% | 563 | 77.99% |
| ETH | 4h | +217.89% | +1,970.71% | -17.72% | 91.5% | 566 | 80.57% |
| BNB | 4h | +214.75% | +5,469.44% | +32.06% | 83.0% | 594 | 85.19% |
| XRP | 4h | -16.91% | +673.83% | -44.31% | 64.6% | 588 | 87.68% |
| ADA | 4h | +223.83% | +601.20% | -47.33% | 93.4% | 560 | 86.90% |
| DOGE | 4h | +1,354.77% | +4,436.97% | +27.98% | 93.2% | 578 | 87.98% |
| LTC | 4h | -86.51% | +53.22% | -76.05% | 29.5% | 595 | 95.49% |
| LINK | 4h | +15.79% | +672.78% | -44.65% | 71.0% | 577 | 90.86% |
| BCH | 4h | -74.41% | +31.58% | -76.28% | 52.1% | 567 | 93.11% |
| TRX | 4h | -38.55% | +2,447.03% | -6.26% | 32.2% | 591 | 90.18% |
Bollinger Bands, all 20 runs
| Coin | TF | Rule | Buy & hold | Random entry, median | Random runs beaten | Trades | Max drawdown |
|---|---|---|---|---|---|---|---|
| BTC | 1d | +44.32% | +1,078.75% | +43.85% | 50.1% | 37 | 45.27% |
| ETH | 1d | -3.95% | +1,969.60% | +67.76% | 24.9% | 40 | 56.28% |
| BNB | 1d | +169.76% | +5,525.66% | +81.64% | 69.6% | 41 | 43.01% |
| XRP | 1d | +30.19% | +673.84% | +36.59% | 47.9% | 48 | 74.30% |
| ADA | 1d | -76.27% | +462.81% | +49.87% | 4.4% | 37 | 83.29% |
| DOGE | 1d | -57.82% | +3,871.80% | +119.89% | 12.0% | 38 | 72.19% |
| LTC | 1d | +68.77% | +19.11% | -8.73% | 78.1% | 40 | 55.13% |
| LINK | 1d | -15.40% | +435.19% | +26.51% | 35.7% | 36 | 58.94% |
| BCH | 1d | -50.10% | -9.93% | -18.10% | 31.0% | 41 | 72.97% |
| TRX | 1d | -0.43% | +2,432.53% | +40.66% | 28.1% | 30 | 51.67% |
| BTC | 4h | -65.81% | +1,059.22% | -18.28% | 7.1% | 253 | 72.62% |
| ETH | 4h | -73.41% | +1,970.71% | -6.73% | 7.4% | 258 | 79.22% |
| BNB | 4h | -35.24% | +5,469.44% | +12.09% | 25.8% | 256 | 62.58% |
| XRP | 4h | -32.15% | +673.83% | -32.19% | 50.1% | 284 | 60.26% |
| ADA | 4h | -59.60% | +637.88% | -19.75% | 26.0% | 264 | 84.63% |
| DOGE | 4h | -72.16% | +4,580.87% | +11.92% | 15.1% | 263 | 86.49% |
| LTC | 4h | -26.86% | +58.96% | -48.04% | 66.5% | 268 | 68.74% |
| LINK | 4h | -74.73% | +705.92% | -24.97% | 14.8% | 260 | 83.34% |
| BCH | 4h | -83.83% | +37.67% | -55.41% | 14.1% | 285 | 90.10% |
| TRX | 4h | -31.33% | +2,447.03% | -11.18% | 35.0% | 250 | 77.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
- Does high funding predict crypto crashes? 8 coins, 2020–2026BIS economists found that high crypto carry predicts crashes. On 8 Binance perpetuals, 2020–2026, crashes came more often — but after bigger gains.
- Crypto momentum after the paper: a weekly test on 8 coinsLiu and Tsyvinski found weekly momentum in bitcoin up to 2018. On 8 coins in 2020–2026 the one-week signal lost to holding; four weeks cut drawdowns.
- Does price move the hour before funding? 8 coins, 2020–2026Do traders sell before paying funding? The hour before each settlement on 8 Binance perpetuals, 2020–2026: no reliable move, and fees took what was left.
- Bitcoin after the halving: 2020 and 2024 backtestedDid buying BTC at the halving pay? A year after 2020: +554.04%, top 2.5% of start days. After 2024: +30.45%, below the median. Two cases, no pattern.
- Weekends and time of day: when does bitcoin move?Do bitcoin gains come on weekends or outside US trading hours? Hourly BTC and ETH data since 2020, and session backtests: with fees, -99.87%.