← Back to PortLens

Methodology

Last updated: September 28, 2026

This page explains how PortLens computes every number it shows you: where the data comes from, how often it refreshes, the formulas behind each metric, and — just as important — the known limitations. If a metric can mislead in an edge case, we say so here and, wherever possible, in the product itself.

Data sources

Market-data cache entries normally expire after 24 hours. If live providers fail, an expired entry may be used only while it is still close to the latest price its market has produced: for shares and ETFs, until more than two weekday sessions have closed since it was fetched, so a Friday close still serves across a weekend; for crypto, which trades continuously, up to 48 hours after it was fetched. Results use stored market data rather than live quotes, and saved scores keep the sources and dates used when they were calculated. Benchmark fallbacks that exclude dividends are labelled price-only, because excess return and alpha can appear higher than against a total-return benchmark. Fetch time is distinct from the last exchange close.

Analysis weights use each holding's share count multiplied by its current cached quote, with minor quote units converted to their major currency (GBp/GBX to GBP, ZAc to ZAR and ILA to ILS), then valued in US dollars. Exchange rates are sourced from the European Central Bank (ECB) euro reference rates retained by PortLens and refreshed daily. Cross rates such as GBP to USD are calculated by PortLens through the euro; they are not separately published ECB rates. An exchange rate is used only if it is at most one ECB publishing day old; weekends and ECB holidays don't count. Saved results show when they were last priced. Holdings without shares, a quote or a usable exchange rate are excluded from analysis and named with their reasons. Weights and scores describe the valued holdings only; if none can be valued, no analysis is shown. Competition and construction-board entries require every holding to be valued and are refused with the per-holding reasons otherwise. Individual holding values remain in their quote currency. These are reference valuations for information, not executable exchange prices or investment advice.

  • Prices & fundamentals: Financial Modeling Prep is the primary source for US-listed equities and ETFs (quotes, profiles, price history and sector or country weightings). Yahoo Finance is the fallback for international listings. Crypto prices come from CoinGecko.
  • Fund constituents: SEC N-PORT filings are checked weekly and can describe holdings several months earlier. Each source's holdings date is distinct from the day we fetched it. Funds whose constituent lists cannot be resolved contribute no underlying companies to scan look-through.
  • Benchmark: the S&P 500 total-return index (^SP500TR), so dividends are included. If only the price-only index is available as a fallback, benchmark returns understate the total return by roughly 1–2% per year.
  • Risk-free rate: the 1-Year US Treasury constant-maturity yield from the US Treasury daily par yield curve, refreshed daily. If Treasury is unreachable, we use the most recent stored value.
  • Factor data: daily Fama-French three-factor series (market, size, value) from the Ken French Data Library at Dartmouth, updated roughly monthly at the source.
  • Fund expense ratios: the SEC's Risk/Return Summary Data Sets, tagged from each fund's own prospectus and refreshed daily. We read the net figure (after any fee waiver the fund files) and fall back to the gross figure when a fund files no waiver. Funds that file no prospectus risk/return summary — unit investment trusts, commodity and crypto trusts, closed-end funds, business development companies and non-US listings — have no ratio here at all. We identify those from the SEC's own registers of fund share classes, so a fund is still recognised as a fund when a price feed calls it a stock.
  • 13F filings: featured-investor portfolios are sourced from SEC Form 13F disclosures from SEC EDGAR and refreshed quarterly, the day after each 13F filing deadline.

True Exposure (ETF look-through)

Each resolved ETF is expanded into its available underlying constituents. A constituent's effective weight is the ETF's weight in your portfolio multiplied by the stock's weight inside the ETF. Exposures to the same security identifier, held directly and through one or more funds, are summed into a single position. Separate share classes remain separate. This surfaces concentration that a plain holdings list can't show.

From the looked-through portfolio we compute effective holdings (the inverse Herfindahl index, 1 / Σw²: a portfolio of one 50% and two 25% positions behaves like ~2.7 equal positions, not 3), top-10 concentration, per-company fund counts, and the dominant sector.

Bonds and cash inside funds: when a fund's filing lists bonds, cash or derivatives, they appear by type (US Treasury, US government agencies, corporate bonds, foreign governments, municipal bonds, cash and equivalents, derivatives and a few rarer types) and bonds count in geography by their own country. A fund made mostly of other funds, such as a target-date fund, has those funds opened up one level, so their shares, bonds and cash show the same way; a fund inside them shows as funds. A corporate bond whose issuer code matches a listed company counts with that company, shares and bonds added together; the rest show as corporate bonds. A filing's negative lines, such as shorts, are left out. These groups are not companies, so top-ten concentration, the largest single company and effective holdings leave the bond and cash groups out, and bonds do not yet enter the portfolio score. There is no fixed-income analysis such as yield or duration.

