Help · Methodology

How the optimizer scores candidates

From RangefinderInvest's built-in help · applies to version 0.49.3

Start by choosing what the optimizer should favor:

  • Balanced risk and return: Sortino plus maximum drawdown; the default.
  • Favor growth: extra weight on CAGR with downside efficiency.
  • Limit downside: drawdown depth and duration matter more.
  • Stress resilience: worst rolling five-year return and drawdown pain.

Worst rolling five-year return needs a complete 5×365.25-day training window. Recent and Stronger checks train on four years, and Through-cycle's exact five calendar years can fall just short of that elapsed-time requirement. Whether they do depends on how many leap days the five happen to contain. When they don't cover it the page warns that the pillar is unavailable; Ulcer remains active in the preset, or use custom dates slightly wider than five years.

These are plain-language presets over the existing composite. Under Advanced, every active metric is percentile-ranked within the candidate set, flipped where lower is better, and blended by its exact weight. Ranks keep one raw outlier from dominating the blend.

Two kinds of metric

  • Window metrics: Sortino, Sharpe, CAGR, drawdown, Ulcer, worst rolling 5-year, and recovery time are measured over the train window. See what each one means.
  • Consistency metrics: hit rate, information ratio, and excess CAGR are measured against the slice's benchmark over all shared history, because "beats its index most years" is a longer-run claim than any window. The benchmark is the slice's override, the category's index from Settings, or the fund in the slice's largest slot ("beat what I own"). Only years both series actually measured are compared: a fund whose prices stop mid-year has no comparable year there, so that year is left out rather than scored against the index's full one.

These metrics are read at two different scales, and the ranked table says which is which. Model CAGR, Model Max DD and Model Sortino are the WHOLE model re-run with only this slot swapped to that fund, so a candidate is measured in the context it would live in, which is why a small slice's numbers move only a little. Age, ER and the Beat column are the fund's own. The cost-versus-risk labels read the model-scale differences at that slice's own weight, so a real difference in a 5% slice is not dismissed as rounding.

Rows shown but not scored

Two rows can appear with no score and no Δ, because scoring them against the others would compare different things:

  • Short history. A fund only carries weight over part of the train window. This is measured on the fund, not on the model's curve. A model keeps running when one fund is missing, by renormalizing onto the rest, so the curve alone never reveals it. A shorter span is usually a kinder one, and left in the ranking it would out-score the funds that sat through the early drawdowns and suppress every replacement.
  • Reference. With a consistency criterion active, the fund you already hold cannot beat itself, so it has no hit rate while its challengers do. It is shown with its metrics as a reference point. Set a benchmark index for that slice to score it alongside the rest.

A fund whose quotes stop before the train window ends is not offered at all. Its slot cannot be refilled at a dead price, so the model quietly runs without it and reports a shallower drawdown than it lived through. The ranked table's Last priced column shows the evidence.

Because consistency metrics and the hit-rate gate use all shared history, they can include dates in the later evaluation period. When one participates in selection, Optimize labels the evaluation comparison as corroboration rather than strict out-of-sample verification. The default Balanced objective and gate-off setup use only the training window.

A whole-model run needs at least one training-window metric. Consistency-only criteria can refine each slot's shortlist, but they do not score the combined model, so the page stops instead of proposing an arbitrary alphabetical winner.

Cost is never a pillar. Returns are computed from adjusted closes, which are already net of fees. Scoring the expense ratio again would double-count it (see the Screener score, which applies the same guard).

From scores to a proposal

Advanced also contains the optional hit-rate gate, exact benchmark overrides, and Candidates per slot. Depth remains visible in the main path: Fast takes each slot's top distinct candidate independently; Thorough scores whole-model combinations of each slot's top candidates (exhaustive when small, coordinate descent beyond roughly 2,000 combinations), so interactions between slots count.

The ranked single-slot table keeps the exact pillar breakdown, annual benchmark hit strip, and cost-versus-risk attribution (more efficient, spicier, cheaper, more defensive, and related labels). Those explanations do not change the score. Slots in one slice always end with distinct funds.