# DCA bot with safety orders vs plain DCA: a backtest

> Does a DCA bot with safety orders beat plain DCA? BTC since 2020: +94.77% against +170.30% for weekly buys — and every safety order filled 64.5% of the time.

Research · Janorium · Published 2026-10-20  
Web page: https://janorium.com/articles/dca-bot-safety-orders-backtest

Not over the whole period. A base order plus five safety orders every -2% and a +2% take-profit closed 456 deals in a row on BTC since 2020 and still ended at +94.77%, against +170.30% for weekly buys and +1,065.16% for holding: for 64.5% of the time every safety order was filled and the bot sat waiting for a rebound. It came out ahead of weekly buys only in the 2021–2022 bear window.

A "DCA bot" in the sense of bot services such as 3Commas is not the same thing as dollar-cost averaging. Plain DCA buys
a fixed amount on a schedule and holds. A DCA bot opens a deal with a base order, buys more with **safety orders** each
time the price falls a set step, and sells the whole position at a small take-profit above the **average** entry — then
starts the next deal. It wins almost every deal; the question is what it costs to wait for the ones that go wrong.

## The bot and what it was compared with

- **The bot:** a base order of 600 USDT at the first bar; up to five safety orders, each when an hourly close is 2%
  below the previous fill, sized 600, 900, 1,350, 2,025 and 3,037.5 USDT (volume scale 1.5) — 8,516.75 USDT if all
  six orders fill, 85% of a 10,000 USDT account. Take-profit +2% from the average entry, closing the whole deal; a new
  deal starts on the same bar. No stop-loss. Spot, 1h candles.