Attention thresholds: orange emphasis appears when one company reaches 10%, one sector reaches 40%, the top ten positions reach 60%, or effective holdings fall to 10 or fewer. The 10% company threshold borrows a regulatory reference point: Article 52(2) of the UCITS Directive lets Member States raise the ordinary 5% same-issuer limit to no more than 10%, subject to a separate 40% aggregate rule. That rule governs UCITS funds, not personal portfolios. The 60% top-ten threshold is intentionally well above the S&P 500's 36.4% top-ten weight (accessed July 29, 2026). The 40% sector and 10 effective-holdings cutoffs are transparent, round-number PortLens design choices rather than regulatory limits or fitted optima. Crossing any threshold changes visual emphasis only; it is not a risk grade, suitability assessment, or recommendation to trade.

Limitation: when the fund's SEC N-PORT filing resolves, look-through uses every constituent that real source publishes. Coverage is still bounded by what each fund publishes: funds we can't resolve — most often international ETFs — contribute nothing, crypto remains its own terminal position. The look-through coverage ratio counts a fund as covered when a constituent list is available, even if that list is partial. It is an upper bound on coverage, not proof of completeness. Top-ten weights use the whole portfolio as their denominator; omitted exposure can understate them. Effective holdings measures each holding against the money outside the bond and cash groups (never less than those holdings' own total), so an unreported tail contributes nothing to the sum of squared weights and can make the portfolio appear more diversified. A historical article that normalizes its mapped weights states that different denominator explicitly.

Pairwise ETF overlap

Overlap by weight is the sum of the smaller of the two fund weights for every shared security identifier: Σ min(wA, wB). Weights are fractions; the result is displayed as a percentage. Published weights are not scaled to make an incomplete list add up to 100%. The shared-holdings count covers all matches; the table shows only the ten largest by overlapping weight.

Each fund keeps its own holdings date. The pair is anchored to the older date only when both are known, and mismatched dates are stated. Thin lists, unresolved data and incompatible cross-source identifiers can prevent a numerical comparison. Two confirmed share classes of the same fund are identified before arithmetic. The qualitative overlap bands are PortLens labels, not a recommendation about holding either fund.

Weighted expense ratio

Each fund's published annual expense ratio is weighted by that position's value and averaged across the portfolio. Shares you hold directly carry no fund fee, so they enter the average at zero — that is their real cost, not a missing number.

Funds with no published ratio are left out of the average entirely and named on the card, never counted as free: a zero there would understate what you pay. The average is therefore computed over the covered part of your portfolio, and the scan states what share of your money that is. Where the uncovered part is large, the figure describes less of your portfolio than it appears to, so the card says so.

The weighted figure, the holdings it covers and the ones it excludes are free, with no account needed. The per-holding split — what each fund you hold costs on its own — is part of Pro.

Risk & return metrics

  • Portfolio return: buy-and-hold over the trailing lookback window (one year by default), ending at each holding's last cached close. Position weights derived from your share counts and current prices describe the portfolio as it stands today, so we roll each holding back by its own price change to recover what it was worth at the start of the window, then measure the return on those starting amounts. Weighting by today's values instead would let a holding that doubled dominate a window it only finished large in — look-ahead bias. We require at least ~180 days of price history.
  • Beta: the weighted average of per-holding betas. For most holdings the per-holding beta is the figure our data provider publishes in the security's profile — Financial Modeling Prep's for US listings, Yahoo Finance's for international ones — not one we compute. When Yahoo serves a listing without a published beta, we compute one from price history as covariance with the S&P 500 total-return index divided by market variance, requiring at least 30 return observations; crypto betas are always computed this way, using weekly sampling to correct the timestamp mismatch between 24/7 crypto closes and 4pm-ET equity closes. Holdings whose beta can't be established by any of these routes are excluded and the remaining weights renormalized — not silently defaulted. If no holding has an establishable beta, the portfolio calculation falls back to the market default beta of 1.0 rather than failing entirely.
  • Treynor ratio: excess return over the risk-free rate divided by beta. Below a beta of 0.1 the ratio is mathematically unstable, so we treat it as undefined and score that component neutrally. For those below-threshold betas, the scan results and competition leaderboards show a dash instead of a figure, while Insights displays the stored sentinel as 0.000.
  • Jensen's alpha: the return above what CAPM predicts for your beta — Rp − Rf − β(Rm − Rf). Well defined at any beta, which is why competitions rank on it (see below).
  • Diversification score (0–10): five weighted components — holdings count, sector spread, industry spread, look-through concentration, and geography. Spread components use weight-based effective counts (1 / Σw²) computed on the looked-through portfolio, so ten tech stocks don't count as ten sources of diversification.
  • Overall score: 40% risk-adjusted return (normalized Treynor) + 40% diversification + 20% excess return versus the benchmark. These are transparent product-design weights, not weights fitted to historical returns or claimed to be optimal. Risk-adjusted return and portfolio structure receive equal weight so neither recent performance nor diversification dominates the result. Raw excess return receives half as much weight because short-term market exposure and luck can influence it, and performance is already represented in the Treynor component. Beta is shown as context rather than scored because higher or lower market sensitivity is not inherently better. The same weights apply to every portfolio; they are not tailored to your circumstances or objectives.
  • Value at Risk: daily VaR is the historical 5th percentile of your portfolio's actual daily returns; the annual figure comes from a lognormal model calibrated to those returns. Both need at least 30 days of aligned history.
  • Max drawdown: the deepest peak-to-trough fall of your portfolio's combined buy-and-hold path over the trailing year, on calendar dates the included holdings share. Today's weights are rolled back to the start of the measured window from each holding's price change, then allowed to drift rather than being reset daily. The figure is measured on the portfolio, not averaged from your holdings' individual falls, which happen on different days. Exclusion of holdings without enough shared price history is bounded at half the measurable weight; every exclusion is named on the card and the remaining weights are renormalized. Beyond that bound, the card states the shorter period it covers rather than calling it a one-year figure, and below roughly six months of shared history no figure is shown: a maximum measured over a short window can only understate the real fall.

Return projections

Projections run five independent models rather than one blended forecast, so you can see where they disagree:

  • CAPM: risk-free rate plus your portfolio beta times a 5.5% equity risk premium.
  • Historical average: the trailing geometric annualized return of your actual holdings, up to five years.
  • Monte Carlo: 10,000 simulations built by block-bootstrapping your portfolio's real daily return history in 20-day blocks — resampling what actually happened, including fat tails, rather than assuming a normal distribution.
  • Fama-French three-factor: an OLS regression of your daily excess returns on the market, size, and value factors (minimum 60 overlapping days), with expected return built from the estimated loadings and live factor premia. When factor data or history is insufficient, a clearly labeled heuristic approximation is used instead.
  • Macro: an earnings-yield build-up (E/P plus expected inflation from the US Treasury 10-year par yield minus the real yield on the same date), applied to the equity sleeve of your portfolio and levered by its beta. BEA quarterly real GDP growth is shown as context, not added to the projection.

This product uses the Bureau of Economic Analysis (BEA) Data API but is not endorsed or certified by BEA.

Uncertainty bands on all models are 95% lognormal intervals. Projections are estimates with wide error bars, not predictions — see Disclosures for how to read them.

Competition scoring

The two competitions rank on different metrics, and scores on both refresh daily at 22:00 UTC. The Alpha Cup ranks by Jensen's alpha (Treynor is displayed alongside it, but alpha is the sort key because it stays well defined for low-beta portfolios). Your holdings and weights freeze the moment you register, so edits afterwards can't game the result. Every entry is scored over the same date window, using the same benchmark and risk-free rate, and the ranking is frozen when the Cup ends.

Portfolio Rankings ranks by portfolio construction quality on a 0–100 scale: concentration, the effective number of holdings, sector and geographic spread, and hidden look-through overlap. It is computed from how a portfolio is built and reads no price history, so it needs no measurement window — there is nothing to wait out and nothing a late reshuffle can flatter. The board is permanent: it never resets, never ends, and nothing is archived. No performance figure appears on it — no alpha, no Treynor, no return — and it awards no prize; every award belongs to the Alpha Cup. You appear only after you join it, and leaving takes you off it.

Featured investors (13F portfolios)

Featured portfolios (Berkshire Hathaway, Pershing Square, Appaloosa, Himalaya Capital, TCI) are rebuilt quarterly from each manager's latest SEC Form 13F filing. 13F filings disclose only long US-listed equity positions — shorts, options, cash, and non-US holdings are invisible — and positions we cannot price against current market data are skipped. Values shown apply current prices to disclosed share counts, so they differ from filing-date values.

Known limitations

  • ETF look-through coverage is strongest for US large-cap funds and weakest for international ETFs; the coverage ratio shown on every scan is the honest denominator.
  • Metrics need price history: new listings and thinly traded assets can fall below the minimum-observation thresholds and are excluded from the affected metric rather than guessed.
  • All analytics are computed from publicly available market data. Nothing here accounts for your taxes, fees, or personal circumstances.

Questions

PortLens is built by Finsight Labs Ltd. If you think a number is wrong — or a limitation isn't disclosed clearly enough — email support@finsightlabs.co. See also About and Disclosures.

Finsight Labs Ltd · Registered in England and Wales, Company No. 16941446 · Registered office: 124 City Road, London, EC1V 2NX, United Kingdom