Methodology
How portfolios, fund lists and statistics are built. The aim is to be objective, reproducible and neutral.
1. Model portfolios
Each model portfolio is a set of target weights across building blocks (asset groups) such as “global all-world equity” or “global aggregate bonds”. All portfolios are published on the home page for everyone. Filters only hide or show portfolios by objective attributes: equity %, number of funds, share class, currency hedging, issuer, ESG and add-ons. There is no scoring, no “best” and no “recommended for you”.
2. Fund universe and data
- 133 hand-curated, Ireland- or Luxembourg-domiciled UCITS ETFs, plus physical gold ETCs (debt securities backed by gold, not UCITS funds, clearly labelled).
- Per fund: name, ISIN, issuer, TER, accumulating/distributing, hedged currency, replication, domicile, approximate fund size with an as-of date, inception date and listings. Every fund links to the document the figures came from: an issuer product page or issuer factsheet.
- Primary sources are issuer pages and factsheets. Vanguard and UBS are covered in depth. iShares, Xtrackers (DWS), Amundi, HSBC, SPDR (State Street) and Invesco are included as alternatives for the same building blocks (broad index funds only, no thematic or sector funds). Funds under about USD 100m were left out. Individual issuer pages were looked up by hand for verification; no screener or database was bulk-downloaded. Ticker/exchange data was cross-checked against the Bogleheads list of non-US domiciled ETFs.
- Curation date: 2026-10-21. TERs and fund sizes change. TODO: re-check quarterly against issuer pages.
3. Neutral fund ranking
Within each building block, eligible funds are listed by TER (ascending), then fund size (USD equivalent, descending), then inception date (older first). Affiliate status never affects the order or eligibility. Listing a fund first is not a recommendation. Lower cost or larger size does not guarantee better results, and tracking difference, spreads, taxes and broker availability also matter.
Eligibility rules (objective)
- Bonds, “hedged to base”: global aggregate bond share classes hedged to the selected base currency. For government/short-term bonds: hedged to or denominated in the base currency. If none exists in our list (for example SGD), USD options are shown with an explicit currency-risk note.
- Equity hedging: unhedged by default. “Hedged” shows share classes hedged to the base currency (e.g. UBS hCHF).
- Share class: accumulating or distributing. Gold ETCs pay no income and fit either.
- ESG: “ESG equity only” keeps ESG-screened equity funds. Bond, gold and commodity slots are not affected.
- Issuer: an optional filter (e.g. Vanguard + UBS). If no fund from the chosen issuers covers a building block, the portfolio is shown as having no match.
Base currency, fund currency and trading currency
Three different currencies are easy to mix up:
- Base currency (the USD/EUR/GBP/SGD/CHF switch): the currency you measure your wealth in. It changes the historical statistics, because currency moves against your base currency are part of your return. It decides which bond (and, if you choose, equity) share classes count as “hedged to base”. It also decides which exchange line we show first.
- Fund (share-class) currency: the currency the fund's NAV is reported in, for example USD for Vanguard FTSE All-World. It is an accounting choice. It does not tell you your currency exposure, which comes from the fund's holdings and any hedging.
- Trading currency: the currency of one exchange line. The same ETF often trades on several exchanges in several currencies, for example VWRA in CHF on SIX, VWCE in EUR on Xetra, and VWRA in USD and VWRP in GBP in London. These are all the same fund with the same holdings and costs. Buying the line in your own currency mainly avoids a currency conversion at your broker. It does not hedge anything.
When you pick a base currency, every list puts first the line that trades in that currency: SIX for CHF, Xetra (then other euro venues) for EUR, London for GBP and USD, SGX for SGD. Only two ETFs in our list trade on SGX (Xtrackers MSCI World 1C and S&P 500 4C, in SGD). For every other ETF we show the London USD line for SGD. ETFs with no line in the base currency stay listed and visible, are marked (for example “no CHF listing, trades in USD on SIX”), and appear after the ETFs that have one. Within each of these two tiers the neutral order (TER, then size, then age) applies. With “Equity: hedged to base” or “Bonds: hedged to base”, only share classes hedged to the base currency (for example UBS hCHF or SPDR CHF Hedged) are eligible.
Sources: SIX, Xetra and London lines and their trading currencies are taken from each exchange's own public reference data (SIX ETF/ETP explorer data, Deutsche Börse's list of Xetra tradable instruments, London Stock Exchange instrument pages), checked 2026-10-21 with scripts/fetch_listings.py. Borsa Italiana and Euronext lines come from issuer pages. Brokers may route the same order differently, so confirm the exact line with your broker.
4. Risk statistics
- Source: Yahoo Finance daily adjusted close prices via the open-source yfinance library, downloaded at build time. Only derived statistics are published.
- Method: Month-end prices, converted to the base currency with Yahoo FX month-end rates; portfolios rebalanced to target weights every month; no trading costs or taxes; ETF TERs are already reflected in ETF prices.
- Window: for each portfolio and base currency, the longest period over which all of its proxies have data (ending 2026-09-30). A common window (where every portfolio except the multi-asset ones has data: USD from 2019-03, EUR from 2017-12, GBP from 2017-12, SGD from 2019-03, CHF from 2018-05) is shown on each portfolio page for like-for-like comparison.
- Metrics: CAGR; annualised volatility (standard deviation of monthly returns × √12); maximum drawdown measured on month-end values (intra-month falls were deeper); worst/best full calendar year.
- Proxies: one long-history ETF per building block (below). Statistics describe the proxy, not every fund in the slot. Bond proxies are the currency-hedged share class in each base currency, where one exists. Where we had to use a fund outside our list, or an unhedged substitute, the portfolio page says so.
- Prices are not published. The site contains only derived statistics. Raw prices are used once at build time and are not redistributed.
- Calculation script:
scripts/compute_stats.py, run before each build.
| Building block | Proxy (by base currency) |
|---|---|
| All-world equity | All bases: iShares MSCI ACWI UCITS ETF (USD, LSE) ISAC.L |
| Developed world | All bases: iShares Core MSCI World UCITS ETF (USD, LSE) IWDA.L |
| Emerging markets | All bases: Vanguard FTSE Emerging Markets UCITS ETF Dist (USD, LSE), dividends reinvested VDEM.L |
| US equity | All bases: iShares Core S&P 500 UCITS ETF (USD, LSE) CSPX.L |
| Europe equity | All bases: iShares Core MSCI Europe UCITS ETF (EUR, Euronext Amsterdam) IMAE.AS |
| Small cap | All bases: SPDR MSCI World Small Cap UCITS ETF (EUR, Xetra) ZPRS.DE |
| Global bonds | USD: iShares Core Global Aggregate Bond USD Hedged (LSE) AGGU.L EUR: iShares Core Global Aggregate Bond EUR Hedged (Xetra) EUNA.DE GBP: iShares Core Global Aggregate Bond GBP Hedged Dist (LSE), income reinvested AGBP.L CHF: SPDR Bloomberg Global Aggregate Bond CHF Hedged (SIX) GLAC.SW SGD: iShares Core Global Aggregate Bond USD Hedged, converted to SGD AGGU.LNo listed SGD-hedged share class in our list: SGD figures use the USD-hedged class, so they include USD/SGD currency moves. |
| Govt / short-term | USD: iShares $ Treasury Bond 0-1yr (LSE) IB01.L EUR: Proxy: iShares Euro Government Bond 1-3yr UCITS ETF (not in the fund list) IBGS.ASProxy fund outside the curated list. GBP: Proxy: iShares UK Gilts 0-5yr UCITS ETF (not in the fund list) IGLS.LProxy fund outside the curated list. CHF: Proxy: iShares Swiss Domestic Government Bond 0-3 UCITS ETF (not in the fund list) CSBGC3.SWProxy fund outside the curated list. SGD: iShares $ Treasury Bond 0-1yr, converted to SGD IB01.LNo SGD short-term UCITS ETF in our list: SGD figures use a USD T-bill ETF, so they include USD/SGD currency moves. |
| Gold | All bases: iShares Physical Gold ETC (USD, LSE) IGLN.L |
| Commodities | All bases: UBS CMCI Composite SF UCITS ETF USD acc (SIX) CCUSAS.SW |
| Multi-asset 60% equity | All bases: Vanguard LifeStrategy 60% Equity UCITS ETF Acc (EUR, Xetra) V60A.DE |
| Multi-asset 80% equity | All bases: Vanguard LifeStrategy 80% Equity UCITS ETF Acc (EUR, Xetra) V80A.DE |
5. Equity share and age: general background
This section is general education. It is not an input to anything on this site and does not select funds. Textbooks and target-date funds often reduce equity as a planned withdrawal date approaches (a “glidepath”). One well-known rule of thumb is “equity % ≈ 100 or 110 minus age”. Such rules ignore income stability, other assets, pensions, goals and personal tolerance for losses, so they are crude.
| Illustrative age | “100 − age” rule | “110 − age” rule |
|---|---|---|
| 25 | 75% equity | 85% equity |
| 35 | 65% equity | 75% equity |
| 45 | 55% equity | 65% equity |
| 55 | 45% equity | 55% equity |
| 65 | 35% equity | 45% equity |
| 75 | 25% equity | 35% equity |
Illustration of generic rules of thumb only. Not a recommendation for anyone.
6. Known limitations
- Bond histories in hedged UCITS form start in late 2017 to 2018, so windows for portfolios with bonds are about 7–9 years and include only a few market regimes.
- Multi-asset (LifeStrategy UCITS ETF) history starts in December 2020.
- Yahoo Finance data can contain errors. The script flags any month with a move larger than 35% for review.
- No bid-ask spread data (no free licensable source); fund size is used as a rough proxy for liquidity.
- Tax treatment (withholding tax, reporting-fund status, estate tax) varies by residence and is not modelled.