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 ('' + '' + "".join(rows) + + '
periodfundreferenceIVVfund − ref

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.

') + + +def drivers_section(fr: dict, dr: dict, srow: dict) -> str: + out = [] + if srow: + a5 = srow.get("alpha_ann_5y") + t5 = srow.get("alpha_t_5y") + r25 = srow.get("r2_5y") + if isinstance(r25, (int, float)) or isinstance(a5, (int, float)): + out.append( + f"

Reference model, last 5 years: R² = " + f"{fmt_r2(r25 if isinstance(r25, (int, float)) else None)}, " + f"alpha = {fmt_pct(a5) if isinstance(a5, (int, float)) else '—'}" + f"{' (t = ' + format(t5, '+.1f') + ')' if isinstance(t5, (int, float)) else ''} " + f"vs the fitted reference mix (next section).") + rf = (fr.get("full") or {}).get("alpha_ann") + tf = (fr.get("full") or {}).get("alpha_t") + r2f = srow.get("r2_full") + if isinstance(r2f, (int, float)) or isinstance(rf, (int, float)): + out.append( + f"

Reference model, full history: R² = " + f"{fmt_r2(r2f if isinstance(r2f, (int, float)) else None)}, " + f"alpha = {fmt_pct(rf) if isinstance(rf, (int, float)) else '—'}" + f"{' (t = ' + format(tf, '+.1f') + ')' if isinstance(tf, (int, float)) else ''}.

") + f = fr.get("rec5") or {} + betas = f.get("betas") or {} + top = sorted(betas.items(), key=lambda kv: -abs(kv[1]))[:6] + if top: + out.append( + "

Return-driver signature (34 sleeves, for clustering " + "context): " + ", ".join( + f"{s} {b:+.2f}" for s, b in top) + " - net cash " + f"{1 - sum(betas.values()):+.2f}.

") + # drift + verdict from the curated decomposition, when available + if dr and "verdict" in dr: + out.append(f"

Decomposition verdict: " + f"{html.escape(dr['verdict'])}

") + roll = dr.get("rolling") or {} + if roll.get("max_drift") is not None: + out.append( + f"

Weight stability: max 1y β-drift = " + f"{roll['max_drift']:.2f} (relative to full-sample β; " + f"0 = perfectly stable, >1 = the weight is unstable).

") + note = dr.get("note") + if note: + out.append(f"

{html.escape(note)}

") + if srow: + v = str(srow.get("verdict", "")) + if v: + out.append(f"

Screen verdict: {html.escape(v)}

") + return "".join(out) + + +def reference_section(refs: list[dict], refs_curve: list[dict], + sym: str) -> str: + weak = bool(refs) and not refs_curve + caveat = "" + if weak: + caveat = ("

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"{c['sym'].upper()} {c['beta']:+.2f}" + f"{html.escape(nm)}" + f"{html.escape(desc)}") + cash_line = "" + if weak: + cash_line = caveat + cash_line + if cash > 0.05: + cash_line = (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 ('' + '' + "".join(rows) + + "
loadingwhat it iswhat it exposes you to
" + 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 = ('' + '' + + "".join(rows) + "
fund5yCAGRmaxDDR² 5yalpha 5ytax
") + # 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""" +

{html.escape(title)} +{html.escape(subtitle)}

+
{strategy_block(sym)} +{equity_figure(sym, name, refs_curve)} +

Performance

+{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'
  • S{i:02d} · {s.upper()} — ' + f'{html.escape(nm[:48])}
  • ') + body.append(fund_section(s, f"S{i:02d} · {s.upper()}", nm)) + + doc = f""" + +Fund report - candidates & shortlist + +{"" if PLOTLY_JS else + ''} +
    + +
    +

    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).

    +
    """ + OUT.write_text(doc) + print(f"wrote {OUT} in {time.time() - t0:.0f}s " + f"({len(doc) / 1e6:.1f} MB)") + + +if __name__ == "__main__": + main() diff --git a/reports/fund_report.html b/reports/fund_report.html new file mode 100644 index 0000000..0d649b8 --- /dev/null +++ b/reports/fund_report.html @@ -0,0 +1,4298 @@ + + +Fund report - candidates & shortlist + + +
    + +
    +

    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.

    + +

    C01 · SCFZX +PGIM Securitized Credit Fund — CANDIDATE - idiosyncratic alpha, complements portfolio

    +
    +
    +

    Performance

    +
    periodfundreferenceIVVfund − ref
    Full history+38.9%+20.7%+187.2%+18.2%
    Last 5y+37.0%+19.2%+123.7%+17.8%
    Last 1y+5.1%+3.6%+20.7%+1.5%
    2022 bear mkt-2.4%+0.6%-24.5%-3.0%
    2023 rate shock+1.4%+1.3%-9.9%+0.1%
    2024 vol spike+0.4%+0.3%-8.4%+0.1%
    2025 tariff crash-0.5%+0.6%-18.8%-1.0%
    2026 Q1 drawdown+0.4%+0.6%-8.9%-0.2%
    2021+5.5%-0.1%+30.6%+5.6%
    2022-1.0%+1.4%-18.6%-2.4%
    2023+9.9%+4.9%+26.9%+5.0%
    2024+9.3%+5.2%+25.7%+4.1%
    2025+5.7%+4.1%+18.1%+1.6%
    2026+3.1%+2.3%+12.4%+0.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.

    +

    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).

    Reference model, full history: R² = 0.30, alpha = +1.5% (t = +1.7).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.06, vblix +0.05, hyg -0.01, fxe -0.01, vmbix -0.01, pff +0.01 - net cash +0.93.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.10High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VMBIX -0.05Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VEA -0.02Intl developed ex-US (Vanguard)developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
    VBLIX +0.35VIX futures (pure vol axis)crash insurance / short-vol funding; positive loading = long-vol (rises in panic), negative = short-vol carry
    TLT -0.2320+ year Treasuries (long duration)levered duration: big moves on rate expectations, steepener/bull-steepener exposure
    AGG -0.13Aggregate 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.

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    SCFZX (this fund)+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)
    SHRIX — Stone Ridge High Yield Reinsurance Risk +67.7%+4.0%-19.7%0.00+6.2% (t=+3.1)n/a

    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.17, alpha = +5.1% (t = +3.6).

    Return-driver signature (34 sleeves, for clustering context): hyg -0.05, vweax +0.04, vwo +0.04, dbmf +0.02, lqd -0.02, vblix +0.02 - net cash +0.91.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWO +0.06Emerging-market equityEM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
    QQQ -0.04US 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.12High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    TLT -0.0220+ 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    EGRIX (this fund)+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    SHRIX — Stone Ridge High Yield Reinsurance Risk +67.7%+4.0%-19.7%0.00+6.2% (t=+3.1)n/a

    Disadvantages vs peers: 5y return trails the best peer by 105pp.

    +
    +

    C03 · PULS +PGIM Ultra Short Bond ETF — CANDIDATE - idiosyncratic alpha, complements portfolio

    +
    +
    +

    Performance

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.24, alpha = +0.6% (t = +1.5).

    Return-driver signature (34 sleeves, for clustering context): vmbix +0.01, ief +0.01, agg +0.01, tip +0.01, shy +0.01, emb +0.00 - net cash +0.96.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VMBIX +0.04Agency RMBS (mortgage-backed)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.

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    PULS (this fund)+23.5%+3.3%-5.9%0.16+0.8% (t=+2.9)IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)

    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.30, alpha = +4.5% (t = +3.1).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.12, emb +0.11, efa +0.05, vblix +0.04, pff +0.04, vwo +0.03 - net cash +0.74.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.52High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VWO +0.04Emerging-market equityEM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
    QQQ -0.04US 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.05Intl developed ex-US (MSCI EAFE)developed-market equities outside the US; same exposure as VEA via a different index provider
    IEF -0.067-10 year Treasuries (core duration)the core rate bet: price moves when the Fed path changes
    GSG -0.02Broad 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.18, alpha = +2.5% (t = +2.6).

    Return-driver signature (34 sleeves, for clustering context): vmbix +0.04, ief +0.03, tip +0.03, vweax +0.03, agg +0.03, shy +0.02 - net cash +0.75.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VMBIX +0.22Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VWEAX +0.09High-yield corporate bondscredit 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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.

    +
    +

    C06 · RPIFX +T. Rowe Price Institutional Floating Rate Fund — CANDIDATE - idiosyncratic alpha, complements portfolio

    +
    +
    +

    Performance

    +
    periodfundreferenceIVVfund − ref
    Full history+156.9%+26.5%+671.6%+130.4%
    Last 5y+39.5%+19.2%+123.7%+20.3%
    Last 1y+4.4%+3.6%+20.7%+0.8%
    2022 bear mkt-3.0%+0.6%-24.5%-3.7%
    2023 rate shock+1.0%+1.3%-9.9%-0.3%
    2024 vol spike-0.0%+0.3%-8.4%-0.3%
    2025 tariff crash-1.6%+0.6%-18.8%-2.2%
    2026 Q1 drawdown-0.6%+0.6%-8.9%-1.2%
    2021+4.7%-0.1%+30.6%+4.8%
    2022-0.7%+1.4%-18.6%-2.1%
    2023+12.6%+4.9%+26.9%+7.6%
    2024+9.2%+5.2%+25.7%+4.0%
    2025+6.7%+4.1%+18.1%+2.6%
    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.45, alpha = +2.1% (t = +2.5) vs the fitted reference mix (next section).

    Reference model, full history: R² = 0.55, alpha = +2.2% (t = +2.2).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.11, vblix +0.07, pff +0.02, fxe -0.01, vwo +0.01, xlp -0.01 - net cash +0.82.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.45High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VMBIX -0.10Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    FXE -0.03Long euros vs the dollarEUR/USD: carries the euro interest-rate differential
    IWM -0.01US small cap (Russell 2000)small-cap cycle: domestic credit, margin pressure, IPO window

    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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.18, alpha = +3.0% (t = +3.9).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.03, iwm +0.02, vmbix +0.01, tip +0.01, pff +0.01, xlp -0.01 - net cash +0.87.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.11High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    IWM +0.03US small cap (Russell 2000)small-cap cycle: domestic credit, margin pressure, IPO window
    FXE +0.02Long euros vs the dollarEUR/USD: carries the euro interest-rate differential
    VMBIX +0.03Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VNQ -0.01US REITsphysical real estate: rents vs rates, leverage in the property sector; equity-like income
    VWO +0.01Emerging-market equityEM 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.

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    WMNUX (this fund)+30.2%+4.5%-7.6%0.38+1.4% (t=+2.4)IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)

    Disadvantages vs peers: 5y return trails the best peer by 134pp; deeper drawdown than the calmest peer (-7.6% vs -14.2%).

    +
    +

    C08 · PRFRX +T. Rowe Price Floating Rate Fund — CANDIDATE - idiosyncratic alpha, complements portfolio

    +
    +
    +

    Performance

    +
    periodfundreferenceIVVfund − ref
    Full history+90.9%+24.7%+674.8%+66.2%
    Last 5y+38.1%+19.2%+123.7%+18.9%
    Last 1y+4.4%+3.6%+20.7%+0.7%
    2022 bear mkt-3.0%+0.6%-24.5%-3.6%
    2023 rate shock+1.0%+1.3%-9.9%-0.4%
    2024 vol spike-0.0%+0.3%-8.4%-0.3%
    2025 tariff crash-1.7%+0.6%-18.8%-2.3%
    2026 Q1 drawdown-0.8%+0.6%-8.9%-1.4%
    2021+4.5%-0.1%+30.6%+4.6%
    2022-0.7%+1.4%-18.6%-2.1%
    2023+12.2%+4.9%+26.9%+7.3%
    2024+8.8%+5.2%+25.7%+3.6%
    2025+6.5%+4.1%+18.1%+2.3%
    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.46, alpha = +1.9% (t = +2.3) vs the fitted reference mix (next section).

    Reference model, full history: R² = 0.49, alpha = +2.0% (t = +2.0).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.11, vblix +0.07, pff +0.02, fxe -0.01, vwo +0.01, iwm -0.01 - net cash +0.83.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.46High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VMBIX -0.11Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    IWM -0.01US small cap (Russell 2000)small-cap cycle: domestic credit, margin pressure, IPO window
    FXE -0.03Long euros vs the dollarEUR/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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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.

    +
    +

    C09 · FEMDX +Franklin Emerging Market Debt Opportunities Fund — CANDIDATE - idiosyncratic alpha, complements portfolio

    +
    +
    +

    Performance

    +
    periodfundreferenceIVVfund − ref
    Full history+286.5%+30.2%+771.6%+256.4%
    Last 5y+52.0%+19.2%+123.7%+32.8%
    Last 1y+17.0%+3.6%+20.7%+13.4%
    2022 bear mkt-16.1%+0.6%-24.5%-16.7%
    2023 rate shock-2.9%+1.3%-9.9%-4.2%
    2024 vol spike-0.7%+0.3%-8.4%-1.0%
    2025 tariff crash-4.1%+0.6%-18.8%-4.7%
    2026 Q1 drawdown-2.0%+0.6%-8.9%-2.6%
    2021+1.3%-0.1%+30.6%+1.4%
    2022-8.9%+1.4%-18.6%-10.3%
    2023+15.2%+4.9%+26.9%+10.3%
    2024+12.1%+5.2%+25.7%+7.0%
    2025+15.3%+4.1%+18.1%+11.2%
    2026+10.2%+2.3%+12.4%+7.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.

    +

    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).

    Reference model, full history: R² = 0.37, alpha = +3.9% (t = +2.3).

    Return-driver signature (34 sleeves, for clustering context): emb +0.13, vweax +0.10, efa +0.06, vwo +0.06, fxe +0.04, vblix +0.04 - net cash +0.68.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.42High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VWO +0.08Emerging-market equityEM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
    FXE +0.05Long euros vs the dollarEUR/USD: carries the euro interest-rate differential
    GSG -0.03Broad commodities (SPDR)same commodity exposure as DBB via a different fund
    QQQ -0.05US 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.07Intl 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.30, alpha = +1.7% (t = +2.6).

    Return-driver signature (34 sleeves, for clustering context): vmbix +0.05, vweax +0.04, ief +0.03, agg +0.03, vwo +0.02, tip +0.02 - net cash +0.71.

    Screen verdict: CANDIDATE - idiosyncratic alpha, complements portfolio

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VMBIX +0.21Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VEA +0.04Intl developed ex-US (Vanguard)developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
    QQQ -0.03US 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.11High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    VWO +0.03Emerging-market equityEM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
    GSG -0.01Broad 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.18, alpha = +2.6% (t = +4.4).

    Return-driver signature (34 sleeves, for clustering context): vweax +0.05, vmbix +0.03, pff +0.03, vblix +0.03, vnq +0.02, ief +0.02 - net cash +0.77.

    Screen verdict: CANDIDATE (semi-alpha: mostly explained by net exposure)

    +

    The reference mix - and what it exposes you to

    +
    loadingwhat it iswhat it exposes you to
    VMBIX +0.16Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VWEAX +0.19High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    IVV -0.04US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VNQ +0.02US REITsphysical 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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.

    +
    +

    S01 · ATESX +Anchor Risk Mgd Equity Strategies Instl

    +
    Strategy (excerpt from the filing) +
    +

    Performance

    +
    periodfundreferenceIVVfund − ref
    Full history+120.8%+25.0%+312.7%+95.8%
    Last 5y+28.2%+19.2%+124.4%+9.0%
    Last 1y+4.0%+3.6%+21.0%+0.4%
    2022 bear mkt-2.2%+0.6%-24.5%-2.8%
    2023 rate shock-5.7%+1.3%-9.9%-7.0%
    2024 vol spike-5.2%+0.3%-8.4%-5.5%
    2025 tariff crash-4.9%+0.6%-18.8%-5.5%
    2026 Q1 drawdown-2.7%+0.6%-8.9%-3.3%
    2021+12.6%-0.1%+30.6%+12.7%
    2022-10.0%+1.4%-18.6%-11.4%
    2023+8.2%+4.9%+26.9%+3.3%
    2024+8.3%+5.2%+25.7%+3.1%
    2025+5.6%+4.1%+18.1%+1.5%
    2026+2.7%+2.3%+12.7%+0.4%

    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

    +
    loadingwhat it iswhat it exposes you to
    QQQ +0.45US 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.22US 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.

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    ATESX (this fund)+28.2%+8.3%-12.9%TAXABLE
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): dbmf +0.17, efa +0.15, vweax +0.14, xlp -0.13, fxy -0.11, dbb +0.10 - net cash +0.52.

    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

    +
    loadingwhat it iswhat it exposes you to
    IVV +0.17US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VEA +0.41Intl developed ex-US (Vanguard)developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
    FXY -0.26Long yen vs the dollarUSD/JPY: carries the Japan rate differential; carry-trade crowding risk
    FXE -0.30Long euros vs the dollarEUR/USD: carries the euro interest-rate differential
    GLD +0.13Goldcrisis/inflation hedge; real-rate sensitive, no yield
    DJP -0.09Natural gasa 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    ATRFX (this fund)+47.5%+5.0%-35.2%IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): qqq +0.04, ivv +0.03, xlf +0.03, hyg +0.02, xly +0.02, iwm -0.02 - net cash +0.80.

    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

    +
    loadingwhat it iswhat it exposes you to
    IVV +0.21US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VWEAX +0.06High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    IWM -0.01US small cap (Russell 2000)small-cap cycle: domestic credit, margin pressure, IPO window
    QQQ -0.02US 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.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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +1.98 (n=8, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    CVSIX (this fund)+30.1%+5.5%-20.8%TAXABLE (defers to LTCG)
    BATPX — BATS: Interest Rate Hedge Series+56.0%+2.0%-24.7%0.95+0.5% (t=+0.7)n/a
    RYMHX — Inverse Mid-Cap Strategy Fund-37.0%-10.1%-95.1%0.67+0.9% (t=+0.2)n/a
    RYJUX — Inverse Government Long Bond Strategy Fu+96.3%-3.4%-84.6%0.96-0.1% (t=-0.1)n/a
    RYAIX — Inverse NASDAQ-100 Strategy Fund-57.2%-14.2%-98.8%0.97-0.7% (t=-0.5)n/a

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): ivv +0.19, qqq +0.19, xlk +0.17, xlf +0.10, xlv +0.08, xly +0.06 - net cash +0.07.

    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

    +
    loadingwhat it iswhat it exposes you to
    IVV +1.00US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VNQ -0.05US REITsphysical real estate: rents vs rates, leverage in the property sector; equity-like income
    QQQ +0.05US 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): vweax +0.13, efa +0.10, vblix +0.08, xlf +0.08, xle +0.07, vwo +0.06 - net cash +0.37.

    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

    +
    loadingwhat it iswhat it exposes you to
    VEA +0.16Intl developed ex-US (Vanguard)developed-market equities outside the US (EU, Japan, UK); FX-hedged-off, currency moves matter
    VWEAX +0.47High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    QQQ -0.36US 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.43US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    DJP +0.05Natural gasa single volatile commodity: winter/hedging cycles
    VWO +0.07Emerging-market equityEM 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): vmbix +0.02, ief -0.02, xlf +0.02, dbmf +0.02, vwo +0.01, gld -0.01 - net cash +0.95.

    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

    +
    loadingwhat it iswhat it exposes you to
    EFA +0.04Intl developed ex-US (MSCI EAFE)developed-market equities outside the US; same exposure as VEA via a different index provider
    FXE -0.05Long euros vs the dollarEUR/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.

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +1.98 (n=8, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    PMORX (this fund)+37.3%+4.3%-19.3%IRA
    BATPX — BATS: Interest Rate Hedge Series+56.0%+2.0%-24.7%0.95+0.5% (t=+0.7)n/a
    RYMHX — Inverse Mid-Cap Strategy Fund-37.0%-10.1%-95.1%0.67+0.9% (t=+0.2)n/a
    RYJUX — Inverse Government Long Bond Strategy Fu+96.3%-3.4%-84.6%0.96-0.1% (t=-0.1)n/a
    RYAIX — Inverse NASDAQ-100 Strategy Fund-57.2%-14.2%-98.8%0.97-0.7% (t=-0.5)n/a

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): vtv +0.21, qqq -0.16, efa +0.14, xly -0.14, xlf +0.13, iwm -0.12 - net cash +1.18.

    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

    +
    loadingwhat it iswhat it exposes you to
    QQQ -0.74US 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.83US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VNQ -0.25US REITsphysical real estate: rents vs rates, leverage in the property sector; equity-like income
    GSG +0.09Broad commodities (SPDR)same commodity exposure as DBB via a different fund
    FXY -0.26Long yen vs the dollarUSD/JPY: carries the Japan rate differential; carry-trade crowding risk
    VEA +0.19Intl 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +1.98 (n=8, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    QSPNX (this fund)+197.1%+7.7%-41.8%MIXED (check 1099)
    BATPX — BATS: Interest Rate Hedge Series+56.0%+2.0%-24.7%0.95+0.5% (t=+0.7)n/a
    RYMHX — Inverse Mid-Cap Strategy Fund-37.0%-10.1%-95.1%0.67+0.9% (t=+0.2)n/a
    RYJUX — Inverse Government Long Bond Strategy Fu+96.3%-3.4%-84.6%0.96-0.1% (t=-0.1)n/a
    RYAIX — Inverse NASDAQ-100 Strategy Fund-57.2%-14.2%-98.8%0.97-0.7% (t=-0.5)n/a

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): vweax +0.04, dbmf +0.02, fxy +0.02, emb +0.02, vblix +0.02, vmbix +0.02 - net cash +0.74.

    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

    +
    loadingwhat it iswhat it exposes you to
    VWEAX +0.16High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    AGG +0.12Aggregate bonds (Treasuries + IG credit)the core bond market: ~60% Treasuries, IG corporates, MBS; moderate duration
    VEA +0.03Intl 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    SVARX (this fund)+20.8%+6.1%-6.5%IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (check 1099)

    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.64, alpha = +1.0% (t = +1.9).

    Return-driver signature (34 sleeves, for clustering context): vmbix +0.08, vweax +0.08, ief +0.06, tlt +0.06, agg +0.05, emb +0.04 - net cash +0.42.

    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

    +
    loadingwhat it iswhat it exposes you to
    VMBIX +0.29Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    VWEAX +0.27High-yield corporate bondscredit spread cycle: HY junk yields, default risk in recessions, strong carry in stable times
    AGG +0.14Aggregate bonds (Treasuries + IG credit)the core bond market: ~60% Treasuries, IG corporates, MBS; moderate duration
    EFA +0.03Intl developed ex-US (MSCI EAFE)developed-market equities outside the US; same exposure as VEA via a different index provider
    QQQ -0.02US large growth (Nasdaq-100)growth/tech-heavy US equities; high sensitivity to earnings surprises and long-end rates (duration of growth cash flows)
    VBLIX +0.05VIX futures (pure vol axis)crash insurance / short-vol funding; positive loading = long-vol (rises in panic), negative = short-vol carry

    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.

    unclassified: Other 30%

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.31 (n=201, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    COSIX (this fund)+12.1%+5.5%-26.2%0.87+0.3% (t=+0.5)IRA
    SGYAX — SIIT HIGH YIELD BOND FUND+34.4%+4.9%-36.4%0.81+1.3% (t=+1.5)n/a
    WCPBX — Core Plus Income Fund+10.2%+3.4%-13.5%0.89+0.9% (t=+1.4)n/a
    MGVAX — NYLI MacKay U.S. Infrastructure Bond Fun+3.7%+3.8%-17.2%0.92+0.8% (t=+1.2)n/a
    HYSAX — PGIM Short Duration High Yield Income Fu+29.2%+4.4%-18.3%0.72+1.0% (t=+1.2)n/a

    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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): dbmf +0.18, vmbix -0.12, gsg +0.09, iwm +0.08, fxe -0.07, ief -0.07 - net cash +0.97.

    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

    +
    loadingwhat it iswhat it exposes you to
    IVV +0.26US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    VMBIX -0.60Agency RMBS (mortgage-backed)mortgage credit + prepayment/extension risk; the refi cycle
    GSG +0.11Broad commodities (SPDR)same commodity exposure as DBB via a different fund
    IWM +0.16US small cap (Russell 2000)small-cap cycle: domestic credit, margin pressure, IPO window
    FXE -0.18Long euros vs the dollarEUR/USD: carries the euro interest-rate differential
    VWEAX -0.22High-yield corporate bondscredit 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +1.98 (n=8, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    MBXIX (this fund)+69.4%+9.0%-31.7%TAXABLE (defers to LTCG)
    BATPX — BATS: Interest Rate Hedge Series+56.0%+2.0%-24.7%0.95+0.5% (t=+0.7)n/a
    RYMHX — Inverse Mid-Cap Strategy Fund-37.0%-10.1%-95.1%0.67+0.9% (t=+0.2)n/a
    RYJUX — Inverse Government Long Bond Strategy Fu+96.3%-3.4%-84.6%0.96-0.1% (t=-0.1)n/a
    RYAIX — Inverse NASDAQ-100 Strategy Fund-57.2%-14.2%-98.8%0.97-0.7% (t=-0.5)n/a

    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

    +
    periodfundreferenceIVVfund − 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).

    Reference model, full history: R² = 0.16, alpha = +1.6% (t = +2.7).

    Return-driver signature (34 sleeves, for clustering context): hyg -0.03, vweax +0.03, vwo +0.02, vblix +0.02, efa +0.01, ief -0.01 - net cash +0.99.

    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

    +
    loadingwhat it iswhat it exposes you to
    VWO +0.03Emerging-market equityEM corporate profits + EM currency + China/FX flows; high-vol, high-carry, dollar-sensitive
    IEF -0.077-10 year Treasuries (core duration)the core rate bet: price moves when the Fed path changes
    QQQ -0.02US 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.10High-yield corporate bondscredit 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

    +

    Peer comparison (same return-driver cluster)

    +

    Cluster: cash (net posn) +0.87 (n=91, k=30 grouping by return-driver signature).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    EAGMX (this fund)+38.9%+5.1%-9.3%0.07+2.6% (t=+2.4)IRA
    ENIAX — SIIT Opportunistic Income Fund+31.6%+1.9%-30.6%0.14+1.7% (t=+3.7)IRA
    QMNIX — AQR Equity Market Neutral Fund+164.2%+7.5%-38.8%0.27+12.3% (t=+3.6)n/a
    SCFZX — PGIM Securitized Credit Fund+37.0%+4.7%-17.2%0.34+2.2% (t=+3.5)IRA
    EGRIX — Eaton Vance Global Macro Absolute Return+59.7%+5.6%-14.2%0.07+5.2% (t=+3.2)MIXED (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

    +
    periodfundreferenceIVVfund − 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.

    +

    What drove the returns

    +

    Return-driver signature (34 sleeves, for clustering context): xlk +0.17, ivv +0.14, xlf +0.12, vtv +0.09, xlv +0.09, qqq +0.08 - net cash +0.06.

    Decomposition verdict: static sleeve mix (weights stable, ~fully explained)

    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

    +
    loadingwhat it iswhat it exposes you to
    IVV +1.20US large blend (S&P 500)core US equity market; the default 'own the economy' exposure
    QQQ -0.26US 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).

    fund5yCAGRmaxDDR² 5yalpha 5ytax
    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).

    +
    \ No newline at end of file