DCA FINANCE
Calculation methodology
What is calculated, where data comes from and where each model stops.
Minimum order budget for a chosen fee limit
The separate dca-fee-budget-cents-1 method finds the first qualifying whole-cent order budget under user-entered fees and bounds. The all-in budget includes a fixed fee plus a percentage of that budget; the percentage component is rounded to the nearest cent, with half cents rounded up. The fee share must meet the chosen cap and the amount left to buy the asset must be positive. For example, a USD 1 fixed fee, a 0.10% percentage fee and a 0.50% cap give a first qualifying budget of USD 250 when the minimum is USD 1: the fee is USD 1.25 and USD 248.75 remains. Rounding can make a later larger budget fail again; the search does not assume monotonicity. A mathematical threshold above the available budget is not shown as an available order. This is a selected cost model, not a verified exchange tariff or minimum, an investment-size recommendation or a return calculation. Network fees, spreads and asset prices are excluded. Historical fee comparisons retain their separate method.
Ten JSON reference cases provide the integer-cent and basis-point inputs, expected fees and net amounts, rounding cases and unavailable outcomes. Before serving the file, the server replays the current method and checks the edition fingerprint. The inputs are illustrative fee models. Open reference cases JSON. SHA-256 covers the JSON without editionSha256; preserve field order when repeating the check.
Fees for daily, weekly and monthly orders
Method dca-schedule-fees-cents-1 divides one integer-cent budget across 12 calendar months. The start date is included and the anniversary is excluded; a 29 February anniversary clamps to 28 February. Daily includes all 365 or 366 dates; every seven days from the start gives 53 orders; monthly gives 12 dates retaining the original day, clamped to month end. For n orders, the base allocation is floor(B/n); the first B mod n orders receive one extra cent. Each all-in allocation includes its dca-fee-budget-cents-1 fee. Aggregate fees and net are available only when every order leaves a positive purchase amount; zero budgets and fee-consumed orders are identified separately. For example, USD 3000 from 1 January 2026, a USD 1 fixed fee and a 0.10% percentage fee produce modeled costs of USD 368.65 for 365 daily orders, USD 56.18 for 53 weekly orders and USD 15 for 12 monthly orders. JSON and CSV include every date and exact integer amount. This compares costs; asset prices, returns, cash availability on each date and exchange execution rules are separate questions.
A budget with multiple recurring payments
Method cashflow-rules-monthly-2 keeps separate monthly rules for income, expenses and investment contributions. From the original dashboard, open “Multiple recurring payments” and review the upgrade preview. Recorded cash and opening balance are preserved; the new version is activated after confirmation. Days 29–31 use the last available day in shorter months. A linked payment reduces its own occurrence: a target of 100 with 40 paid leaves 60. Recorded cash is not replaced by a plan, and overpayment cannot create a negative remainder. Existing monthly completion marks retain their original whole-kind, whole-month meaning. Investment contributions are cash outflows; asset values and investment returns are excluded from this cash plan.
Stress, future records and overdue plans
Stress changes the full planned target before subtracting recorded and known future linked amounts. The remainder is max(0, rounded target − recorded − known future); half cents round up. With an expense target of 100, 40 paid and a 100% expense increase, the target becomes 200 and the remainder is 160, not 120. Recorded amounts are not stressed. A 100% income reduction clamps the planned remainder to zero without reversing recorded receipts. Preserved future transactions enter the forecast on their own dates and do not become cash available now. Unpaid past plans are listed within a separate 12-month lookback and do not reduce current cash. If accounting starts in the future, current available cash is withheld and the forecast starts from that opening boundary.
Private cash context for your own AI chat
Method private-recurring-cash-context-1 prepares selected information locally. Every disclosure choice starts off; the complete text must be reviewed and confirmed before copying. History, notes, internal IDs, account fields and migration hashes are excluded. Cash disclosure includes the balance and recorded monthly totals. Labels and dates are separate choices. Forecast totals require this cash disclosure and always use the whole workspace over 12 months, even when only selected rule information is shown. A dateless summary cannot reproduce the complete calendar calculation and is not anonymous. Provider buttons open empty chats without financial parameters in URLs. Public MCP does not read a private v2 budget; its public cashflow-monthly-1 scenarios keep their original method.
A one-time calendar export of remaining payments
Method cashflow-rules-monthly-calendar-1 creates a local ICS file for remaining base-plan payments over the next 12 months. The interval starts at the reference date and excludes its right boundary. Completed and skipped occurrences are omitted; partial payments reduce the remaining amount. Default all-day events contain generic titles and dates, without amounts, notes or account details. Personal labels require a separate choice and may disclose private information. This is not a subscribed feed: later records and changes on the site do not update your calendar. Notifications, repeat imports and possible duplicates depend on the calendar application.
A saved DCA result card for an article
The compact saved-dca-result-card-1 embed displays a saved result with a checked ID and replays method dca-backtest-1 using its stored price series. It fetches no new quotes and has no access to a personal portfolio. Asset, frequency, contribution, purchase count, invested amount, units, ending value and simple period return are available in HTML without JavaScript. The calculation boundary and price observation time are separate: gaps may require an earlier reference price. Fees, taxes and slippage are excluded. The ID binds parameters and prices; it is not a provider signature or a guarantee of market accuracy. Visible links lead to the full result, data manifest and methodology. Embed code requires a saved result, and the preview loads only when expanded.
Allocating a new contribution without selling
Method buy-only-user-targets-zero-fee-1 uses weights entered by the user; the site does not recommend an allocation. Targets must total 100%. Each current asset value is rounded to cents using exact units held and the quote’s decimal value. The new contribution is allocated in cents: buys are nonnegative, add up to the contribution and minimize the sum of squared deviations from target values after the contribution. Ties follow the order Bitcoin, Ethereum, Solana, Litecoin, Dogecoin. Targets may remain unreachable because selling is excluded. Fees, taxes, spreads and trading lots are excluded; estimated units are approximate. Illustrative example: Bitcoin worth USD 200 and Ethereum worth USD 300, a USD 200 contribution and 50/50 targets produce USD 150 for Bitcoin and USD 50 for Ethereum. This is a scenario and does not record trades.
Portfolio valuation and quote timestamps
The overview combines recorded orders across five supported assets. Each open position needs a positive quote for the correct asset, no more than 30 minutes old and with a UTC date no earlier than the latest recorded order date. Execution times are not stored, so quote-versus-order timing within a day cannot be checked. Price time comes from CoinGecko; retrieval time is stored separately and does not replace it. If any usable quote is missing, total valuation, overall profit and allocation are withheld. Closed positions need no quote. Refresh sends the same five public ticker IDs regardless of private holdings. User amounts, targets and orders are not included in that request.
A portfolio report for your own AI chat
Method selected-asset-private-summary-1 prepares selected totals for one asset to share in your own chat. The complete text is visible before copying, which requires explicit review. Notes, IDs, transaction history and account details are excluded; plan settings and activity dates are separate choices. Provider links open blank chats without financial parameters. This is text export, not a built-in advisor or AI access to your portfolio. XIRR cannot be reproduced from totals alone because dated cash flows are not included.
Checking the calculation order by order
Method weighted-average-cost-ledger-1 exposes the same accounting used in portfolio totals: units held, remaining cost basis, cost removed and profit for each sale. Full selected-asset CSV export is independent of journal filters. Cost allocations retain their precision until display, so adding rounded sale profits can differ from cumulative profit. Execution times are not stored: buys precede sells within each day, with recorded order preserved within each kind. This is an analytical ledger of user-entered records, not a tax return.
Hypothetical liquidation and contribution recovery
Method portfolio-full-exit-scenarios-1 models selling all remaining units after specified changes to the displayed price, including modeled exit fees. Overall profit equals modeled net proceeds plus previous net sale proceeds minus all purchase costs. The contribution-recovery reference accounts for money already received and differs from the remaining position’s average cost basis. Cash amounts and fees round to cents. Taxes and slippage are excluded. These are scenarios, not forecasts, historical drawdowns or guaranteed execution prices.
Exporting planned dates to a calendar
Method upcoming-dca-plan-calendar-1 downloads planned dates for the selected asset over the next 12 calendar months as a local ICS file. All-day events preserve the original monthly day, using the final day of shorter months where needed. The file contains no amounts, notes, account details or confirmations of execution. You import it into your own calendar; it does not create automatic sync or configured alerts. Importing again can create duplicates and does not remove old events from a changed plan.
DCA portfolio cost accounting
The portfolio uses a weighted-average cost pool for each asset. A buy adds its full cash cost, including the fee, to the pool and the units actually received to holdings. A sale removes the proportion of pooled cost attributable to the units sold. Realized profit is net sale proceeds less that allocated cost. Unrealized profit is the remaining units valued at the displayed quote less their remaining cost. This is an accounting model, not FIFO or a tax report. Orders are sorted by date, with all buys before sells on the same date; intraday execution order is not reconstructed. Units support up to eight decimal places, and cash amounts and fees up to two.
Worked example: purchases, fees and a partial sale
Illustrative inputs, not market data: buy 2 units for a total of USD 202 including fees, then buy 1 unit for USD 121. That leaves 3 units and USD 323 of pooled cost. Sell 1 unit for USD 150 before a USD 2 fee: net proceeds are USD 148. The cost assigned to the sold unit is 323 / 3 = USD 107.6667, giving USD 40.33 of realized profit. The remaining 2 units have USD 215.33 of cost. At an illustrative quote of USD 120, their value is USD 240 and unrealized profit is USD 24.67. Total profit is 148 + 240 − 323 = USD 65. Intermediate cost allocations retain their precision; displayed amounts are rounded.
XIRR: return that accounts for cash-flow dates
Method dated-cashflows-365-1 solves sum(Cᵢ / (1 + r)^((dᵢ − d₀) / 365)) = 0. A buy is a negative flow including its fee; a sale is positive net proceeds. Remaining units provide a positive terminal value on the quote’s UTC date. Same-day flows are netted. Only one change from negative to positive flows is supported; no arbitrary rate is selected for patterns that may have multiple solutions. Flows must span different dates. Closed positions need no current quote; open positions need a quote for the correct asset dated no earlier than the last order. Annualizing a short period can produce a very large percentage. XIRR is neither a forecast nor a time-weighted return.
Ledger and cash flow
Actual cash is opening cash plus income, minus expenses and investment contributions. Amounts are summed in cents. Planned events do not become actual transactions automatically. Same-day forecast flows are netted without assuming an intraday order. The sustainable contribution metric finds the highest monthly investment that keeps the 12-month projected cash balance non-negative.
Return scenarios
Annual returns, contributions, inflation and costs are user inputs. Models do not predict returns. Each calculator describes its formula, units and excluded costs.
Prices, drawdowns and history
Market data comes from CoinGecko (public free-tier coverage spans the last 365 days UTC). Cached or fallback data is identified. Missing historical data is not replaced with invented prices. In the historical backtest, asset price drawdown, contributed portfolio drawdown, total capital drawdown including unspent cash, and strategy return drawdown relative to cost basis are reported separately.
Method versions and reproducibility
Verifiable calculations carry explicit method identifiers: cashflow-monthly-1 (12-month cash flow and stress projection), monthly-contributions-1 (monthly compound contribution model), dca-backtest-1 (historical DCA using the latest price at or before each scheduled purchase, pre-fee in canonical snapshots) and price-series-audit-1 (coverage passport, missing UTC days and SHA-256 fingerprint of the normalized series). Any rule change requires a new method version so saved links replay identically.
Keeping progress
Without signing in, your plan stays in your browser. A free account adds Cloudflare D1 storage and sync. Conflicting versions are reviewed rather than silently merged or overwritten.