- **Plain DCA:** 95 USDT every Monday, 104 times — 9,880 USDT over a two-year window — held to the end. For the whole
  period, the existing run of 25 USDT every Monday for 351 weeks (8,775 USDT), 2020-01-06 → 2026-09-27, from
  [the best-weekday study](https://janorium.com/articles/best-day-to-buy-bitcoin-dca-backtest).
- **Buy & hold:** the benchmark the bot's own run reports — the whole account in the coin from the first bar.
- **Windows:** 2021-01-01 → 2022-12-31 (the 2021 top and the 2022 bear), 2023-01-01 → 2024-12-31 (the bull run) and
  2020-01-01 → 2026-09-30. Binance spot, BTCUSDT and ETHUSDT, 0.1% fee and 0.05% slippage on every buy and sell.
- **Runs:** 10 new ones — the bot six times, the 104-week DCA four times — plus two from the earlier study. One set of
  bot settings, chosen up front; nothing was tuned.

The bot is built from six entry layers — the base order and five safety orders — with an aggregate take-profit that
measures +2% from the average entry of everything the deal holds. Two things differ from how a service such as
3Commas describes its bot[^1]: there each safety order rests as a limit order at a fixed deviation from the base order
(-2%, -4%, -6%, -8%, -10% here), while in this backtest a safety order fills at the close of the first hour that ends
2% or more below the previous fill — so a fast drop fills it lower than the level, and a wick that recovers within the
hour does not fill it at all.

## Results

| Window      | Coin | DCA bot                    | Weekly DCA                 | Buy & hold | Bot max drawdown |
| ----------- | ---- | -------------------------- | -------------------------- | ---------: | ---------------: |
| 2021–2022   | BTC  | [-29.11%](https://janorium.com/backtests/787)  | [-48.25%](https://janorium.com/backtests/791)  |    -42.95% |           47.77% |
| 2021–2022   | ETH  | [+23.42%](https://janorium.com/backtests/788)  | [-39.98%](https://janorium.com/backtests/792)  |    +62.94% |           34.65% |
| 2023–2024   | BTC  | [+57.74%](https://janorium.com/backtests/789)  | [+142.42%](https://janorium.com/backtests/793) |   +466.11% |           13.49% |
| 2023–2024   | ETH  | [+36.67%](https://janorium.com/backtests/790)  | [+50.19%](https://janorium.com/backtests/794)  |   +179.52% |           24.63% |
| 2020 → 2026 | BTC  | [+94.77%](https://janorium.com/backtests/785)  | [+170.30%](https://janorium.com/backtests/538) | +1,065.16% |           44.36% |
| 2020 → 2026 | ETH  | [+122.79%](https://janorium.com/backtests/786) | [+142.27%](https://janorium.com/backtests/539) | +1,984.28% |           47.19% |

Every return links to its run. Buy & hold is the benchmark reported by the bot's run over the same window.

In the bull window and over the whole period the bot finished behind both weekly buys and holding, on both coins. In the
2021–2022 window it finished ahead of weekly buys on both coins and ahead of holding on BTC — but with a drawdown of
47.77% there, not a safe harbour.

**Backtest: [DCA bot: base + 5 safety orders every -2%, x1.5, TP +2% — article study](https://janorium.com/backtests/785)**  
BTCUSDT · 1h · Spot · 2020-01-01 → 2026-09-30

| Return | Max drawdown | Sharpe | Win rate | Trades |
| --- | --- | --- | --- | --- |
| +94.77% | 44.36% | 0.53 | 77.2% | 854 |

*DCA bot on BTC, 2020-01-01 → 2026-09-30: +94.77%*

**Backtest: [DCA bot: base + 5 safety orders every -2%, x1.5, TP +2% — article study](https://janorium.com/backtests/789)**  
BTCUSDT · 1h · Spot · 2023-01-01 → 2024-12-31

| Return | Max drawdown | Sharpe | Win rate | Trades |
| --- | --- | --- | --- | --- |
| +57.74% | 13.49% | 1.48 | 77.4% | 420 |

*DCA bot on BTC, 2023–2024: +57.74%, against +466.11% for holding*

**Backtest: [DCA bot: base + 5 safety orders every -2%, x1.5, TP +2% — article study](https://janorium.com/backtests/787)**  
BTCUSDT · 1h · Spot · 2021-01-01 → 2022-12-31

| Return | Max drawdown | Sharpe | Win rate | Trades |
| --- | --- | --- | --- | --- |
| -29.11% | 47.77% | -0.30 | 74.8% | 242 |

*DCA bot on BTC, 2021–2022: -29.11%*

## Where the time went

The numbers below are computed from each run's trade list and the hourly candles: a deal is the set of fills that close
together, "capital in deals" is the cost of the open fills averaged over every hour of the window, and "fully loaded"
means all five safety orders were filled.

| Run             | Deals | Closed at the take-profit | All 5 safety orders filled | Capital in deals, average | Time fully loaded |
| --------------- | ----: | ------------------------: | -------------------------: | ------------------------: | ----------------: |
| BTC 2020 → 2026 |   457 |                       456 |                         22 |                     60.5% |             64.5% |
| ETH 2020 → 2026 |   577 |                       576 |                         31 |                     70.3% |             78.4% |
| BTC 2021–2022   |   129 |                       128 |                          7 |                     74.3% |             84.2% |
| ETH 2021–2022   |   295 |                       294 |                         17 |                     64.5% |             70.1% |
| BTC 2023–2024   |   234 |                       233 |                         11 |                     33.5% |             25.9% |
| ETH 2023–2024   |   174 |                       173 |                          9 |                     51.7% |             50.0% |

Every deal that closed, closed at the take-profit — in each run the only exception is the one still open when the data
ended. Most deals were quick: on BTC over the whole period 272 of 457 closed on the base order alone, and the median deal
lasted 0.71 days. The trouble is the other tail. Only 22 deals ever filled the fifth safety order, yet the bot spent
64.5% of the period inside such deals, because once fully loaded it can only wait for the price to climb
back to 2% above the average.

The longest waits:

- **BTC:** the deal opened on 2021-11-10, the day of the 2021 top, filled its last safety order on 2021-11-17 at an average
  of 61,946 USDT and stayed fully loaded for 834 days, until 2024-02-28. At its worst, on 2022-11-21, it was 6,365 USDT
  under water.
- **ETH:** fully loaded from 2022-04-11 to 2024-02-27, 687 days, at an average of 3,215 USDT; at worst 6,121 USDT under
  water on 2022-06-18.
- **Now:** both full-period runs ended inside a fully loaded deal — BTC since 2025-10-11, ETH since 2025-10-30 — 2,365
  and 2,678 USDT under water at the last bar.

In the bull window the opposite problem showed: the bot kept on average only 33.5% of the BTC account in a deal, so two
thirds of the money sat idle while the price rose more than fivefold, and the +2% exits sold every rally early.

> **What this test does not show**
>
> - **One set of settings.** Five safety orders, a 2% step, volume scale 1.5 and a 2% take-profit are a common shape, not
>   an optimised one. A wider grid survives deeper drops and sits idle longer; a tighter take-profit closes more deals and
>   caps more rallies. Searching those knobs on this history would find a winner that is not one.
> - **Hourly closes, not resting orders.** Safety orders fill at the close of the hour that crossed the step, not at the
>   level itself (above). The take-profit fills at its level.
> - **Idle cash earns nothing.** In a real account the unused part could earn a stablecoin yield, which would add to both the
>   bot and weekly DCA — both keep a large part of the account in cash.
> - **No stop-loss — by design.** That is how these bots are usually run, and it is why the stuck deals end only when the
>   price returns. A deal stop-loss would turn the long waits into realised losses.

## Conclusion

- The bot won 456 deals of 457 on BTC since 2020 and still made +94.77% against +170.30% for weekly buys of a similar
  budget and +1,065.16% for holding.
- The near-perfect deal record hides where the time goes: 64.5% of the period on BTC and 78.4% on ETH with every safety
  order filled, the longest wait 834 days.
- It held up better than weekly buys only in the 2021–2022 window, and even there the drawdown reached 47.77% on BTC.

Related: [DCA or lump sum](https://janorium.com/articles/dca-vs-lump-sum-btc-eth-backtest), [the best weekday to DCA](https://janorium.com/articles/best-day-to-buy-bitcoin-dca-backtest),
and how to read drawdown and the other metrics: [backtest metrics explained](https://janorium.com/guides/backtest-metrics-explained).

[^1]: 3Commas Help Center, "Main settings of DCA Bot", https://help.3commas.io/en/articles/3108940-main-settings-of-dca-bot — checked 2026-10-20: averaging (safety) orders are placed at deviations measured from the base order, a volume scale multiplies each next order, and the take-profit is by default a percentage of the average price.
