Zyvo ← Back to Zyvo
Methodology

How Zyvo Calculates Your Numbers

Most trackers show you a return percentage without saying how it was produced. This page is the opposite: the exact method behind every headline number in Zyvo, so you can verify it, trust it, or check it against your own math.

If you're looking for a general explanation of what these metrics mean, see TWR vs IRR and Average Cost vs FIFO. This page covers what Zyvo specifically does, not the general concepts.

Time-Weighted Return (TWR)

TWR answers "how did the investments themselves perform," independent of when you added or withdrew cash. Zyvo computes it by breaking your history into sub-periods at every buy or sell, and geometrically linking the return of each sub-period.

One specific choice worth stating: when a transaction happens, Zyvo marks the position to that transaction's own price first, before applying the cash flow. This captures any price movement that happened since the previous transaction. Marking the position afterward instead — the more common shortcut — silently drops that movement from the calculation, which is a real source of the wildly wrong TWR numbers (a well-known failure mode across many portfolio tools) that show up when a symbol has been bought several times at different prices.

Internal Rate of Return (IRR / XIRR)

IRR answers "how well did my money actually do," weighted by the size and timing of your real cash flows. Zyvo computes it with a standard XIRR approach (Newton-Raphson) over your actual buy/sell dates and amounts, plus your current portfolio value as a final cash flow valued today.

A minimum-history guard applies: XIRR is not shown for accounts with too little elapsed time, since the calculation becomes numerically unstable (and practically meaningless) over very short periods.

Cost Basis: Average Cost vs FIFO

Zyvo supports two cost-basis methods for realized gain/loss and tax reporting, selectable per report:

Other jurisdictions (for example, UK share-matching rules) may require adjustments Zyvo doesn't yet make automatically — always confirm the right method with a local accountant before filing.

A specific, honest gap: if you sell a position you held before you started using Zyvo, there's no matching buy on record. Zyvo flags these sales explicitly — cost basis shown as unknown rather than a misleading $0 — instead of silently guessing. You'll see this called out directly in the Tax Report view and in exported PDFs.

Wash Sale Detection

A wash sale disallows a loss when you sell a security and buy the same or a substantially identical one within 30 days before or after that sale (61 days total), under IRC §1091 — full explanation here. Zyvo checks purchases against sales across every broker on your account, not just the one where the sale happened, which is the specific blind spot a single broker's own 1099-B can't cover. Flagged sales are reported in Form 8949 columns (f)/(g), with the disallowed amount shown unadjusted in the on-screen figures so the two never silently disagree without explanation.

Cross-Broker Transfer Detection

Moving shares between brokers sometimes gets imported as two separate taxable-looking events — a sell on the old broker's statement, a buy on the new one — even though nothing was actually disposed of. Left alone, this reports a capital gain or loss that isn't real. Zyvo checks for a same-symbol, matching-quantity sell and buy across two different brokers within a short date window, and flags the pair so you can remove both and keep the original cost basis intact, rather than silently accepting a phantom gain.

Tax Estimate: Federal & State

The US federal estimate stacks short-term gains at ordinary rates and long-term gains at 0/15/20%, includes the 3.8% Net Investment Income Tax above the relevant income threshold, and carries forward prior-year losses from your own Zyvo history. State tax is modeled for California, New York, Illinois, and Pennsylvania (each seeded from official state tax authority figures, cited by source in-app), Washington's capital-gains excise tax (7%/9.9%, long-term gains only), and the eight states with no state income tax at all. Any state not on that list is deliberately left unmodeled rather than guessed at.

UK estimates follow HMRC helpsheet HS284 (same-day, then 30-day, then Section 104 pooling), with the Annual Exempt Amount applied. Germany follows Abgeltungssteuer with FIFO cost basis applied per Depot (individual brokerage account) rather than pooled across accounts, matching how German banks report Kapitalertragsteuer.

What this estimate deliberately doesn't do: it isn't a substitute for filing software or an accountant, doesn't model every itemized deduction or credit, and — like the rest of this page — every gap it currently has is disclosed in the app rather than silently absorbed into the number.

Currency Conversion

Every transaction in a currency other than your display currency is converted using the exchange rate as of that transaction's own date — not today's rate. That historical rate is captured once, at the time you save or import the transaction, and stored with it, so your past returns don't shift every time exchange rates move.

All calculations — position values, TWR, XIRR, tax reports, and charts — run on this same currency-normalized transaction data, not on raw multi-currency figures. This is a deliberate architectural rule, not an incidental detail: bypassing it was the root cause of a real multi-currency bug found and fixed during development.


This report is for reference only — it is not tax or investment advice. Confirm figures with an accountant or your local tax software before filing, and verify orphaned-cost-basis sales against your broker's own statement. Questions about a specific number? Get in touch.