Overview
Dynamic Scoring lets you rank funds by a weighted combination of any available metrics. You choose which metrics matter, how much weight each gets, and whether higher or lower values are better. The system normalizes all metrics to a common 0-1 scale, applies your weights, and produces a final score from 0 to 100.
This is a fully transparent, configurable scoring system. Every step is shown below so you can reproduce it in Excel if needed.
Step 1: Select Metrics and Weights
From the 15 available metrics (CAGR 1Y/3Y/5Y/10Y, Max DD 1Y/3Y, Sharpe, Sortino, Alpha, Beta, Info Ratio, Up Capture, Down Capture, Tracking Error, Win Rate), enable the ones you want and assign weights. Weights are entered as numbers (e.g. 33, 33, 34) and automatically normalized so they sum to 100%.
Example: 3-metric setup
CAGR 1Y: weight 40 | Sharpe: weight 30 | Alpha: weight 30
Normalized weights: 40/100 = 0.40, 30/100 = 0.30, 30/100 = 0.30
Step 2: Direction - Higher or Lower is Better
Each metric has a default direction. For example, higher CAGR is better (↑ Higher), while higher Max Drawdown means bigger loss so lower is better (↓ Lower). You can toggle this for any metric. The direction affects how the normalized value is oriented:
If direction = "Lower is better": scaled value = 1 - scaled value
This flip ensures that "good" always maps toward 1 and "bad" toward 0, regardless of whether the raw metric is naturally ascending or descending.
Step 3: Normalization (Scaling to 0-1)
Raw metrics have different units and ranges (CAGR in %, Beta around 0-2, Sharpe around -1 to 3). We normalize each metric to a 0-1 scale so they can be compared. Three methods are available:
3a. Min-Max Normalization
Takes the minimum and maximum values across all funds for that metric, and linearly maps the range to [0, 1]. The fund with the lowest value gets 0, the highest gets 1.
Example: CAGR 1Y for 3 funds
| Fund | Raw CAGR | Scaled (Higher=better) |
|---|---|---|
| Fund A | 8% | (8-5)/(15-5) = 0.30 |
| Fund B | 15% | (15-5)/(15-5) = 1.00 |
| Fund C | 5% | (5-5)/(15-5) = 0.00 |
Trade-off: Simple and intuitive. However, a single outlier (e.g. one fund with 50% CAGR) can compress all other funds into a narrow range near 0, making them hard to distinguish.
3b. Z-Score Normalization
clamped = clip z to [-3, +3]
scaled = (clamped + 3) / 6
Measures how many standard deviations each fund is from the group average. Values beyond ±3 standard deviations are clipped (capped), then the range [-3, +3] is mapped to [0, 1]. The mean maps to 0.5.
Example: Sharpe Ratio for 4 funds
Values: 0.5, 1.0, 1.2, 2.8 | Mean = 1.375, Std Dev = 0.84
| Fund | Raw Sharpe | Z-Score | Scaled |
|---|---|---|---|
| Fund A | 0.50 | -1.04 | (-1.04+3)/6 = 0.33 |
| Fund B | 1.00 | -0.45 | (-0.45+3)/6 = 0.43 |
| Fund C | 1.20 | -0.21 | (-0.21+3)/6 = 0.47 |
| Fund D | 2.80 | +1.70 | (1.70+3)/6 = 0.78 |
Trade-off: Handles outliers well because ±3σ clipping prevents extreme values from dominating. The center of the distribution gets the most spread. However, it assumes roughly symmetric data - works best with 5+ funds.
3c. Percentile Rank
scaled = rank position / (number of funds - 1)
Ranks funds from lowest to highest. The bottom fund gets 0, the top gets 1, and others are evenly spaced regardless of how far apart their actual values are.
Example: Alpha for 4 funds
| Fund | Raw Alpha | Rank | Scaled (Higher=better) |
|---|---|---|---|
| Fund C | -2.0% | 0 | 0/(4-1) = 0.00 |
| Fund A | 1.5% | 1 | 1/(4-1) = 0.33 |
| Fund B | 4.0% | 2 | 2/(4-1) = 0.67 |
| Fund D | 12.0% | 3 | 3/(4-1) = 1.00 |
Trade-off: Most robust to outliers - a fund with 50% alpha is treated no differently than one with 5%, as long as both are "the best." This also means magnitude differences are lost. Best when you care about relative ranking, not absolute differences.
Note: This Percentile Rank normalization method is the same formula used by the standalone "% Rank" toggle in the returns table. The METRIC_DIRECTION configuration (which defines whether higher or lower is better for each metric) is the single source of truth for direction - both the scoring system and the % Rank column read from it. See the dedicated Percentile Rank tab for full details on how the standalone ranking works.
Step 4: Compute Final Score
After normalizing each metric to 0-1 (with direction flip applied), we compute the weighted average and scale it to 0-100:
normalized_weight_i = w_i / sum(all weights)
raw_score = sum(s_i × normalized_weight_i) / sum(normalized_weight_i for metrics that have data)
final_score = round(raw_score × 100)
The division by applied weights (not total weights) handles the case where a fund is missing data for some metrics. If Fund A has CAGR but no risk metrics (e.g. an index with no benchmark comparison), it is scored only on CAGR using the CAGR weight portion.
Complete Worked Example
Setup: 3 metrics, Min-Max scaling, 3 funds.
| Metric | Direction | Weight | Fund A raw | Fund B raw | Fund C raw |
|---|---|---|---|---|---|
| CAGR 1Y | ↑ Higher | 40 | 12% | 8% | 18% |
| Max DD 1Y | ↓ Lower | 30 | -10% | -5% | -20% |
| Sharpe | ↑ Higher | 30 | 1.2 | 0.8 | 1.5 |
Min-Max scaling:
| Metric | Min | Max | Fund A scaled | Fund B scaled | Fund C scaled |
|---|---|---|---|---|---|
| CAGR 1Y (↑) | 8 | 18 | 0.40 | 0.00 | 1.00 |
| Max DD 1Y (↓) | -20 | -5 | 0.67 | 1.00 | 0.00 |
| Sharpe (↑) | 0.8 | 1.5 | 0.57 | 0.00 | 1.00 |
Weighted score (weights normalized: 40+30+30=100):
Fund B = (0.00 × 0.40) + (1.00 × 0.30) + (0.00 × 0.30) = 0.00 + 0.30 + 0.00 = 0.30 → Score: 30
Fund C = (1.00 × 0.40) + (0.00 × 0.30) + (1.00 × 0.30) = 0.40 + 0.00 + 0.30 = 0.70 → Score: 70
Fund C scores highest (70) due to best CAGR and Sharpe, despite the worst drawdown. Fund B scores lowest (30) - it had the best drawdown but worst CAGR and Sharpe.
Score Color Coding
- 75-100 (green): Top quartile - strong across selected metrics.
- 50-74 (light green): Above average on your criteria.
- 25-49 (amber): Below average on your criteria.
- 0-24 (red): Bottom quartile - weakest on selected metrics.
Important Notes
- Scores are relative - they depend on which funds are in the comparison set. Adding or removing funds changes all scores.
- Minimum 2 funds required. With only 1 fund, there is nothing to compare against.
- If a fund has no data for a metric (e.g. an index with no risk metrics), that metric is excluded from its score calculation, and the remaining weights are renormalized.
- All computation happens in the browser. No data is sent to any server for scoring.
- Scores are not saved - they are recomputed whenever you change metrics, weights, or fund selection.
Related metrics
More Tools methodology from the MFPRO analytics tool: