Skip to main content

Methodology & Data Sources

A calculator you can't verify is a black box. This page documents exactly where our data comes from, how every number is computed, and where the model falls short of reality.

Data Sources

All requests are proxied through our server for caching; no personal data is sent to any provider. Refresh cadences are server-side cache windows, not guarantees from the providers.

SourceWhat it providesRefresh cadence
KrakenWeekly OHLC candles (default price series), interpolated to dailyCached ~1 hour
CoinbaseReal daily candles from 2015 onward (alternate price source)Cached ~1 hour
mempool.spaceBlock height, transaction fees, hash rate, difficulty, Lightning stats30s - 5 min
CoinGeckoGlobal market cap and Bitcoin dominance~5 min
FRED (St. Louis Fed)CPI inflation and M2 money supply seriesDaily
Yahoo FinanceS&P 500 (^GSPC) and Gold (GC=F) for asset comparisonsCached ~1 hour
alternative.meFear & Greed Index~5 min
blockchain.infoCirculating BTC supply; daily market prices 2010-2015 (static snapshot)~5 min / fixed
frankfurter.appECB reference FX rates (EUR, GBP, CAD, AUD, JPY display currencies)~12 hours

How the DCA Math Works

Purchase schedule. Purchases are scheduled on UTC calendar days: daily, weekly (every 7 days), bi-weekly (every 14 days), or monthly (same day-of-month, anchored to your start date). Exchange candles are UTC-aligned, so using UTC avoids the off-by-one-day shifts that local-time math causes for users west of Greenwich.

Fees. Your fee percentage is applied to every purchase before conversion: btcBought = amount × (1 − fee%) / price. The gross amount still counts as invested capital, so fees show up as a drag on returns — exactly as they do in real life.

Average Cost & ROI

Average cost = total invested ÷ total BTC accumulated. ROI = (current value − total invested) ÷ total invested. Current value is total BTC × the latest price.

XIRR (Annualized Return)

The money-weighted annualized return: the discount rate at which the net present value of all your dated purchases plus the final portfolio value equals zero. Solved numerically (Newton's method with a bisection fallback). Not shown for periods under 90 days, where annualizing is meaningless.

Max Drawdown

The largest peak-to-trough decline in your portfolio's value across the purchase-day series: how far underwater the strategy went at its worst point, as a percentage of the preceding peak.

Currency Display

All math runs in USD. Non-USD displays (EUR, GBP, CAD, AUD, JPY) convert at current ECB reference rates from frankfurter.app at display time — historical FX rates are not applied.

Data Honesty

The default series is interpolated. Kraken (the default source) provides weekly closes, which we linearly interpolate to daily values. That smooths out intra-week volatility: a purchase on a Wednesday uses an estimate between two real weekly closes, not the actual Wednesday price. Switching the source to Coinbase uses real daily candles from 2015 onward.

Early history uses real market prices. For dates before an exchange's own candles begin, we use actual daily market prices from blockchain.info covering August 2010 through mid-2015 (a static snapshot, since this history no longer changes). No prices are fabricated; the earliest supported simulations start in August 2010 at around $0.07.

Gaps use the last known price. If a scheduled purchase lands on a day with no price data (a gap in the series), the simulation uses the most recent known price rather than skipping the purchase.

Known Limitations

  • No taxes. Capital gains, income tax on rewards, and cost-basis accounting methods are not modeled.
  • No withdrawal fees. On-chain network fees and exchange withdrawal fees for moving coins to self-custody are excluded.
  • No spread modeling. The single fee percentage does not capture bid-ask spreads or exchange-specific price differences, which can add a hidden cost on top of quoted fees.
  • One price per day. All purchases execute at the day's series price; intraday timing is not simulated.

Changelog

July 2026

Accuracy & polish overhaul

  • Fixed: future projections double-counted contributions in some scenarios.
  • Fixed: currency conversion inconsistencies across the comparison and planning tools.
  • Fixed: purchase dates now use UTC calendar days everywhere, eliminating timezone-dependent schedule shifts.
  • New: live ECB exchange rates (frankfurter.app) replace hardcoded currency rates.
  • New: XIRR (money-weighted annualized return) and max drawdown statistics.
  • New: redesigned charts with single-axis tabs, plus this methodology page.
  • New: real daily market prices (blockchain.info) for 2010–2015, replacing the earlier synthetic pre-2015 interpolation.
  • New: historical win-rate stat — the share of comparable DCA windows since 2010 that ended in profit.
  • New: result-specific share previews, plan-vs-plan comparison, and prerendered DCA scenario pages.
February 2026

Reliability pass

API fetch timeouts, currency-aware labels across all tools, and the beginner-friendly mining guide.

Now Run Your Own Numbers

You know exactly how the sausage is made. Backtest your own DCA strategy with the calculator.

Open the Calculator

Disclaimer: This page describes an educational simulation, not investment advice. Historical and simulated performance does not guarantee future results. Bitcoin is volatile and carries significant risk. Always do your own research before making investment decisions.