Divvy

"What if I'd invested my money into that portfolio instead?"

Replay the exact money you actually invested โ€” the real dates, the real amounts โ€” into a different basket of ETFs/stocks, and see the dividends and returns you would have earned.

PyPI MIT Python 3.12+

The live demo runs on synthetic data. For your real numbers, run it locally โ€” your financial data never leaves your machine.

Why it's different

Every backtester on the internet (Portfolio Visualizer and friends) simulates a make-believe "$X every month." Nobody's contributions look like that โ€” real life is lumpy dates and amounts. Divvy replays your genuine contribution calendar (from a broker export, a plain date,amount CSV, or a 1099 dividend import) into whatever portfolio you're curious about, with dividend reinvestment (DRIP).

๐Ÿ’ก "If I'd put the exact money I actually invested into this basket instead, how much more โ€” in dividends specifically, and in total โ€” would I have made?"

See it in action

Add portfolios, tweak the knobs, and compare dividends & returns live.

Divvy Portfolio Experiment Lab demo

Features

๐Ÿ” Real-ledger replay

Your actual contribution calendar, not a synthetic assumption.

๐Ÿ’ต Dividends first-class

Lifetime and trailing-12-month run-rate โ€” the number income investors care about.

๐Ÿ“ˆ Honest comparison

Money-weighted XIRR, an SPY benchmark row, max drawdown & volatility.

๐Ÿงช Experiment Lab

A local web app to add/remove tickers, tweak weights, and compare live.

๐ŸŽ›๏ธ Realism knobs

Optional after-tax dividends, rebalancing, and expense-ratio drag.

๐Ÿ”’ Private by default

All financial data stays on your machine. Nothing uploaded, nothing committed.

Install & try it in 30 seconds

No data required โ€” kick the tires with synthetic mode:

pip install 'divvy-backtest[ui]'

# zero-data quickstart
divvy compare --synthetic-monthly 500 --synthetic-start 2019-01-01 \
  --bucket examples/buckets/dividend_etf_core.yaml \
  --bucket examples/buckets/high_yield_tilt.yaml

# or launch the interactive Experiment Lab
divvy ui

How it works

Contributions and each holding's ex-dividend dates are merged into one chronological event stream. Contributions buy shares at that day's close; dividends are reinvested (DRIP) into the same holding. Returns use money-weighted XIRR so lumpy cash flows are handled honestly, and risk metrics come from a contribution-free NAV so drawdown/volatility reflect the basket itself.

โš ๏ธ A backtester, not a crystal ball. Divvy describes what already happened over one window. Past performance does not predict the future, and nothing here is personalized financial advice โ€” do your own research.