Match Factor Exposure
Match Factor Exposure replicates a target fund's factor profile with a long-only basket of ETFs. It returns the candidate weights that minimize squared distance between the target's and the basket's factor betas, and reports tracking-error diagnostics so you can see how faithful the replica is.
Open Match Factor Exposure →What it answers
- How would I clone this fund with simpler ETFs? The weights table is the long-only convex combination of your candidate basket that best reproduces the target's factor loadings.
- How close is the match? Per-factor target vs achieved beta, beta distance, and return-space tracking error quantify how faithful the replica is over the estimation window.
- Does the basket fully explain the fund? Active alpha (the alpha the target carries that the candidate basket does not) and active R-squared show what the basket cannot reach.
Test a larger replacement basket
Free users can run smaller candidate sets. Pro raises the candidate limit for broader factor-matched replacement-basket research.
How it works
The tool fetches the target ticker and every candidate ticker, lines them up against the same factor matrix and risk-free series on a single shared sample, runs one OLS per leg, and then solves a constrained least-squares problem for the weights that minimize the squared difference between the target's beta vector and the basket's implied beta vector. Constraints are long-only with the weights summing to one.
When two candidates have nearly identical factor profiles, the minimum is not unique. The tool detects this case and applies a deterministic tie-breaker that prefers the basket closest to equal weights while preserving the optimal beta distance, so repeat runs on the same inputs produce the same weights.
Inputs
- Target ticker. One reference fund or ETF.
- Candidate tickers. Two to twenty-five tickers (Pro tier) or up to five (free tier). Duplicates and overlap with the target are rejected. Synthetic tickers and uploaded series are not supported in v1.
- Factor model. CAPM, Fama-French 3, Carhart 4, Fama-French 5, FF5 plus momentum, AQR, q-factor, fixed income.
- Frequency. Daily, monthly, or annual. Lower frequencies smooth idiosyncratic noise but reduce the sample size.
- Window. Start and end date for the shared sample.
Reading the result
- Solution weights. Long-only weights in the simplex (each in [0, 1], sum to 1). Sorted by weight descending.
- Beta distance. The L2 norm of the target-minus-achieved factor beta vector. Smaller is closer.
- Per-factor table. Target beta and achieved beta with standard errors, plus the difference. Achieved-beta standard errors propagate per-leg variances under an independence assumption between candidates. When candidates overlap heavily (such as VTI and VOO), this can understate uncertainty because covariance between candidate estimates is not included.
- Tracking error (annualized). Standard deviation of the difference between target and reconstructed return series, scaled by the square root of annualization.
- Active alpha (annualized). The factor-model alpha differential, computed as the target's regression alpha minus the weighted sum of candidate alphas, then annualized. This is not a return-on-return regression intercept.
- Active R-squared. One minus the variance of (target minus reconstructed) over the variance of target. Bounds are negative infinity to one. Negative values mean the basket adds variance versus simply quoting the target's mean return; the UI reports the raw value rather than clamping so you can spot a poor match clearly.
Limits and caveats
- Beta matching alone ignores idiosyncratic variance. Always check the tracking-error chart, not just beta distance.
- With near-collinear candidates (for example, VTI and VOO), many weight vectors achieve essentially the same beta distance. The tie-breaker stabilizes the answer, but the warning callout will tell you when this is happening.
- v1 is long-only with weights summing to one. Cash slack and long-short modes are not supported yet.
- Free tier supports up to five candidates and ten runs per day. Pro supports up to twenty-five candidates with no daily cap.