BTC$80,907▼0.21%ETH$2,651▲1.22%SOL$111▲0.72%XRP$1.41▲0.35%BNB$776▲2.02%DOGE$0.0874▲0.31%ADA$0.2272▲0.05%AVAX$11.17▲14.31%BTC$80,907▼0.21%ETH$2,651▲1.22%SOL$111▲0.72%XRP$1.41▲0.35%BNB$776▲2.02%DOGE$0.0874▲0.31%ADA$0.2272▲0.05%AVAX$11.17▲14.31%
>_Crypto Position Lab

Crypto DCA Simulator

Backtest a recurring buy plan against real historical prices, not a guess.

DCALump sum
Total invested$5,300$5,300
Current value$5,520$3,733
Total return+4.16%-29.57%
Units held0.0680120.045985
Average cost$77,927.62$115,255.85

Over this period, DCA came out ahead by 33.73 percentage points.

BTC dollar-cost averaging

InvestedPortfolio valueLump sum value
Buys
53
Units held
0.068012 BTC
Average cost
$77,927.62
Spot price
$81,169.04

Backtested on real historical daily closing prices. Past performance does not predict future returns — this is an educational estimate, not financial advice.

What a backtest can and cannot tell you

How to read the numbers above, and what they don't settle.

Why average cost is the number that matters

Every unit you bought has a price attached, and average cost is the weighted average of all of them. It is the single number that decides whether the position is a paper gain or a paper loss: above current price, you are down; below it, you are up. Nothing else about the plan matters as much.

This is also why DCA does not eliminate risk, it just changes its shape. You still hold the asset, and the asset can still fall below what you paid for it on average — DCA only means you did not pay the single worst price available over the window.

Compound mode, in advanced settings, works differently: it takes profit at a set threshold and redeploys it rather than adding new principal, so it changes average cost through a separate mechanism from the recurring buys.

DCA against lump sum

The comparison table above runs both strategies on the exact same total capital and the exact same historical prices. Lump sum wins more often than not in an asset that trends upward over the test window, because it spends more time holding the full position while the price rises.

DCA wins when price falls after the start date and only recovers later, because spreading the buys out means some of the capital gets in at the lower prices along the way instead of missing them entirely.

The window problem

Every figure on this page is conditional on the start and end date you picked. Move the window by a few months and the winner between DCA and lump sum can flip, sometimes by a wide margin.

The honest way to use this tool is to run more than one period — 6 months, 1 year, 2 years — and look at whether the conclusion holds up across all of them or only in the one you happened to pick first.

None of this predicts what happens next. A backtest describes one path the market already took, not a path it will take again.

Frequently asked questions

Where does the price data come from?

Real historical daily closing prices for each asset, not a modelled return assumption. Many DCA calculators ask you to enter an expected annual return and then compound it — that produces a projection, not a backtest. This one replays what actually happened.

Does DCA beat buying all at once?

Historically, lump-sum investing wins more often than not in assets that trend upward, because the money spends more time in the market. DCA wins when the price falls after your start date and recovers later. The comparison on this page shows which one it was for the period you selected.

What period should I test?

Test more than one. A single window tells you about that window, not about the strategy. Running the same plan over 6 months, 1 year and 2 years usually shows the result flipping sign, which is the honest takeaway.

Are trading fees included?

Yes. Each simulated purchase is charged the fee rate set in advanced settings, so the units accumulated are net of costs.

Does past performance predict future returns?

No. A backtest describes one path the market already took. It is useful for understanding how a strategy behaves, not for estimating what it will return.

Did this answer your question?