diff --git a/fundlab/report.py b/fundlab/report.py
new file mode 100644
index 0000000..ebe2a77
--- /dev/null
+++ b/fundlab/report.py
@@ -0,0 +1,802 @@
+"""Fund report: candidates + shortlist, self-contained HTML.
+
+One section per fund:
+ - equity curve over the maximum available period (fund vs its fitted
+ reference mix vs IVV),
+ - performance: full history, calendar years, and the defined market
+ episodes (2022 bear, 2023 rate shock, 2024 vol spike, 2025 tariff
+ crash, 2026 Q1) - fund vs reference mix vs IVV, with the fund-vs-
+ reference gap (period alpha/timing),
+ - what drove it: the excess-of-T-bill sleeve loadings (full + 5y),
+ alpha + t, R^2, rolling drift, verdict,
+ - the reference mix explained: each picked sleeve with what it
+ actually exposes you to (not just the ticker),
+ - tax character + taxable/IRA placement,
+ - cluster peers: the 3-4 best funds of the same k=30 return-driver
+ cluster, compared, with this fund's advantages/disadvantages.
+
+Run: .venv/bin/python -m fundlab.report -> reports/fund_report.html
+"""
+from __future__ import annotations
+
+import html
+import json
+import time
+from pathlib import Path
+
+import numpy as np
+import pandas as pd
+
+from fundlab import cluster as _cl
+from fundlab import decompose
+from fundlab import factors
+from fundlab.searchlist import BROAD_SLEEVES
+
+HERE = Path(__file__).parent
+REPORTS = HERE.parent / "reports"
+REPORTS.mkdir(exist_ok=True)
+OUT = REPORTS / "fund_report.html"
+
+TAX = json.loads((HERE / "taxplan_results.json").read_text())
+DD = json.loads((HERE / "drawdown_results.json").read_text())
+FACTOR = json.loads((HERE / "factor_results.json").read_text())
+SEARCH = json.loads((HERE / "search_all.json").read_text())
+DECOMP = json.loads((HERE / "decompose_results.json").read_text())
+FONDS = json.loads((HERE.parent / "funds.json").read_text())
+KMEANS = json.loads((HERE / "cluster_kmeans.json").read_text())
+
+# ------------------------------------------------------------------ sleeves
+# what each sleeve actually EXPOSES you to (the report must explain the
+# exposure, not just name the ticker)
+SLEEVE_DESC = {
+ "qqq": ("US large growth (Nasdaq-100)",
+ "growth/tech-heavy US equities; high sensitivity to earnings "
+ "surprises and long-end rates (duration of growth cash flows)"),
+ "ivv": ("US large blend (S&P 500)",
+ "core US equity market; the default 'own the economy' exposure"),
+ "iwm": ("US small cap (Russell 2000)",
+ "small-cap cycle: domestic credit, margin pressure, IPO window"),
+ "vea": ("Intl developed ex-US (Vanguard)",
+ "developed-market equities outside the US (EU, Japan, UK); FX-"
+ "hedged-off, currency moves matter"),
+ "efa": ("Intl developed ex-US (MSCI EAFE)",
+ "developed-market equities outside the US; same exposure as VEA "
+ "via a different index provider"),
+ "vwo": ("Emerging-market equity",
+ "EM corporate profits + EM currency + China/FX flows; "
+ "high-vol, high-carry, dollar-sensitive"),
+ "vnq": ("US REITs",
+ "physical real estate: rents vs rates, leverage in the property "
+ "sector; equity-like income"),
+ "bil": ("1-3 month T-bills (cash)",
+ "the risk-free rate itself; ~zero volatility, pure carry"),
+ "shv": ("0-3 month T-bills (ultra-short cash)",
+ "the risk-free rate itself; netted out of the excess-return "
+ "regression, shown only as part of a fund's cash position"),
+ "shy": ("1-3 year Treasuries (short duration)",
+ "short duration: modest rate sensitivity, ~cash-plus-carry"),
+ "ief": ("7-10 year Treasuries (core duration)",
+ "the core rate bet: price moves when the Fed path changes"),
+ "tlt": ("20+ year Treasuries (long duration)",
+ "levered duration: big moves on rate expectations, steepener/"
+ "bull-steepener exposure"),
+ "vblix": ("VIX futures (pure vol axis)",
+ "crash insurance / short-vol funding; positive loading = "
+ "long-vol (rises in panic), negative = short-vol carry"),
+ "agg": ("Aggregate bonds (Treasuries + IG credit)",
+ "the core bond market: ~60% Treasuries, IG corporates, MBS; "
+ "moderate duration"),
+ "vweax": ("High-yield corporate bonds",
+ "credit spread cycle: HY junk yields, default risk in "
+ "recessions, strong carry in stable times"),
+ "hyg": ("High-yield corporate bonds (iShares)",
+ "same HY credit-spread exposure as VWEAX via a different fund"),
+ "vmbix": ("Agency RMBS (mortgage-backed)",
+ "mortgage credit + prepayment/extension risk; the refi cycle"),
+ "lqd": ("Investment-grade corporate bonds",
+ "IG credit spreads over Treasuries; milder default risk than HY"),
+ "finux": ("Intl bonds (Fidelity; TERMINATED 2017)",
+ "non-US credit/duration; data ends 2017 so recent windows "
+ "never use it"),
+ "pff": ("Preferred stocks",
+ "hybrid: fixed-rate equity-like instruments; rate + credit + "
+ "equity risk in one"),
+ "emb": ("Emerging-market debt",
+ "EM sovereign/corporate carry; EM currency + dollar cycle"),
+ "tip": ("TIPS (inflation-linked Treasuries)",
+ "breakeven inflation exposure: rises when inflation "
+ "expectations rise"),
+ "vtv": ("US value",
+ "cheap/asset-rich US names (financials, energy, cyclicals); "
+ "value-vs-growth style cycle"),
+ "dbmf": ("CTA / managed futures",
+ "trend-following across futures; long in crises, earns "
+ "un-correlated carry otherwise"),
+ "dbb": ("Broad commodities",
+ "commodity basket: inflation hedge + global growth proxy"),
+ "djp": ("Natural gas",
+ "a single volatile commodity: winter/hedging cycles"),
+ "gsg": ("Broad commodities (SPDR)",
+ "same commodity exposure as DBB via a different fund"),
+ "gld": ("Gold",
+ "crisis/inflation hedge; real-rate sensitive, no yield"),
+ "fxe": ("Long euros vs the dollar",
+ "EUR/USD: carries the euro interest-rate differential"),
+ "fxy": ("Long yen vs the dollar",
+ "USD/JPY: carries the Japan rate differential; carry-trade "
+ "crowding risk"),
+ "xlk": ("US tech sector", "the tech sector index"),
+ "xlf": ("US financials sector", "banks/insurance: rate + credit cycle"),
+ "xle": ("US energy sector", "oil prices + US drilling"),
+ "xlv": ("US healthcare sector", "defensive pharma/providers"),
+ "xlp": ("US staples sector", "defensive consumer"),
+ "xlu": ("US utilities sector", "bond-proxy utilities; rate sensitive"),
+ "xly": ("US consumer discretionary", "cyclicals: autos, retail, "
+ "leisure; earnings cycle"),
+ "xlb": ("US materials sector", "industrial materials: capex cycle"),
+}
+
+
+def sleeve_desc(sym: str) -> tuple[str, str]:
+ return SLEEVE_DESC.get(sym, (sym.upper(), "no description on file"))
+
+
+# ------------------------------------------------------------------ data
+def price(sym: str) -> pd.Series | None:
+ f = decompose.DATA / f"{sym.lower()}-history.csv"
+ if not f.exists():
+ return None
+ try:
+ s = (pd.read_csv(f, parse_dates=["Date"], index_col="Date")
+ ["Adj Close"].dropna())
+ s = s[~s.index.duplicated(keep="last")].sort_index()
+ except Exception:
+ return None
+ return s if len(s) > 40 else None
+
+
+EPISODES = [] # (label, start, end) from the drawdown engine
+for _e in DD["episodes"]:
+ EPISODES.append((_e["label"], pd.Timestamp(_e["peak"]),
+ pd.Timestamp(_e["trough"])))
+
+# k=30 cluster membership (sym -> cluster id/label)
+MEMBER = {}
+for _c, _v in KMEANS["clusters"].items():
+ for _s in _v["syms"]:
+ MEMBER[_s] = (_c, _v["label"], _v["n"])
+
+
+def loading_matrix_cached():
+ return _cl.loading_matrix()
+
+
+CENTROIDS = {} # sym -> (cluster, centroid) for NEW points
+
+
+def _centroids(syms: list[str], V: np.ndarray) -> dict[int, np.ndarray]:
+ lab = _cl.kmeans(_cl.emphasized(V, _cl.AXES.index("cash")), 30)
+ out = {}
+ for c in range(30):
+ idx = [i for i, l in enumerate(lab) if l == c]
+ if idx:
+ out[c] = np.median(V[idx], 0)
+ return out
+
+
+def cluster_of_row(row: np.ndarray) -> tuple[str, str]:
+ """Assign a new loading row to the k=30 scheme (distance to cluster
+ medians in the emphasized space)."""
+ global CENTROIDS
+ if not CENTROIDS:
+ syms, V = loading_matrix_cached()
+ CENTROIDS = _centroids(syms, V)
+ r = row.copy()
+ r[_cl.AXES.index("cash")] *= _cl.CASH_EMPHASIS
+ best, bd = None, None
+ for c, cent in CENTROIDS.items():
+ d = float(np.sum((r - cent) ** 2))
+ if bd is None or d < bd:
+ best, bd = c, d
+ for c, v in KMEANS["clusters"].items():
+ if int(c) == best:
+ return (c, v["label"])
+ return (str(best), "?")
+
+
+def factor_row(sym: str) -> dict:
+ """Full + 5y excess-of-T-bill loadings for ANY fund (shortlist funds
+ are not in the 2,384 factor file)."""
+ if sym in FACTOR:
+ return FACTOR[sym]
+ r = factors.factor_screen(sym)
+ return r or {}
+
+
+_FWD: dict = {}
+
+
+def ref_components(sym: str, fr: dict, window: str = "rec5") -> list[dict]:
+ """The fund's FORWARD-SELECTED reference (the mix its alpha is
+ measured against): BIC-gated selection from the 21 broad sleeves,
+ excess-of-T-bill. Recomputed (cached) because the screen stored only
+ the display strings. Falls back to the 34-sleeve OLS loadings when
+ the fund is not in the search universe."""
+ key = (sym, window)
+ if key in _FWD:
+ return _FWD[key]
+ out = None
+ try:
+ m = decompose.decompose(sym, start=decompose.RECENT_WINDOW
+ if window == "rec5" else None,
+ candidates={sym: BROAD_SLEEVES})
+ if m.get("components"):
+ out = [{"sym": c["sym"], "beta": c["beta"]}
+ for c in m["components"]]
+ except Exception:
+ out = None
+ if out is None:
+ comps = (fr.get(window) or fr.get("full") or {}).get("betas") or {}
+ out = [{"sym": s, "beta": b} for s, b in sorted(
+ comps.items(), key=lambda kv: -abs(kv[1])) if abs(b) >= 0.08]
+ _FWD[key] = out
+ return out
+
+
+def search_row(sym: str) -> dict:
+ return SEARCH.get(sym, {})
+
+
+def decomp_row(sym: str) -> dict:
+ return DECOMP.get(sym, {})
+
+
+def tax_row(sym: str) -> dict:
+ up = sym.upper()
+ if up in TAX["shortlist"]:
+ return TAX["shortlist"][up]
+ for k in (sym, up, sym.lower()):
+ if k in TAX["candidates"]:
+ return TAX["candidates"][k]
+ return {}
+
+
+def dd_row(sym: str) -> dict:
+ return DD["funds"].get(sym, {})
+
+
+# ------------------------------------------------------------------ stats
+def perf_stats(p: pd.Series, rf_annual: float = 0.037) -> dict:
+ r = p.pct_change().dropna()
+ years = (p.index[-1] - p.index[0]).days / 365.25
+ cagr = (p.iloc[-1] / p.iloc[0]) ** (1 / years) - 1 if years > 0.5 else np.nan
+ vol = r.std() * np.sqrt(252)
+ roll_max = p.cummax()
+ mdd = float(((p / roll_max) - 1).min())
+ sharpe = (cagr - rf_annual) / vol if vol > 0 else np.nan
+ return {"start": str(p.index[0].date()), "end": str(p.index[-1].date()),
+ "years": years, "cagr": cagr, "vol": vol, "mdd": mdd,
+ "sharpe": sharpe}
+
+
+def window_ret(p: pd.Series, a, b) -> float | None:
+ s = p[(p.index >= a) & (p.index <= b)]
+ if len(s) < 2:
+ return None
+ return float(s.iloc[-1] / s.iloc[0] - 1)
+
+
+def annual_table(p: pd.Series, n: int = 8) -> list[tuple[str, float]]:
+ yr = p.resample("YE").last().dropna()
+ out = []
+ for i in range(len(yr) - 1):
+ lab = str(yr.index[i].year)
+ if i == 0:
+ continue
+ out.append((lab, float(yr.iloc[i] / yr.iloc[i - 1] - 1)))
+ # partial current year from last full year-end
+ out.append(("YTD", float(p.iloc[-1] / yr.iloc[-1] - 1)))
+ return out[-(n + 1):]
+
+
+def mix_series(refs: list[dict]) -> pd.Series | None:
+ """Fitted reference mix: sum of beta * sleeve daily returns, cumulated
+ to a price path (rebased 100). Pure beta path - the fund minus this
+ is the alpha path."""
+ if not refs:
+ b = price("bil")
+ if b is None:
+ return None
+ return 100 * b / b.iloc[0]
+ cols = []
+ for c in refs:
+ p = price(c["sym"])
+ if p is None:
+ continue
+ cols.append((c["beta"], p.pct_change()))
+ if not cols:
+ return None
+ idx = None
+ for _b, r in cols:
+ idx = r if idx is None else idx.combine(r, lambda x, y: x + y,
+ fill_value=0.0)
+ idx = idx.fillna(0.0)
+ path = (1 + idx).cumprod()
+ return 100 * path / path.iloc[0]
+
+
+# ------------------------------------------------------------------ html
+PLOTLY_JS = ""
+
+
+def load_plotly():
+ global PLOTLY_JS
+ try:
+ import plotly
+ PLOTLY_JS = plotly.offline.get_plotlyjs()
+ except Exception:
+ PLOTLY_JS = None
+
+
+def fig_html(fig, h: int = 420) -> str:
+ import plotly.io as pio
+ s = pio.to_html(fig, full_html=False, include_plotlyjs=False,
+ config={"displayModeBar": False}, div_id="")
+ return s.replace("
", f'
')
+
+
+def equity_figure(sym: str, name: str, refs: list[dict]) -> str:
+ import plotly.graph_objects as go
+ p = price(sym)
+ if p is None:
+ return "
No local price history.
"
+ fig = go.Figure()
+ fig.add_trace(go.Scatter(x=p.index, y=100 * p / p.iloc[0],
+ name=sym.upper(), line=dict(width=2)))
+ m = mix_series(refs)
+ if m is not None:
+ fig.add_trace(go.Scatter(x=m.index, y=m, name="fitted reference",
+ line=dict(width=1.2, dash="dash")))
+ iv = price("ivv")
+ if iv is not None:
+ fig.add_trace(go.Scatter(
+ x=iv.index, y=100 * iv / iv.iloc[0], name="IVV (S&P 500)",
+ line=dict(width=1, dash="dot"), opacity=0.7))
+ fig.update_layout(height=430, margin=dict(l=10, r=10, t=30, b=10),
+ title=f"{html.escape(name)} - total return since "
+ f"{p.index[0].year} (rebased 100)",
+ legend=dict(orientation="h", y=1.08),
+ hovermode="x unified")
+ return fig_html(fig)
+
+
+def fmt_pct(x, nd=1, sign=True):
+ if x is None or (isinstance(x, float) and np.isnan(x)):
+ return "—"
+ s = f"{100 * x:+.{nd}f}%" if sign else f"{100 * x:.{nd}f}%"
+ return s
+
+
+def fmt_r2(x):
+ return "—" if x is None or (isinstance(x, float) and np.isnan(x)) \
+ else f"{x:.2f}"
+
+
+def perf_table(p: pd.Series, refs: list[dict]) -> str:
+ m = mix_series(refs)
+ iv = price("ivv")
+ rows = []
+
+ def add(label, a, b, ann=False):
+ fr_ = window_ret(p, a, b)
+ mr = window_ret(m, a, b) if m is not None else None
+ ir = window_ret(iv, a, b) if iv is not None else None
+ gap = (fr_ - mr) if (fr_ is not None and mr is not None) else None
+ rows.append(f"
{label}
"
+ f"
{fmt_pct(fr_)}
{fmt_pct(mr)}
"
+ f"
{fmt_pct(ir)}
{fmt_pct(gap)}
")
+
+ st = perf_stats(p)
+ add("Full history", st["start"], st["end"])
+ add("Last 5y", "2021-01-01", st["end"])
+ add("Last 1y", "2025-09-01", st["end"])
+ for lab, a, b in EPISODES:
+ add(lab, a, b)
+ # calendar years (last 6)
+ yr = p.resample("YE").last().dropna()
+ years = [str(yr.index[i].year) for i in range(1, len(yr))][-6:]
+ for i, y in enumerate(years):
+ a = f"{y}-01-01"
+ b = f"{int(y) + 1}-01-01" if i < len(years) - 1 else st["end"]
+ add(y, a, b)
+ return ('
period
fund
reference
'
+ '
IVV
fund − ref
' + "".join(rows)
+ + '
fund − reference = period '
+ 'alpha/timing (the part of that period the sleeve mix does '
+ 'not explain). IVV shown for scale - for non-equity funds '
+ 'the IVV column is only context.
Weak fit - read with care. "
+ "These loadings are each individually significant but "
+ "collectively explain little of the excess return; the "
+ "economically meaningful picture is a mostly-cash "
+ "vehicle with idiosyncratic alpha (the performance "
+ "table anchors to cash, not to this mix).
")
+ if not refs:
+ srow = search_row(sym)
+ a = srow.get("alpha_ann_5y")
+ return caveat + ("
Reference: cash (the T-bill rate itself)."
+ " No "
+ "sleeve passed the forward-selection gates, so the fund's "
+ "excess returns are not explained by any benchmark mix - "
+ f"its entire excess performance is idiosyncratic (5y alpha "
+ f"{fmt_pct(a) if isinstance(a, (int, float)) else '—'}). "
+ "There is no meaningful 'beta' to this fund; it is a "
+ "standalone position.
")
+ sb = sum(c["beta"] for c in refs)
+ cash = 1 - sb
+ rows = []
+ for c in refs:
+ nm, desc = sleeve_desc(c["sym"])
+ rows.append(f"
The loadings sum to {sb:.2f}, i.e. the fund is "
+ f"~{cash:.0%} NET CASH (earns the T-bill rate; adds "
+ f"zero excess alpha).
")
+ elif cash < -0.05:
+ cash_line = (f"The loadings sum to {sb:.2f}, i.e. the fund is ~"
+ f"{-cash:.0%} NET LEVERED (borrows at ~the T-bill "
+ f"rate; that financing shows up as negative cash).")
+ return ('
loading
what it is
'
+ '
what it exposes you to
' + "".join(rows)
+ + "
" + cash_line
+ + '
The reference is NOT one index - it is '
+ 'this fitted mix, rebuilt from the fund\'s own returns. '
+ '"Alpha" everywhere in this report means outperformance vs '
+ 'this mix, in excess of the T-bill rate.
')
+
+
+def tax_section(sym: str) -> str:
+ t = tax_row(sym)
+ if not t:
+ return "
No tax classification on file.
"
+ loc = t.get("location", "?")
+ basis = t.get("basis", "?")
+ conf = {"N-PORT": "from actual N-PORT holdings (high confidence)",
+ "sleeves": "from the return-sleeve mix (model, medium "
+ "confidence)"}.get(basis, basis)
+ notes = html.escape(t.get("notes") or "")
+ rec = {"TAXABLE": "Keep in the taxable account.",
+ "TAXABLE (munis)": "Keep in the taxable account - "
+ "tax-exempt interest is wasted in an IRA.",
+ "TAXABLE (defers to LTCG)": "Keep in the taxable "
+ "account - the income mostly "
+ "defers to the LTCG/ROC rate."}.get(
+ loc, f"Recommended account: {html.escape(loc)}.")
+ return (f"
Character score {t.get('score', '?')} "
+ f"({conf}). Placement: {rec}
"
+ + (f"
{notes}
" if notes else ""))
+
+
+def cluster_section(sym: str, fr: dict, row: np.ndarray | None) -> str:
+ srow = search_row(sym)
+ if sym in MEMBER:
+ cid, clabel, cn = MEMBER[sym]
+ members = KMEANS["clusters"][cid]["syms"]
+ else:
+ if row is None:
+ return "
Not in the cluster scheme (no loading vector).
"
+ cid, clabel = cluster_of_row(row)
+ cn = KMEANS["clusters"].get(cid, {}).get("n", 0)
+ members = KMEANS["clusters"].get(cid, {}).get("syms", [])
+ peers = []
+ for s in members:
+ if s == sym:
+ continue
+ v = search_row(s)
+ if not isinstance(v.get("alpha_t_5y"), (int, float)):
+ continue
+ peers.append((v["alpha_t_5y"], v.get("r2_5y") or 0, s, v))
+ # best peers = highest POSITIVE alpha t (a fund with t = -5 is the
+ # cluster's worst, not a peer worth copying); top-4, positives first
+ peers.sort(key=lambda p: (p[0] > 0, p[0]), reverse=True)
+ pos = [p for p in peers if p[0] > 0]
+ peers = (pos + [p for p in peers if p[0] <= 0])[:4]
+ peers = [p[2] for p in peers]
+ if not peers:
+ return (f"
In cluster {html.escape(clabel)} (n={cn}) but "
+ "no peer with 5y alpha statistics.
")
+ rows = []
+
+ def statline(s: str) -> str:
+ p = price(s)
+ if p is None:
+ return ("—", "—", "—", "—", "—", "n/a")
+ st = perf_stats(p)
+ v = search_row(s)
+ t5 = window_ret(p, "2021-01-01", st["end"])
+ r2 = v.get("r2_5y")
+ a5 = v.get("alpha_ann_5y")
+ tt = v.get("alpha_t_5y")
+ tax = (tax_row(s) or {}).get("location") or "n/a"
+ return (fmt_pct(t5), fmt_pct(st["cagr"]), fmt_pct(st["mdd"]),
+ fmt_r2(r2),
+ (f"{fmt_pct(a5)} (t={tt:+.1f})"
+ if isinstance(a5, (int, float)) else "—"), tax)
+
+ p = price(sym)
+ st = perf_stats(p) if p is not None else {}
+ my = statline(sym)
+ rows.append(f"
{sym.upper()} (this fund)
"
+ + "".join(f"
{x}
" for x in my) + "
")
+ for s in peers:
+ rows.append(f"
{s.upper()} — "
+ f"{html.escape((search_row(s) or {}).get('name', '')[:40])}"
+ f"
" + "".join(f"
{x}
" for x in statline(s))
+ + "
")
+ tbl = ('
fund
5y
CAGR
'
+ '
maxDD
R² 5y
alpha 5y
tax
'
+ + "".join(rows) + "
")
+ # advantages / disadvantages: computed deltas vs the peer set
+ adv, dis = [], []
+ if p is not None:
+ t5 = window_ret(p, "2021-01-01", st["end"])
+ vals = {}
+ for s in peers:
+ pp = price(s)
+ if pp is None:
+ continue
+ ss = perf_stats(pp)
+ vals[s] = (window_ret(pp, "2021-01-01", ss["end"]), ss["mdd"],
+ ss["vol"])
+ if vals:
+ best_t5 = max(v[0] for v in vals.values() if v[0] is not None)
+ best_dd = max(v[1] for v in vals.values())
+ low_vol = min(v[2] for v in vals.values())
+ if t5 is not None and t5 >= best_t5 - 0.02:
+ adv.append("5y return at the top of the cluster")
+ elif t5 is not None and t5 < best_t5 - 0.10:
+ dis.append(f"5y return trails the best peer by "
+ f"{100 * (best_t5 - t5):.0f}pp")
+ if st["mdd"] > best_dd + 0.05:
+ dis.append(f"deeper drawdown than the calmest peer "
+ f"({fmt_pct(st['mdd'])} vs {fmt_pct(best_dd)})")
+ elif st["mdd"] < best_dd - 0.05:
+ adv.append("sharpest drawdown in the cluster")
+ if st["vol"] < low_vol - 0.02:
+ adv.append("lowest volatility in the cluster")
+ elif st["vol"] > low_vol + 0.05:
+ dis.append("meaningfully more volatile than the "
+ "calmest peer")
+ txt = ""
+ if adv:
+ txt += "
Advantages vs peers: " + "; ".join(adv) + ".
"
+ if dis:
+ txt += "
Disadvantages vs peers: " + "; ".join(dis) + ".
"
+ if not txt:
+ txt = ("
The fund sits in the middle of its cluster - no "
+ "decisive edge on return, drawdown or volatility vs the "
+ "peers; the choice among them should come down to alpha "
+ "quality (t-stat), tax fit and the conviction in the "
+ "strategy.
")
+ return (f"
Cluster: {html.escape(clabel)} "
+ f"(n={cn}, k=30 grouping by return-driver signature).
"
+ + tbl + txt)
+
+
+def fund_loading_row(fr: dict) -> np.ndarray:
+ f = fr.get("full") or fr.get("rec5") or {}
+ betas = f.get("betas") or {}
+ row = np.array([betas.get(s, 0.0) or 0.0 for s in factors.DRIVERS],
+ dtype=float)
+ return np.append(row, 1.0 - row.sum())
+
+
+def strategy_block(sym: str) -> str:
+ f = FONDS.get(sym)
+ if not f:
+ return ""
+ out = ""
+ if f.get("strategy"):
+ out += f"Strategy (excerpt from the filing)"
+ f"
{html.escape(f['strategy'])}
"
+ return out
+
+
+# ------------------------------------------------------------------ build
+def fund_section(sym: str, title: str, subtitle: str) -> str:
+ fr = factor_row(sym)
+ dr = decomp_row(sym)
+ srow = search_row(sym)
+ name = (srow.get("name") or (FONDS.get(sym) or {}).get("name")
+ or (fr or {}).get("name") or sym.upper())
+ refs = ref_components(sym, fr)
+ load = fund_loading_row(fr) if fr else None
+ # weak-fit (idiosyncratic) funds: the forward-selected mix is a
+ # statistically-thin spec combination (offsetting VIX/duration legs);
+ # anchoring the table to it misleads (a "reference" that loses 79% in
+ # 2022 for a fund that lost 2.4%). Below the fit gate the honest
+ # reference is CASH - the fund IS ~net-cash + idiosyncratic alpha.
+ r25 = srow.get("r2_5y") if isinstance(srow.get("r2_5y"),
+ (int, float)) else None
+ r2f = (fr.get("rec5") or fr.get("full") or {}).get("r2")
+ fit = r25 if r25 is not None else r2f
+ refs_curve = refs if (fit is not None and fit >= 0.5) else []
+ return f"""
+
+{perf_table(price(sym), refs_curve) if price(sym) is not None else '
no price data
'}
+
What drove the returns
+{drivers_section(fr, dr, srow)}
+
The reference mix - and what it exposes you to
+{reference_section(refs, refs_curve, sym)}
+
Tax character & placement
+{tax_section(sym)}
+
Peer comparison (same return-driver cluster)
+{cluster_section(sym, fr, load)}
+
"""
+
+
+def main() -> None:
+ t0 = time.time()
+ load_plotly()
+ print("building report ...", flush=True)
+
+ cand = [v for v in SEARCH.values()
+ if isinstance(v, dict)
+ and str(v.get("verdict", "")).startswith("CANDIDATE")]
+ cand.sort(key=lambda v: -(v.get("alpha_t_5y")
+ if isinstance(v.get("alpha_t_5y"),
+ (int, float)) else -9))
+
+ # shortlist: the 16 actively-managed funds (3 are share classes of
+ # the same fund: pmfkx=pmaix, lcrix=lcorx, egrsx=eagmx)
+ from fundlab.decompose import ALIAS
+ from fundlab.nport import FUND_TOKENS
+ short = [s for s in FUND_TOKENS if s not in ALIAS]
+
+ toc = []
+ body = []
+ for i, v in enumerate(cand, 1):
+ s = v["sym"]
+ toc.append(f'
{s.upper()} — '
+ f'{html.escape((v.get("name") or "")[:48])}
')
+ body.append(fund_section(
+ s, f"C{i:02d} · {s.upper()}",
+ f"{v.get('name', '')} — {str(v.get('verdict', ''))[:60]}"))
+ for i, s in enumerate(short, 1):
+ nm = (FONDS.get(s) or {}).get("name", s.upper())
+ toc.append(f'
Fund report - {len(cand)} alpha candidates & {len(short)}
+shortlist funds
+
Method. Every alpha in this report is computed
+in excess of the 3-month T-bill rate (BIL total return as the
+local risk-free series): the fund's daily total returns are regressed on
+sleeve benchmarks that are netted against the same rate, so a cash
+position contributes exactly zero. "Reference" is never one index - it
+is each fund's own fitted sleeve mix (BIC forward selection on the
+broad axes, or the full 34-sleeve OLS for the loadings). R² measures how
+much of the excess return the mix explains; alpha is what is left.
+"Net cash" = 1 − (sum of loadings). Equity curves are total-return
+(Adj Close) over the maximum local history, rebased to 100.
+{''.join(body)}
+
Generated by fundlab.report -
+data as of {time.strftime('%Y-%m-%d')}. Local price histories may lag a
+day or two. Cluster = k=30 k-means on the excess-return loading vectors
+(34 sleeves + net-cash axis).
Fund report - 11 alpha candidates & 13
+shortlist funds
+
Method. Every alpha in this report is computed
+in excess of the 3-month T-bill rate (BIL total return as the
+local risk-free series): the fund's daily total returns are regressed on
+sleeve benchmarks that are netted against the same rate, so a cash
+position contributes exactly zero. "Reference" is never one index - it
+is each fund's own fitted sleeve mix (BIC forward selection on the
+broad axes, or the full 34-sleeve OLS for the loadings). R² measures how
+much of the excess return the mix explains; alpha is what is left.
+"Net cash" = 1 − (sum of loadings). Equity curves are total-return
+(Adj Close) over the maximum local history, rebased to 100.
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.34, alpha = +2.2% (t = +3.5) vs the fitted reference mix (next section).
levered duration: big moves on rate expectations, steepener/bull-steepener exposure
AGG -0.13
Aggregate bonds (Treasuries + IG credit)
the core bond market: ~60% Treasuries, IG corporates, MBS; moderate duration
The loadings sum to 0.02, i.e. the fund is ~98% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.11 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
Disadvantages vs peers: 5y return trails the best peer by 127pp.
+
+
C02 · EGRIX
+Eaton Vance Global Macro Absolute Return Advantage Fund — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+138.1%
+24.7%
+838.1%
+113.4%
Last 5y
+59.7%
+19.2%
+123.7%
+40.5%
Last 1y
+18.9%
+3.6%
+20.7%
+15.3%
2022 bear mkt
-6.3%
+0.6%
-24.5%
-6.9%
2023 rate shock
-1.3%
+1.3%
-9.9%
-2.6%
2024 vol spike
-1.6%
+0.3%
-8.4%
-1.9%
2025 tariff crash
+0.1%
+0.6%
-18.8%
-0.5%
2026 Q1 drawdown
-0.7%
+0.6%
-8.9%
-1.3%
2021
+3.5%
-0.1%
+30.6%
+3.6%
2022
-2.2%
+1.4%
-18.6%
-3.6%
2023
+8.9%
+4.9%
+26.9%
+4.0%
2024
+9.6%
+5.2%
+25.7%
+4.4%
2025
+20.1%
+4.1%
+18.1%
+16.0%
2026
+10.0%
+2.3%
+12.4%
+7.7%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.07, alpha = +5.2% (t = +3.2) vs the fitted reference mix (next section).
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
QQQ -0.04
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
VWEAX +0.12
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
TLT -0.02
20+ year Treasuries (long duration)
levered duration: big moves on rate expectations, steepener/bull-steepener exposure
The loadings sum to 0.12, i.e. the fund is ~88% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.35 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: MIXED (check 1099).
macro: 60% LTCG if section-1256 futures; OTC swaps -> STCG - check 1099; absolute-return: character varies - check 1099
Disadvantages vs peers: 5y return trails the best peer by 105pp.
+
+
C03 · PULS
+PGIM Ultra Short Bond ETF — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+31.6%
+23.7%
+228.3%
+7.8%
Last 5y
+23.5%
+19.2%
+123.7%
+4.3%
Last 1y
+3.9%
+3.6%
+20.7%
+0.3%
2022 bear mkt
+0.4%
+0.6%
-24.5%
-0.2%
2023 rate shock
+1.3%
+1.3%
-9.9%
+0.0%
2024 vol spike
+0.3%
+0.3%
-8.4%
-0.0%
2025 tariff crash
+0.3%
+0.6%
-18.8%
-0.3%
2026 Q1 drawdown
+0.5%
+0.6%
-8.9%
-0.1%
2021
+0.5%
-0.1%
+30.6%
+0.5%
2022
+1.6%
+1.4%
-18.6%
+0.1%
2023
+6.2%
+4.9%
+26.9%
+1.3%
2024
+6.1%
+5.2%
+25.7%
+0.9%
2025
+5.0%
+4.1%
+18.1%
+0.8%
2026
+2.2%
+2.3%
+12.4%
-0.0%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.16, alpha = +0.8% (t = +2.9) vs the fitted reference mix (next section).
mortgage credit + prepayment/extension risk; the refi cycle
The loadings sum to 0.04, i.e. the fund is ~96% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.13 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
Disadvantages vs peers: 5y return trails the best peer by 141pp; deeper drawdown than the calmest peer (-5.9% vs -14.2%).
+
+
C04 · AGUAX
+American Beacon Developing World Income Fund — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+118.8%
+24.9%
+410.7%
+93.9%
Last 5y
+59.7%
+19.2%
+123.7%
+40.5%
Last 1y
+17.8%
+3.6%
+20.7%
+14.2%
2022 bear mkt
-18.4%
+0.6%
-24.5%
-19.1%
2023 rate shock
-3.1%
+1.3%
-9.9%
-4.4%
2024 vol spike
-0.9%
+0.3%
-8.4%
-1.2%
2025 tariff crash
-3.5%
+0.6%
-18.8%
-4.1%
2026 Q1 drawdown
-1.1%
+0.6%
-8.9%
-1.7%
2021
+6.5%
-0.1%
+30.6%
+6.6%
2022
-11.5%
+1.4%
-18.6%
-12.9%
2023
+12.1%
+4.9%
+26.9%
+7.2%
2024
+15.7%
+5.2%
+25.7%
+10.6%
2025
+18.6%
+4.1%
+18.1%
+14.4%
2026
+9.3%
+2.3%
+12.4%
+7.0%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.30, alpha = +4.9% (t = +2.8) vs the fitted reference mix (next section).
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
VWO +0.04
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
QQQ -0.04
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
EFA +0.05
Intl developed ex-US (MSCI EAFE)
developed-market equities outside the US; same exposure as VEA via a different index provider
IEF -0.06
7-10 year Treasuries (core duration)
the core rate bet: price moves when the Fed path changes
GSG -0.02
Broad commodities (SPDR)
same commodity exposure as DBB via a different fund
The loadings sum to 0.49, i.e. the fund is ~51% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.05 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
AGUAX (this fund)
+59.7%
+6.5%
-21.2%
0.30
+4.9% (t=+2.8)
IRA
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 92pp.
+
+
C05 · RCTIX
+River Canyon Total Return Bond Fund — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+87.4%
+25.0%
+357.3%
+62.4%
Last 5y
+30.6%
+19.2%
+123.7%
+11.5%
Last 1y
+4.3%
+3.6%
+20.7%
+0.7%
2022 bear mkt
-5.6%
+0.6%
-24.5%
-6.2%
2023 rate shock
-0.1%
+1.3%
-9.9%
-1.4%
2024 vol spike
+1.5%
+0.3%
-8.4%
+1.2%
2025 tariff crash
+0.1%
+0.6%
-18.8%
-0.5%
2026 Q1 drawdown
+0.1%
+0.6%
-8.9%
-0.5%
2021
+4.2%
-0.1%
+30.6%
+4.3%
2022
-4.4%
+1.4%
-18.6%
-5.8%
2023
+9.8%
+4.9%
+26.9%
+4.9%
2024
+7.6%
+5.2%
+25.7%
+2.4%
2025
+7.6%
+4.1%
+18.1%
+3.5%
2026
+2.6%
+2.3%
+12.4%
+0.3%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.40, alpha = +2.1% (t = +2.7) vs the fitted reference mix (next section).
mortgage credit + prepayment/extension risk; the refi cycle
VWEAX +0.09
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
The loadings sum to 0.30, i.e. the fund is ~70% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.13 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
RCTIX (this fund)
+30.6%
+5.5%
-10.9%
0.40
+2.1% (t=+2.7)
IRA
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Disadvantages vs peers: 5y return trails the best peer by 121pp.
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.45, alpha = +2.1% (t = +2.5) vs the fitted reference mix (next section).
The loadings sum to 0.31, i.e. the fund is ~69% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.07 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
RPIFX (this fund)
+39.5%
+5.2%
-22.5%
0.45
+2.1% (t=+2.5)
IRA
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 112pp.
+
+
C07 · WMNUX
+Westwood Alternative Income Fund — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+65.1%
+25.1%
+337.2%
+40.0%
Last 5y
+30.2%
+19.2%
+123.7%
+11.1%
Last 1y
+6.9%
+3.6%
+20.7%
+3.3%
2022 bear mkt
-2.7%
+0.6%
-24.5%
-3.3%
2023 rate shock
-0.2%
+1.3%
-9.9%
-1.6%
2024 vol spike
+0.4%
+0.3%
-8.4%
+0.1%
2025 tariff crash
+0.1%
+0.6%
-18.8%
-0.4%
2026 Q1 drawdown
+0.0%
+0.6%
-8.9%
-0.6%
2021
+3.2%
-0.1%
+30.6%
+3.3%
2022
-1.2%
+1.4%
-18.6%
-2.6%
2023
+6.8%
+4.9%
+26.9%
+1.9%
2024
+6.4%
+5.2%
+25.7%
+1.2%
2025
+7.7%
+4.1%
+18.1%
+3.6%
2026
+4.3%
+2.3%
+12.4%
+2.0%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.38, alpha = +1.4% (t = +2.4) vs the fitted reference mix (next section).
EUR/USD: carries the euro interest-rate differential
VMBIX +0.03
Agency RMBS (mortgage-backed)
mortgage credit + prepayment/extension risk; the refi cycle
VNQ -0.01
US REITs
physical real estate: rents vs rates, leverage in the property sector; equity-like income
VWO +0.01
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
The loadings sum to 0.18, i.e. the fund is ~82% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.18 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.46, alpha = +1.9% (t = +2.3) vs the fitted reference mix (next section).
EUR/USD: carries the euro interest-rate differential
The loadings sum to 0.31, i.e. the fund is ~69% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.15 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
PRFRX (this fund)
+38.1%
+4.4%
-20.0%
0.46
+1.9% (t=+2.3)
IRA
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 113pp.
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.32, alpha = +4.6% (t = +2.3) vs the fitted reference mix (next section).
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
VWO +0.08
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
FXE +0.05
Long euros vs the dollar
EUR/USD: carries the euro interest-rate differential
GSG -0.03
Broad commodities (SPDR)
same commodity exposure as DBB via a different fund
QQQ -0.05
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
EFA +0.07
Intl developed ex-US (MSCI EAFE)
developed-market equities outside the US; same exposure as VEA via a different index provider
The loadings sum to 0.53, i.e. the fund is ~47% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.06 (from the return-sleeve mix (model, medium confidence)). Placement: Keep in the taxable account - the income mostly defers to the LTCG/ROC rate.
~100% of 5y return defers to the investor (price appreciation + return of capital) - taxed as YOUR LTCG on a >1y sale, not ordinary income as in a traditional IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
FEMDX (this fund)
+52.0%
+6.9%
-31.8%
0.32
+4.6% (t=+2.3)
TAXABLE (defers to LTCG)
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 99pp.
+
+
C10 · ETSIX
+Eaton Vance Strategic Income Fund — CANDIDATE - idiosyncratic alpha, complements portfolio
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+327.0%
+30.2%
+768.4%
+296.8%
Last 5y
+31.4%
+19.2%
+123.7%
+12.2%
Last 1y
+7.2%
+3.6%
+20.7%
+3.6%
2022 bear mkt
-5.4%
+0.6%
-24.5%
-6.0%
2023 rate shock
-1.6%
+1.3%
-9.9%
-2.9%
2024 vol spike
+0.6%
+0.3%
-8.4%
+0.3%
2025 tariff crash
+0.5%
+0.6%
-18.8%
-0.0%
2026 Q1 drawdown
-0.9%
+0.6%
-8.9%
-1.5%
2021
+1.1%
-0.1%
+30.6%
+1.2%
2022
-2.7%
+1.4%
-18.6%
-4.1%
2023
+8.0%
+4.9%
+26.9%
+3.1%
2024
+6.8%
+5.2%
+25.7%
+1.6%
2025
+12.1%
+4.1%
+18.1%
+8.0%
2026
+3.3%
+2.3%
+12.4%
+1.1%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.38, alpha = +2.4% (t = +2.3) vs the fitted reference mix (next section).
mortgage credit + prepayment/extension risk; the refi cycle
VEA +0.04
Intl developed ex-US (Vanguard)
developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
QQQ -0.03
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
VWEAX +0.11
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
VWO +0.03
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
GSG -0.01
Broad commodities (SPDR)
same commodity exposure as DBB via a different fund
The loadings sum to 0.34, i.e. the fund is ~66% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.13 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
ETSIX (this fund)
+31.4%
+5.2%
-12.6%
0.38
+2.4% (t=+2.3)
IRA
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Disadvantages vs peers: 5y return trails the best peer by 120pp.
+
+
C11 · HICOX
+COLORADO BONDSHARES A TAX EXEMPT FUND — CANDIDATE (semi-alpha: mostly explained by net exposure)
+
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+774.4%
+30.2%
+768.4%
+744.2%
Last 5y
+23.9%
+19.2%
+123.7%
+4.7%
Last 1y
+5.8%
+3.6%
+20.7%
+2.1%
2022 bear mkt
-6.6%
+0.6%
-24.5%
-7.2%
2023 rate shock
-3.1%
+1.3%
-9.9%
-4.4%
2024 vol spike
+1.1%
+0.3%
-8.4%
+0.8%
2025 tariff crash
-1.8%
+0.6%
-18.8%
-2.3%
2026 Q1 drawdown
+0.1%
+0.6%
-8.9%
-0.5%
2021
+4.8%
-0.1%
+30.6%
+4.9%
2022
-4.8%
+1.4%
-18.6%
-6.2%
2023
+7.0%
+4.9%
+26.9%
+2.1%
2024
+7.7%
+5.2%
+25.7%
+2.5%
2025
+5.3%
+4.1%
+18.1%
+1.2%
2026
+2.1%
+2.3%
+12.4%
-0.2%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.26, alpha = +1.4% (t = +1.2) vs the fitted reference mix (next section).
Screen verdict: CANDIDATE (semi-alpha: mostly explained by net exposure)
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
VMBIX +0.16
Agency RMBS (mortgage-backed)
mortgage credit + prepayment/extension risk; the refi cycle
VWEAX +0.19
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
IVV -0.04
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VNQ +0.02
US REITs
physical real estate: rents vs rates, leverage in the property sector; equity-like income
The loadings sum to 0.33, i.e. the fund is ~67% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 1.0 (from the return-sleeve mix (model, medium confidence)). Placement: Keep in the taxable account - tax-exempt interest is wasted in an IRA.
tax-exempt interest - keep OUT of the IRA
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
HICOX (this fund)
+23.9%
+5.7%
-8.4%
0.26
+1.4% (t=+1.2)
TAXABLE (munis)
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Disadvantages vs peers: 5y return trails the best peer by 127pp.
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Return-driver signature (34 sleeves, for clustering context): dbmf +0.13, qqq +0.13, xlk +0.12, iwm +0.07, ivv +0.05, tip +0.05 - net cash +0.55.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 0.85 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Holdings (May 2026): QQQ 65% + SPY 29% + MMF 0.6%, with 4.9% 'other assets in excess of liabilities' — an options overlay. But the rolling beta to those SAME holdings stays 0.13–0.89 (median 0.30, never above 1): the 'risk managed' in the name is real — a systematic equity de-risking overlay. Decomposition: one TACTICAL US-equity sleeve, not a static mix.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
QQQ +0.45
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
IVV -0.22
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
The loadings sum to 0.22, i.e. the fund is ~78% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 1.0 (from actual N-PORT holdings (high confidence)). Placement: Keep in the taxable account.
Disadvantages vs peers: 5y return trails the best peer by 136pp; meaningfully more volatile than the calmest peer.
+
+
S02 · ATRFX
+Catalyst Systematic Alpha I
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+80.3%
+25.0%
+387.2%
+55.4%
Last 5y
+47.5%
+19.2%
+124.4%
+28.4%
Last 1y
+7.0%
+3.6%
+21.0%
+3.4%
2022 bear mkt
-9.9%
+0.6%
-24.5%
-10.5%
2023 rate shock
-8.2%
+1.3%
-9.9%
-9.5%
2024 vol spike
-19.0%
+0.3%
-8.4%
-19.3%
2025 tariff crash
-23.5%
+0.6%
-18.8%
-24.1%
2026 Q1 drawdown
-17.0%
+0.6%
-8.9%
-17.6%
2021
+25.2%
-0.1%
+30.6%
+25.3%
2022
-3.6%
+1.4%
-18.6%
-5.0%
2023
+22.7%
+4.9%
+26.9%
+17.8%
2024
-3.9%
+5.2%
+25.7%
-9.1%
2025
+2.7%
+4.1%
+18.1%
-1.4%
2026
-0.4%
+2.3%
+12.7%
-2.6%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 1.83 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Systematic alpha over short-duration IG credit + cash. Returns are dominated by idiosyncratic credit/derivatives P&L (R² ≤ 0.22 vs bond sleeves) and the best-fit weights are knife-edge. Read as: cash-like carry + systematic alpha, no meaningful static sleeve.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
IVV +0.17
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VEA +0.41
Intl developed ex-US (Vanguard)
developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
FXY -0.26
Long yen vs the dollar
USD/JPY: carries the Japan rate differential; carry-trade crowding risk
FXE -0.30
Long euros vs the dollar
EUR/USD: carries the euro interest-rate differential
GLD +0.13
Gold
crisis/inflation hedge; real-rate sensitive, no yield
DJP -0.09
Natural gas
a single volatile commodity: winter/hedging cycles
The loadings sum to 0.07, i.e. the fund is ~93% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.16 (from actual N-PORT holdings (high confidence)). Placement: Recommended account: IRA.
unclassified: US govt 18%; CTA/systematic: 60/40 if section-1256 regulated futures
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 117pp; meaningfully more volatile than the calmest peer.
+
+
S03 · CVSIX
+Calamos Market Neutral Income A
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+589.7%
+12619.2%
+770.9%
-12029.5%
Last 5y
+30.1%
+465.4%
+124.4%
-435.3%
Last 1y
+6.4%
+91.9%
+21.0%
-85.5%
2022 bear mkt
-7.1%
-73.7%
-24.5%
+66.6%
2023 rate shock
-0.2%
-36.3%
-9.9%
+36.1%
2024 vol spike
-0.5%
-28.6%
-8.4%
+28.2%
2025 tariff crash
-2.3%
-54.4%
-18.8%
+52.1%
2026 Q1 drawdown
-0.6%
-28.9%
-8.9%
+28.3%
2021
+5.0%
+89.5%
+30.6%
-84.5%
2022
-4.6%
-70.1%
-18.6%
+65.5%
2023
+9.0%
+139.1%
+26.9%
-130.1%
2024
+7.1%
+79.4%
+25.7%
-72.2%
2025
+6.8%
+54.1%
+18.1%
-47.3%
2026
+4.0%
+52.8%
+12.7%
-48.9%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: partially explainable — material active/timing residual
Weight stability: max 1y β-drift = 0.49 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Market neutral (long US equity, short credit). Full sample (since 1990) is unexplainable — the strategy has changed over 36 years; the last 5 years show a small net equity/credit tilt (ivv +0.14, vweax +0.06) explaining 74%. The rest is spread/option alpha (full-sample annualized alpha +5.5%, t=6.7).
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
IVV +0.21
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VWEAX +0.06
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
The loadings sum to 0.23, i.e. the fund is ~77% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.35 (from the return-sleeve mix (model, medium confidence)). Placement: Keep in the taxable account - the income mostly defers to the LTCG/ROC rate.
~61% of 5y return defers to the investor (price appreciation + return of capital) - taxed as YOUR LTCG on a >1y sale, not ordinary income as in a traditional IRA. market-neutral: gains from short-dated option/systematic trades - often STCG
Disadvantages vs peers: 5y return trails the best peer by 66pp.
+
+
S04 · JLPSX
+JPMorgan US Large Cap Core Plus I
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+1074.1%
+6430.4%
+832.1%
-5356.3%
Last 5y
+123.5%
+407.4%
+123.7%
-283.9%
Last 1y
+14.5%
+66.8%
+20.7%
-52.3%
2022 bear mkt
-25.1%
-70.7%
-24.5%
+45.6%
2023 rate shock
-7.9%
-32.4%
-9.9%
+24.5%
2024 vol spike
-8.1%
-20.6%
-8.4%
+12.5%
2025 tariff crash
-19.1%
-46.7%
-18.8%
+27.6%
2026 Q1 drawdown
-10.8%
-21.2%
-8.9%
+10.4%
2021
+31.1%
+133.9%
+30.6%
-102.8%
2022
-18.6%
-66.4%
-18.6%
+47.8%
2023
+31.1%
+108.4%
+26.9%
-77.3%
2024
+29.9%
+60.2%
+25.7%
-30.3%
2025
+14.6%
+37.3%
+18.1%
-22.7%
2026
+8.1%
+45.1%
+12.4%
-37.0%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: partially explainable — material active/timing residual
Weight stability: max 1y β-drift = 0.04 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
US large-cap core plus: essentially 1.04x the S&P 500 (R² 0.96 over 5y, stable). The 'plus' is small optionality (tiny ijt/vwo tilts in the 5y fit). The cleanest fund on the list.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
IVV +1.00
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VNQ -0.05
US REITs
physical real estate: rents vs rates, leverage in the property sector; equity-like income
QQQ +0.05
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.91 (N-PORT+sleeves). Placement: Keep in the taxable account.
unclassified: Other 99%; holdings mostly unclassified - used return sleeves
+
Peer comparison (same return-driver cluster)
+
Cluster: no dominant driver (balanced/idio) (n=337, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
JLPSX (this fund)
+123.5%
+12.6%
-51.3%
—
—
TAXABLE
SEHAX — SIIT U.S. Equity Factor Allocation Fund
+139.4%
+15.1%
-34.9%
0.97
+2.7% (t=+2.2)
n/a
CAIBX — CAPITAL INCOME BUILDER
+73.4%
+9.0%
-43.2%
0.92
+1.9% (t=+1.6)
n/a
QAACX — Federated Hermes MDT All Cap Core Fund
+147.4%
+11.3%
-63.0%
0.96
+2.4% (t=+1.6)
n/a
DESSX — DWS Enhanced Core Equity Fund
+139.3%
+10.5%
-58.2%
0.98
+1.5% (t=+1.4)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 24pp; meaningfully more volatile than the calmest peer.
+
+
S05 · PMAIX
+Victory Pioneer Multi-Asset Income A
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+236.2%
+8877.1%
+688.7%
-8641.0%
Last 5y
+78.6%
+1159.9%
+124.4%
-1081.3%
Last 1y
+15.7%
+215.5%
+21.0%
-199.8%
2022 bear mkt
-7.9%
-80.4%
-24.5%
+72.4%
2023 rate shock
-2.6%
-40.8%
-9.9%
+38.2%
2024 vol spike
-1.0%
-37.2%
-8.4%
+36.2%
2025 tariff crash
-5.2%
-61.2%
-18.8%
+56.0%
2026 Q1 drawdown
-1.5%
-27.2%
-8.9%
+25.7%
2021
+11.9%
+120.2%
+30.6%
-108.3%
2022
-0.0%
-73.7%
-18.6%
+73.7%
2023
+8.8%
+124.3%
+26.9%
-115.4%
2024
+7.8%
+89.6%
+25.7%
-81.8%
2025
+22.6%
+146.9%
+18.1%
-124.3%
2026
+9.7%
+108.8%
+12.7%
-99.1%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: partially explainable — material active/timing residual
Weight stability: max 1y β-drift = 0.45 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Global multi-asset fund of funds (N-PORT: 99.5% in unaffiliated underlying funds/loans). Returns decompose into high-yield credit (vweax +0.62), intl equity (efa +0.23), commodities (+0.05), bonds (−0.15): R² 0.68, stable weights, alpha +3.5%/yr (t=3.3). The sleeves show through the underlying funds.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
VEA +0.16
Intl developed ex-US (Vanguard)
developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
VWEAX +0.47
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
QQQ -0.36
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
IVV +0.43
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
DJP +0.05
Natural gas
a single volatile commodity: winter/hedging cycles
VWO +0.07
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
The loadings sum to 0.83, i.e. the fund is ~17% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.44 (N-PORT+sleeves). Placement: Recommended account: MIXED (check 1099).
unclassified: Other 59%, Fund holdings 21%; holdings mostly unclassified - used return sleeves; multi-asset: mixed qualified/LTCG + ordinary interest - check 1099
+
Peer comparison (same return-driver cluster)
+
Cluster: cash (net posn) +0.66 + HY corporate +0.09 (n=164, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
PMAIX (this fund)
+78.6%
+8.6%
-24.1%
—
—
MIXED (check 1099)
PYFIX — Payden Floating Rate Fund
+41.5%
+4.7%
-20.2%
0.34
+2.4% (t=+3.8)
n/a
ICMUX — Intrepid Income Fund
+45.6%
+4.9%
-8.8%
0.36
+3.0% (t=+3.4)
n/a
DFLAX — BNY Mellon Floating Rate Income Fund
+37.6%
+4.1%
-19.0%
0.31
+2.1% (t=+3.4)
n/a
LVHI — Franklin International Low Volatility Hi
+151.3%
+11.3%
-32.3%
0.78
+6.2% (t=+2.9)
n/a
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 73pp.
+
+
S06 · PMORX
+Putnam Mortgage Opportunities A
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+35.2%
+20.7%
+189.8%
+14.5%
Last 5y
+37.3%
+19.2%
+123.7%
+18.2%
Last 1y
+6.2%
+3.6%
+20.7%
+2.5%
2022 bear mkt
+3.4%
+0.6%
-24.5%
+2.8%
2023 rate shock
+1.0%
+1.3%
-9.9%
-0.3%
2024 vol spike
+1.2%
+0.3%
-8.4%
+0.9%
2025 tariff crash
-0.4%
+0.6%
-18.8%
-0.9%
2026 Q1 drawdown
+2.4%
+0.6%
-8.9%
+1.8%
2021
-2.2%
-0.1%
+30.6%
-2.1%
2022
+5.8%
+1.4%
-18.6%
+4.4%
2023
+6.5%
+4.9%
+26.9%
+1.5%
2024
+10.0%
+5.2%
+25.7%
+4.8%
2025
+5.5%
+4.1%
+18.1%
+1.3%
2026
+5.3%
+2.3%
+12.4%
+3.1%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 0.74 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Long/short mortgage & ABS — returns mostly idiosyncratic (R² 0.10). 5y direction is long MBS (vmbix +0.31) / short intermediate rates (ief −0.39), consistent with a carry/relative-value mortgage strategy. Not a static sleeve.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
EFA +0.04
Intl developed ex-US (MSCI EAFE)
developed-market equities outside the US; same exposure as VEA via a different index provider
FXE -0.05
Long euros vs the dollar
EUR/USD: carries the euro interest-rate differential
The loadings sum to -0.00, i.e. the fund is ~100% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.25 (from the return-sleeve mix (model, medium confidence)). Placement: Recommended account: IRA.
Disadvantages vs peers: 5y return trails the best peer by 59pp; deeper drawdown than the calmest peer (-19.3% vs -24.7%).
+
+
S07 · QSPNX
+AQR Style Premia Alternative N
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+159.6%
+24.9%
+439.8%
+134.7%
Last 5y
+197.1%
+19.2%
+124.4%
+177.9%
Last 1y
+22.0%
+3.6%
+21.0%
+18.4%
2022 bear mkt
+23.7%
+0.6%
-24.5%
+23.1%
2023 rate shock
+11.6%
+1.3%
-9.9%
+10.3%
2024 vol spike
-4.5%
+0.3%
-8.4%
-4.8%
2025 tariff crash
-2.6%
+0.6%
-18.8%
-3.1%
2026 Q1 drawdown
+8.9%
+0.6%
-8.9%
+8.3%
2021
+23.7%
-0.1%
+30.6%
+23.8%
2022
+30.2%
+1.4%
-18.6%
+28.8%
2023
+12.4%
+4.9%
+26.9%
+7.5%
2024
+19.6%
+5.2%
+25.7%
+14.4%
2025
+14.8%
+4.1%
+18.1%
+10.7%
2026
+18.5%
+2.3%
+12.7%
+16.3%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 1.00 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Market-neutral style premia: no static sleeve explains returns (R² 0.18 5y). Alpha vs a cash-like benchmark: +12.8%/yr full sample (t=4.0). Decomposition = pure factor harvesting (value/size/style tilts in both books); the 'exposures' in the table are residuals, not sleeves.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
QQQ -0.74
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
IVV +0.83
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VNQ -0.25
US REITs
physical real estate: rents vs rates, leverage in the property sector; equity-like income
GSG +0.09
Broad commodities (SPDR)
same commodity exposure as DBB via a different fund
FXY -0.26
Long yen vs the dollar
USD/JPY: carries the Japan rate differential; carry-trade crowding risk
VEA +0.19
Intl developed ex-US (Vanguard)
developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
The loadings sum to -0.16, i.e. the fund is ~116% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.5 (N-PORT+sleeves). Placement: Recommended account: MIXED (check 1099).
unclassified: Other 100%; holdings mostly unclassified - used return sleeves; long/short factor strategy: gains mix STCG/LTCG - check 1099
Advantages vs peers: 5y return at the top of the cluster; sharpest drawdown in the cluster.
+
+
S08 · SVARX
+Spectrum Low Volatility Investor
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+112.0%
+24.9%
+433.2%
+87.1%
Last 5y
+20.8%
+19.2%
+124.4%
+1.7%
Last 1y
+4.9%
+3.6%
+21.0%
+1.3%
2022 bear mkt
-5.6%
+0.6%
-24.5%
-6.2%
2023 rate shock
+0.6%
+1.3%
-9.9%
-0.7%
2024 vol spike
-0.2%
+0.3%
-8.4%
-0.5%
2025 tariff crash
-0.8%
+0.6%
-18.8%
-1.3%
2026 Q1 drawdown
-1.1%
+0.6%
-8.9%
-1.7%
2021
+4.1%
-0.1%
+30.6%
+4.2%
2022
-4.3%
+1.4%
-18.6%
-5.8%
2023
+9.8%
+4.9%
+26.9%
+4.8%
2024
+3.0%
+5.2%
+25.7%
-2.1%
2025
+6.2%
+4.1%
+18.1%
+2.1%
2026
+1.6%
+2.3%
+12.7%
-0.7%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 0.26 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Low-volatility equity fund of funds. Small but positive net market (efa +0.07, agg +0.10; R² 0.24, low drift). The edge is in volatility selection, not the mix: +5.2%/yr alpha over that small sleeve (t=5.1).
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
VWEAX +0.16
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
AGG +0.12
Aggregate bonds (Treasuries + IG credit)
the core bond market: ~60% Treasuries, IG corporates, MBS; moderate duration
VEA +0.03
Intl developed ex-US (Vanguard)
developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
The loadings sum to 0.31, i.e. the fund is ~69% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.23 (N-PORT+sleeves). Placement: Recommended account: IRA.
unclassified: Fund holdings 40%, US govt 10%; holdings mostly unclassified - used return sleeves
Disadvantages vs peers: 5y return trails the best peer by 143pp; deeper drawdown than the calmest peer (-6.5% vs -14.2%).
+
+
S09 · COSIX
+Columbia Strategic Income A
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+793.7%
+32219.1%
+770.9%
-31425.5%
Last 5y
+12.1%
+152.8%
+124.4%
-140.7%
Last 1y
+2.9%
+63.7%
+21.0%
-60.8%
2022 bear mkt
-13.8%
-80.9%
-24.5%
+67.1%
2023 rate shock
-3.4%
-40.1%
-9.9%
+36.8%
2024 vol spike
+1.3%
-12.6%
-8.4%
+13.9%
2025 tariff crash
+0.0%
-32.2%
-18.8%
+32.2%
2026 Q1 drawdown
-0.8%
-21.7%
-8.9%
+20.8%
2021
+1.6%
+37.2%
+30.6%
-35.6%
2022
-11.4%
-74.9%
-18.6%
+63.5%
2023
+9.4%
+119.0%
+26.9%
-109.6%
2024
+5.0%
+36.9%
+25.7%
-32.0%
2025
+7.0%
+104.8%
+18.1%
-97.8%
2026
+1.4%
+24.9%
+12.7%
-23.5%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.87, alpha = +0.3% (t = +0.5) vs the fitted reference mix (next section).
Decomposition verdict: not a static sleeve mix — returns driven by active decisions [strategy evolved — 5y R² = 0.86]
Weight stability: max 1y β-drift = 0.83 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Strategic income across the credit spectrum. Full sample (since 1990) unexplainable — vintage; the last 5 years are the honest current mix: high-yield +0.30, MBS +0.29, IG core +0.18 (R² 0.86).
Screen verdict: sleeve mix (R² high) - not alpha-driven
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
VMBIX +0.29
Agency RMBS (mortgage-backed)
mortgage credit + prepayment/extension risk; the refi cycle
VWEAX +0.27
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
AGG +0.14
Aggregate bonds (Treasuries + IG credit)
the core bond market: ~60% Treasuries, IG corporates, MBS; moderate duration
EFA +0.03
Intl developed ex-US (MSCI EAFE)
developed-market equities outside the US; same exposure as VEA via a different index provider
QQQ -0.02
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
The loadings sum to 0.76, i.e. the fund is ~24% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.0 (from actual N-PORT holdings (high confidence)). Placement: Recommended account: IRA.
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 22pp.
+
+
S10 · MBXIX
+Catalyst/Millburn Hedge Strategy I
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+149.5%
+2640.4%
+343.2%
-2490.9%
Last 5y
+69.4%
+751.1%
+124.4%
-681.6%
Last 1y
+16.3%
+148.4%
+21.0%
-132.1%
2022 bear mkt
+10.9%
-59.3%
-24.5%
+70.2%
2023 rate shock
+2.3%
-33.7%
-9.9%
+36.0%
2024 vol spike
-6.6%
-20.4%
-8.4%
+13.8%
2025 tariff crash
-13.3%
-44.2%
-18.8%
+30.9%
2026 Q1 drawdown
+4.0%
+0.4%
-8.9%
+3.7%
2021
+17.5%
+87.1%
+30.6%
-69.6%
2022
+7.4%
-49.6%
-18.6%
+57.0%
2023
+1.4%
+68.3%
+26.9%
-66.9%
2024
+13.4%
+56.6%
+25.7%
-43.2%
2025
+3.7%
+78.6%
+18.1%
-74.9%
2026
+12.7%
+105.8%
+12.7%
-93.1%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 0.77 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Multi-strategy hedge fund: 53% explained over a decade (ivv +0.39, ief −0.67, fxe −0.28, tlt +0.17, djp +0.08) — equity long, duration short, FX/commodity tilts, large active residual. Caveat: newest N-PORT on file is Sep 2024 — the fund may have changed strategy or stopped filing.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
IVV +0.26
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
VMBIX -0.60
Agency RMBS (mortgage-backed)
mortgage credit + prepayment/extension risk; the refi cycle
GSG +0.11
Broad commodities (SPDR)
same commodity exposure as DBB via a different fund
EUR/USD: carries the euro interest-rate differential
VWEAX -0.22
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
The loadings sum to -0.48, i.e. the fund is ~148% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.5 (N-PORT+sleeves). Placement: Keep in the taxable account - the income mostly defers to the LTCG/ROC rate.
~76% of 5y return defers to the investor (price appreciation + return of capital) - taxed as YOUR LTCG on a >1y sale, not ordinary income as in a traditional IRA. unclassified: Fund holdings 77%, US govt 23%; holdings mostly unclassified - used return sleeves; hedge fund: gains often short-term - check 1099
Advantages vs peers: sharpest drawdown in the cluster.
Disadvantages vs peers: 5y return trails the best peer by 27pp; meaningfully more volatile than the calmest peer.
+
+
S11 · EAGMX
+Eaton Vance Glbl Macr Absolute Return A
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+323.9%
+30.2%
+770.9%
+293.8%
Last 5y
+38.9%
+19.2%
+124.4%
+19.8%
Last 1y
+11.1%
+3.6%
+21.0%
+7.5%
2022 bear mkt
-5.1%
+0.6%
-24.5%
-5.7%
2023 rate shock
-0.3%
+1.3%
-9.9%
-1.6%
2024 vol spike
-0.7%
+0.3%
-8.4%
-1.0%
2025 tariff crash
+0.2%
+0.6%
-18.8%
-0.4%
2026 Q1 drawdown
-0.1%
+0.6%
-8.9%
-0.7%
2021
+1.7%
-0.1%
+30.6%
+1.8%
2022
-1.0%
+1.4%
-18.6%
-2.4%
2023
+7.1%
+4.9%
+26.9%
+2.2%
2024
+8.6%
+5.2%
+25.7%
+3.4%
2025
+12.0%
+4.1%
+18.1%
+7.9%
2026
+5.9%
+2.3%
+12.7%
+3.6%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
+
What drove the returns
+
Reference model, last 5 years: R² = 0.07, alpha = +2.6% (t = +2.4) vs the fitted reference mix (next section).
Decomposition verdict: not a static sleeve mix — returns driven by active decisions
Weight stability: max 1y β-drift = 0.26 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Global macro (sovereign-centric): nothing explains returns in the full or 5y window (R² ≤ 0.05) — textbook macro, positions are tactical and asset-agnostic. The whole story is +5.1%/yr (t=8.0) over a flat benchmark.
Screen verdict: alpha in 5y window, but not persistent (lucky stretch?)
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
VWO +0.03
Emerging-market equity
EM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
IEF -0.07
7-10 year Treasuries (core duration)
the core rate bet: price moves when the Fed path changes
QQQ -0.02
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
VWEAX +0.10
High-yield corporate bonds
credit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
The loadings sum to 0.04, i.e. the fund is ~96% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.1 (N-PORT+sleeves). Placement: Recommended account: IRA.
unclassified: Other 69%; holdings mostly unclassified - used return sleeves; absolute-return: character varies - check 1099
Disadvantages vs peers: 5y return trails the best peer by 125pp.
+
+
S12 · LCORX
+Leuthold Core Investment Retail
+
Strategy (excerpt from the filing)
+
No local price history.
+
Performance
+
no price data
+
What drove the returns
+
Decomposition verdict: no return history
NEW share classes (trading since Jul 2026) — no return history to regress. Holdings (Dec 2025 N-PORT): 91.7% ETFs + 8.4% money market; the strategy is Leuthold core multi-asset via ETFs. Re-run the decomposition after a year of NAV accumulates.
+
The reference mix - and what it exposes you to
+
Reference: cash (the T-bill rate itself). No sleeve passed the forward-selection gates, so the fund's excess returns are not explained by any benchmark mix - its entire excess performance is idiosyncratic (5y alpha —). There is no meaningful 'beta' to this fund; it is a standalone position.
+
Tax character & placement
+
Character score 1.0 (N-PORT+manual). Placement: Keep in the taxable account.
wrapper: 91.7% Leuthold Core ETF (US equity) + 8% money market; unclassified: Fund holdings 100%; 100% pass-through/unclassified - character is the underlying funds'
+
Peer comparison (same return-driver cluster)
+
Not in the cluster scheme (no loading vector).
+
+
S13 · LAMHX
+Lord Abbett Dividend Growth R6
+
Strategy (excerpt from the filing)
+
+
Performance
+
period
fund
reference
IVV
fund − ref
Full history
+290.1%
+1995.5%
+345.1%
-1705.5%
Last 5y
+103.9%
+333.0%
+123.7%
-229.0%
Last 1y
+16.7%
+47.9%
+20.7%
-31.3%
2022 bear mkt
-21.3%
-53.3%
-24.5%
+32.0%
2023 rate shock
-8.6%
-19.2%
-9.9%
+10.7%
2024 vol spike
-6.5%
-20.0%
-8.4%
+13.5%
2025 tariff crash
-16.5%
-38.1%
-18.8%
+21.6%
2026 Q1 drawdown
-5.6%
-19.9%
-8.9%
+14.3%
2021
+28.1%
+65.3%
+30.6%
-37.2%
2022
-12.8%
-49.6%
-18.6%
+36.8%
2023
+17.1%
+93.6%
+26.9%
-76.5%
2024
+23.2%
+57.1%
+25.7%
-33.9%
2025
+16.7%
+37.1%
+18.1%
-20.4%
2026
+9.1%
+27.6%
+12.4%
-18.5%
fund − reference = period alpha/timing (the part of that period the sleeve mix does not explain). IVV shown for scale - for non-equity funds the IVV column is only context.
Weight stability: max 1y β-drift = 0.44 (relative to full-sample β; 0 = perfectly stable, >1 = the weight is unstable).
Dividend growth: R² 0.95; S&P 500 + value/mid tilt (ivv +0.62, ive +0.26, ijk +0.20, iwm −0.14 over 5y), stable weights. Closest to a passive fund with an overlay on this list.
+
The reference mix - and what it exposes you to
+
loading
what it is
what it exposes you to
IVV +1.20
US large blend (S&P 500)
core US equity market; the default 'own the economy' exposure
QQQ -0.26
US large growth (Nasdaq-100)
growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
The loadings sum to 0.95, i.e. the fund is ~5% NET CASH (earns the T-bill rate; adds zero excess alpha).
The reference is NOT one index - it is this fitted mix, rebuilt from the fund's own returns. "Alpha" everywhere in this report means outperformance vs this mix, in excess of the T-bill rate.
+
Tax character & placement
+
Character score 0.92 (N-PORT+sleeves). Placement: Keep in the taxable account.
unclassified: Other 100%; holdings mostly unclassified - used return sleeves
+
Peer comparison (same return-driver cluster)
+
Cluster: no dominant driver (balanced/idio) (n=337, k=30 grouping by return-driver signature).
fund
5y
CAGR
maxDD
R² 5y
alpha 5y
tax
LAMHX (this fund)
+103.9%
+13.0%
-33.5%
—
—
TAXABLE
SEHAX — SIIT U.S. Equity Factor Allocation Fund
+139.4%
+15.1%
-34.9%
0.97
+2.7% (t=+2.2)
n/a
CAIBX — CAPITAL INCOME BUILDER
+73.4%
+9.0%
-43.2%
0.92
+1.9% (t=+1.6)
n/a
QAACX — Federated Hermes MDT All Cap Core Fund
+147.4%
+11.3%
-63.0%
0.96
+2.4% (t=+1.6)
n/a
DESSX — DWS Enhanced Core Equity Fund
+139.3%
+10.5%
-58.2%
0.98
+1.5% (t=+1.4)
n/a
Disadvantages vs peers: 5y return trails the best peer by 43pp; meaningfully more volatile than the calmest peer.
+
+
Generated by fundlab.report -
+data as of 2026-08-30. Local price histories may lag a
+day or two. Cluster = k=30 k-means on the excess-return loading vectors
+(34 sleeves + net-cash axis).