Skip to main content

Methodology

Backtest

Every number on /backtest is derived from the calculations described below. The audit table at /backtest/m/<slug> exposes the inputs leg-by-leg, and the CSV download from that page is byte-identical to what was summed into the leaderboard number — paste it into a spreadsheet and the math should reconcile to four decimal places. For plain-English definitions of the terms used below, see the terminology page.

What the engine simulates

A copy investor strategy: on the day a manager files a 13F, buy the disclosed long-equity portfolio at that day's close, in the share counts the manager reported. Hold until the manager's next 13F lands, then rebalance into the new portfolio.

That gives us a chain of closed periods, each running from one disclosure date to the next. The leaderboard's per-horizon return is the geometric chain of those periods' returns.

Per-position leg return

For each holding that's priced on both rebalance dates:

leg_return = (entry_shares × split_ratio × exit_price - entry_shares × entry_price)
             / (entry_shares × entry_price)

Split ratio multiplies every corporate-action ratio (split or distribution) whose effective date falls strictly after entry and on-or-before exit. Yahoo's chart endpoint already returns split-adjusted closes, so when both the entry and exit observations came from Yahoo we use a ratio of 1 to avoid double-counting (the 2022 AMZN / GOOG 20-for-1 splits would otherwise produce 2000% period returns).

Positions without both entry and exit prices are excluded from the math. Today this is mostly puts and calls (options have no traded close from our equity feed), bonds, private credit, and the long tail of micro-caps Yahoo has dropped. The audit page shows excluded rows with is_valid = 0 and a reason ("no entry price" / "no exit price" / "filtered").

Per-period portfolio return

Dollar-add aggregation across the priced slice of one period:

period_return = (Σ exit_value - Σ entry_value) / Σ entry_value

This is the metric a copy investor who held the disclosed shares would have realized on the priceable portion. It's verifiable by addition — sum the leg-table's entry_value and exit_value columns filtered to is_valid = 1; the ratio matches the period return to four decimals.

The coverage column on the audit page reports the share of the manager's reported weight that contributed to the math. 100% means every disclosed equity position had observations; lower means some positions were skipped. Coverage is informational — the period return is computed on the priced slice as-is, not re-scaled.

One-position quarters: synthetic cash

A 13F never reports cash. When a manager's disclosure collapses to a single long-equity position, valuing that one stock as 100% of the portfolio overstates the bet — the manager has usually moved most of the book to cash or instruments a 13F doesn't show. For that one-position case only, we add a flat synthetic CASH leg so the quarter isn't treated as an all-in bet:

f = min(1, D / E)          // invested fraction
cash_weight = 1 - f         // earns a flat 0%
  D = value of the single disclosed position
  E = value of last quarter's holdings, repriced to this date

The anchor E is the carried-forward value of the prior disclosure, so the rule is self-gating: a manager who genuinely holds the same one position quarter after quarter has E ≈ D and gets no cash, while a portfolio that collapsed from many names to one gets diluted toward what it was actually worth. It applies only when N = 1 and a prior quarter exists; every multi-position quarter (N ≥ 2) uses the renormalized scheme above, unchanged. The cash row is shown explicitly on the audit page and is excluded from the Top-5 slice.

Top-5 conviction slice

The 3Y Top 5 column on the leaderboard answers a different question: would the manager's highest-conviction picks alone have outperformed the full disclosed portfolio?

For each period, restrict to the five priced legs with the highest entry $ value (ties broken by CUSIP ordinal for determinism). Apply the same dollar-add formula to that 5-leg slice. Periods with fewer than 5 priced legs contribute their full slate. The slate is re-picked at every rebalance — Druckenmiller's top 5 in Q1 2024 may share zero names with his top 5 in Q1 2026.

This is the same selection rule used by the per-quarter "Top 5" row on the audit page, so the chained leaderboard number is verifiable position-by-position against the per-period rows.

Horizon chain

Each horizon (Q / 1Y / 3Y / 5Y / All) is a geometric chain of the period returns whose exit date falls inside the trailing window:

horizon_return = Π (1 + period_return) - 1
                  for every period with exit_date in [as_of_date - H, as_of_date]

Honesty guard: 1Y / 3Y / 5Y are suppressed (rendered as "—") when the strategy's earliest entry was less than the horizon length before as_of_date. We refuse to label a short-history chain as a "1Y" return.

Reproducing the numbers

  1. Open /backtest/m/<slug> for the manager you want to audit.
  2. Click Download CSV to get every closed period's leg-level math.
  3. Filter on is_valid = 1. Sum entry_value and exit_value per period; the ratio is the period return.
  4. Geometrically chain the period returns whose period_exit_date falls inside your horizon window. That's the leaderboard number.
  5. Cross-check entry/exit prices independently via Yahoo, Google Finance (GOOGLEFINANCE), or your broker's historical data feed.

Known limitations

  • 13F filings are reported 45 days after quarter end. The "buy on disclosure" model uses the filing date, not the quarter-end date — that's the date a public observer could actually have copied the trade.
  • Short positions, options, and non-equity instruments are excluded from the math because they're not represented as long shares in the 13F (and where they are disclosed, we can't price them from an equity feed).
  • Dividends are not included in the period return. Returns are price-only. Adding total-return is a planned enhancement.
  • Foreign-listed positions are priced when Yahoo carries the ADR; otherwise excluded.