v2.7 · Tier 1-4Live Multi-factor weighted scoring across 14 asset classes.
Produces a 0-100 composite score per security with a categorical tier (Strong Buy / Buy / Hold / Sell / Strong Sell). Drives every recommendation surface: /now, /forecast, /signals, /security?ticker=X, /strategies, /heatmap.
data/seed.js — one of 14 classes (Stocks, Bonds, Crypto, CryptoPerp, Leveraged ETFs, Inverse ETFs, Volatility, Income ETFs, Mutual Funds, Commodities, REITs, FX, Rates, International){
ticker: "AAPL",
cls: "Stocks",
score: 70.3, // 0..100
tier: "Buy", // categorical
alpha: { netBps: 14, gross: 18, drag: 4 },
regime: "risk-on",
topContribs: [ // factor decomposition (Bible §6.5)
{ factorId: "F05_mom3m", value: +18, unit: "bps" },
{ factorId: "F12_breadth", value: +6, unit: "bps" },
{ factorId: "F23_liquidity", value: -2, unit: "bps" },
// …top 5
],
asof: 1714082400000,
ts: 1714082400000
}
25-30 factors per asset class, each tagged with tier (1-4) and weight (sums to 1.0 ± 0.05):
| Tier | Domain | Weight range | Examples |
|---|---|---|---|
| Tier 1 | Macro / cross-asset | 0.30+ | F01_macro_mood, F02_dxy, F03_yield_curve |
| Tier 2 | Sector / industry | 0.20+ | F11_sector_rotation, F12_breadth, F15_vol_regime |
| Tier 3 | Instrument fundamentals | 0.15+ | F22_earnings, F23_liquidity, F26_insider |
| Tier 4 | Sentiment / technical | 0.05+ | F05_mom3m, F08_news_velocity, F31_funding |
Before weighting, factors are orthogonalized to remove cross-factor correlation via Gram-Schmidt decomposition. This prevents high-correlation factor pairs from over-weighting their shared signal and ensures each factor contributes independent information. Post-orthogonalization, pairwise correlations ρ are capped: if ρ > 0.7 between two factors, the lower-IC factor's weight is damped by 70%.
Each factor is assigned an SNR from walk-forward out-of-sample Information Coefficient (IC) breakdowns:
Low-SNR factors are deprecated semi-automatically — weights decay over 4 weeks unless fresh OOS validation brings SNR above 0.5.
IC: Rank correlation between factor value and forward 1-30d returns. Reported per fold via walk-forward. Positive IC = predictive edge; |IC| > 0.03 is meaningful.
ICIR: IC divided by its standard deviation across folds. ICIR > 0.5 is credible; ICIR < 0.2 is noise. Aggregate verdict gates trust in the model via the Walk-Forward page.
Factor weights are recomputed monthly, breaking down by regime (risk-on / risk-off / transition) via engine/ensembleRegime.js. When regime-specific IC for any factor drops >20% vs baseline, an alert flags potential regime-dependency. This helps explain "why did my edge disappear?" — often the answer is "market regime changed, and your factor is regime-dependent."
Two cap-tier-aware factors are now part of the ensemble, both backed by the canonical classifier in engine/cap-tier.js:
Annualized premia (bps, unconditional) per the cap-tier engine:
Regime conditioning per Cooper, Gulen & Schill (2008): risk-on amplifies small/micro premium (×1.3–1.4); risk-off inverts it (×0.4–0.6, flight-to-quality). Mega caps gain a defensive bid in risk-off.
Idiosyncratic-vol multiplier per Bali, Engle & Murray (2016): mega 0.85× → nano 2.4×. Used by engine/prescience.js to widen forecast 95% CI bands for smaller caps so displayed uncertainty reflects tier-aware idio-risk.
Microstructure friction floor per Hasbrouck (2009) and Brogaard, Hendershott & Riordan (post-decimalization update): mega 3 bps → nano 35 bps round-trip. Used by engine/playbook.js Gate 1 (alpha sufficiency) so micro caps require materially higher alpha to clear costs.
Sources cited: Banz (1981), Fama-French (1992, 2015), Cooper-Gulen-Schill (2008), Asness-Frazzini-Israel-Moskowitz-Pedersen (2018), Bali-Engle-Murray (2016), Hasbrouck (2009).
Different factors carry different weights at different regimes. Risk-on rewards momentum (F05_mom3m); risk-off rewards quality (F22_earnings, F26_insider). Layer-conditional weighting lives in engine/v76-layer-conditional.js. Weight shifts are logged so you can audit why confidence changed on a single ticker.
Each class has a profile (vol-scale, half-life, day-ceiling, market-days-per-year) plus class-specific factors:
data/seed-extended-curated.js.Calibration scorecard engine (v104) shipped 2026-04-26; populates Brier scores after 30 days of decision data accumulates. Per-factor reliability tracked in engine/calibrationLive.js.
/replay pagethv2-overrides localStorage record| Version | Date | Change |
|---|---|---|
| v2.7 | 2026-04-26 | 14-class profile + alerts wiring fix + decision-replay |
| v2.6 | 2026-04-25 | Layer-conditional LS6 + 14 per-asset modules |
| v2.5 | 2026-04-24 | Prescience integration + playbook |
| v2.4 | 2026-04-22 | Factor extension v33-v45 |
engine/factors.js, engine/orchestrator.js, engine/regime.js, engine/v76-layer-conditional.js, engine/v77-v95-*.js (per-asset modules)
Reviewed: 2026-04-26 · Next: 2026-07-26 · Per Bible §15.61