Evidence first
Prices, FX rates, exact share classes and dated ETF snapshots remain traceable.
Calculation methodology · 1 October 2026
TrustPortfolio has two calculation flows: a free browser-local allocation builder using supplied holdings, and a private founder Router using connected-account evidence. Both keep unknown exposure visible. Neither predicts returns or executes a trade.
Free builder
Select ETFs from your supplied holdings CSV and set company targets as percentages of the whole proposed portfolio. The builder calculates non-negative ETF allocation weights totalling 100%, subject to ETF maximums and an optional sector limit.
company exposure (%) = Σ ETF allocation fraction × supplied company weight (%)
objective = Σ company target error² + sector penalty × Σ sector drift²
Errors and drift are measured in percentage points. Sector drift compares the result with an equal-weight mix of your selected ETFs, including unknown sector exposure. This comparison is not a diversification recommendation and may itself violate your limits.
The deterministic convex calculation reports its numerical optimality tolerance and remaining objective gap. A certified result is optimal for the stated objective within that tolerance; it can still miss the requested company percentages. A result without an optimality certificate is labelled accordingly. Infeasible limits produce no allocation.
Unknown company weights stay unresolved. Unclassified weight counts conservatively against every sector limit, including a sector absent from the known rows. Missing classifications can therefore make a limit impossible to prove. The result shows requested and calculated targets, all supplied company and sector exposures, unknown weights, dates and source labels.
CSV identifiers, dates and source labels are user-supplied and unverified. The builder has no included catalogue of current ETF holdings. Its example and template use fictional companies and funds. Calculations run in the current browser tab without uploading inputs or accessing private founder records.
These are continuous percentages. Prices, whole ETF units, transaction costs, taxes, liquidity, broker availability and future returns are not modelled. A mathematical optimum describes the input objective, not investment quality or suitability.
The sections below describe the separate authenticated Router. It uses one selected brokerage account, reviewed holdings evidence and quoted ETF units to calculate a private route toward one company-exposure target.
Prices, FX rates, exact share classes and dated ETF snapshots remain traceable.
The engine measures the permitted range before calculating a route.
Unresolved holdings stay in the full denominator and are never redistributed.
01
For company i and ETF j, A[i,j] is the verified company weight in the exact, dated ETF snapshot. Cash, derivatives, other funds, unresolved securities and unknown residual each remain separate rows.
| Synthetic row | ETF 1 | ETF 2 | ETF 3 |
|---|---|---|---|
| Company A | 8.0% | 1.0% | 0.0% |
| Company B | 2.0% | 6.0% | 3.0% |
| Unknown | 0.4% | 1.2% | 0.7% |
company value[i] = direct company value[i] + Σ ETF value[j] × A[i,j]
company weight[i] = company value[i] ÷ total portfolio value
The total portfolio denominator includes mapped companies, cash, unsupported ETFs, unresolved securities, special products and unknown exposure.
02
The engine first calculates the minimum and maximum target-company exposure permitted by the selected funding mode and constraints. These include cash, locked ETFs, buy and sell permissions, owned units, maximum turnover, maximum trades, minimum trade value, cash remainder and ETF weight caps.
A target outside that range is labelled unreachable. The result reports the closest feasible exposure and the first binding constraint; it does not disguise the miss as a successful target.
03
Let v[j] be the current ETF value, q[j] the verified unit price, u[j] the proposed signed units, d[i] direct company exposure, P current portfolio value and C new cash.
x[j] = u[j] × q[j]
post-route ETF value[j] = v[j] + x[j]
post-route portfolio value = P + C − estimated transaction costs
post-route company weight[i] = (d[i] + Σ A[i,j] × post-route ETF value[j]) ÷ post-route portfolio value
No ETF position may fall below zero. Cash-only routes buy within available cash; rotation routes keep net ETF spend near zero after costs; mixed routes combine cash with bounded sales.
04
The engine compares candidates in a fixed order. It does not collapse the decision into an unexplained weighted score.
05
The continuous result is a mathematical reference, not an executable route. The engine rounds every proposed ETF-unit change into a bounded neighbourhood, removes candidates that violate constraints, then compares the remaining candidates using the same lexicographic order.
The interface shows continuous and whole-unit results separately. Where the bounded search cannot prove a global optimum, the wording remains: closest feasible route under your constraints.
06
Portfolio-price timestamps and ETF-holdings dates are displayed separately. Missing prices, unacceptable snapshot age, unresolved target identity, incomplete valuation or excessive unknown exposure can make a result approximate or withhold its trade list.
TrustPortfolio has no trading permission, broker order endpoint or money-movement operation. A saved rotation receipt records the inputs and evidence used for a private calculation; the founder decides and acts elsewhere.
This public explanation contains no real portfolio values, source files or route calculations. Founder data and receipts remain inside the authenticated private boundary.