Skip to content

PerfectPerf · Method & people

How PerfectPerf compares a position with an ETF

The investment, fees, partial-sale allocation and dates behind a position comparison, with its assumptions and limits made explicit.

Start with the scope

PerfectPerf is being built for IBKR investors who hold individual stocks, including investors who also hold ETFs. The application’s current calculation work is at the position level. The free Audit is still in preparation; the public site does not accept your broker history.

A position comparison asks what a passive ETF investment would have produced under the stated investment and sale rules. It does not establish the performance of your whole portfolio, including cash and all external deposits and withdrawals. Whole-portfolio analysis is future application scope.

Importing a statement is not the same as reconstructing or reconciling its positions. Missing history, ambiguous events and unknown costs remain limitations even when some quantities match an IBKR statement.

Three different questions

Open part of a position
The shares still held, with the acquisition costs and income allocated to those shares. Their return is separate from the return on shares already sold.
Closed part of a position
The shares already sold, with their allocated costs and income. A partial sale creates a closed part while the remaining shares stay open; it does not mean the entire holding period has ended.
Purchase buy-and-hold simulation
A different hypothetical question: what if one original purchase had been kept through the valuation date, with known purchase fees included and gross dividends reinvested? Later real sales and later purchases do not change this simulation. It is not the actual return of the open part, and it is not the partial-sale comparison.

Fees and partial sales

Purchase cost includes known purchase fees. Sale proceeds are net of known sale fees. The position calculation allocates the average acquisition cost proportionally to the shares sold and the shares remaining. This is a performance convention, not a tax-lot calculation.

The following example is entirely synthetic, in USD, with no dividends, taxes, FX, transfers or corporate actions. It is an arithmetic illustration, not a historical market result.

  1. On 2 January 2026, buy 100 shares at $10 and pay a $10 purchase fee: total cost $1,010.
  2. On 2 February 2026, sell 40 shares at $12 and pay a $2 sale fee: net proceeds $478.
  3. On 2 March 2026, value the remaining 60 shares at $13: remaining value $780.
Allocation and cumulative return in the synthetic example
MeasureClosed partOpen part
Shares40 sold60 held
Allocated cost$1,010 × 40% = $404$1,010 × 60% = $606
Proceeds / value$478 net proceeds$780 market value
Gain$478 − $404 = $74$780 − $606 = $174
Return$74 ÷ $404 = 18.3168%$174 ÷ $606 = 28.7129%

Displayed percentages are rounded; calculations retain more precision. The closed return ends at the sale. The open return uses the stated valuation date. Neither is silently annualized, and the two percentages cannot simply be added to obtain a portfolio return.

What the ETF comparison matches

The ETF scenario uses the same total purchase budget and known purchase fee. In the example, $1,010 is committed and $1,000 buys ETF units after the $10 fee. When 40% of the real shares are sold, 40% of the ETF units are sold too, with the same known $2 sale fee. The sale proceeds can differ because the prices can differ.

If the synthetic ETF has the same $10, $12 and $13 prices on the same dates, its open and closed returns match the stock: the difference is zero percentage points. This checks the convention; it does not show that either investment outperforms the other.

A 28.71% return minus a 20% benchmark return is an advantage of 8.71 percentage points, not “8.71% more money.” The comparison subtracts cumulative percentage returns with their stated cost bases and dates.

The development Positions comparison uses an accumulating ETF reference. Actual received dividends and withholding are included in the position’s attributed income; they are not silently replaced with gross reinvestment. The separate purchase buy-and-hold simulation uses gross dividend reinvestment and answers a different question.

Dates, prices and unavailable values

For the development comparison, an ETF transaction uses the first available closing price on or after the operation date, within seven calendar days. The actual execution date and reference price date can therefore differ. Open values use a common available closing date; closed values use the qualified sale observations. A closing price is not a guarantee of an executable trade price.

When reference FX is needed, the calculation first seeks that day’s rate, then nearby dates up to three days away, checking the earlier day before the later day at each distance. Nearby observations are identified as approximate. A reference conversion is an analytical presentation and is not an FX transaction executed by the investor.

Missing cost, missing prices, uncertain event treatment or unavailable exchange rates can leave a return or difference unavailable. An unavailable value is not a zero return. A supported ETF return may remain visible when the actual return is unknown, but the difference must then remain unavailable.

Qualified internal transfers carry the existing ETF allocation. Cashless splits change the real share count without creating a fresh ETF investment. Other events require qualified treatment; listing a corporate-action family does not establish support for every instance.

Read each example’s assumptions

The public educational scenarios use synthetic prices and fixed dates. They do not read investor accounts or request live market data. Lines between stated observations illustrate the scenario rather than observed daily prices.

The older landing-page example is separate: it combines hypothetical trades with historical closing prices and gross cash dividends frozen at 4 September 2026. Its illustrative SPY, URTH and QQQ choices, cash-flow assumptions and portfolio figures do not establish current application capabilities. That example does not demonstrate transfers or splits and is not a customer result.

Time-weighted and money-weighted returns answer different portfolio-level questions about investment performance and cash-flow timing. A set of individual position comparisons does not by itself produce either measure for the whole account.

How to inspect or challenge an explanation

PerfectPerf publishes this method. The numerical example above can be reproduced from the stated quantities, costs and prices. It describes the calculation convention, not an investment recommendation or a claim of complete historical coverage.

For a correction or a question about an assumption, use the contact page. You can also read who is behind PerfectPerf or request the one-time launch notification.