Technical newsroom · research ledger
Research Ledger
Dated briefs on API changes, factor research, and formal methodology releases (e.g. Technical Note RM-2026-01). Entries align with production logs where noted; tone is technical and expository.
Subscribe via RSS- [Factor Research]
Part 2 published: risk structure in 13F filings across five allocator styles
Mirrored the Medium series Part 2 on riskmodels.org — market, thematic, and stock-specific risk across Berkshire, Ackman, Lone Pine, Tiger Global, and Baupost, with explicit treatment of the 45-day 13F filing lag. Multi-row L3 attribution tables and cumulative return strips render from the shared Plotly artifact pipeline.
- [API Update]
AOM portfolio chains — single snapshot call for multi-step analyze flows
riskmodels-py 0.3.3 extends the Analysis Object Model executor to portfolio subjects: composition collapses to one POST /api/snapshot instead of per-ticker fan-out, so chains like risk_decomposition → hedge_action resolve in a single billed request. date_range_preset maps to lookback_days (mtd→21, ytd/1y→252, 3y→756, 5y→1260).
- [API Update]
POST /api/snapshot — canonical JSON portfolio snapshot
New JSON-only portfolio snapshot endpoint (type: portfolio): L3 variance decomposition, hedge ratios, frozen-weight daily attribution strips, cumulative return and drawdown over lookback_days, and concentration-style risk_summary. Weights-only or shares-only positions; bills as portfolio-risk-snapshot ($0.25). Coexists with GET /api/snapshot/{ticker} for single-name DD assets.
- [API Update]
POST /decompose — agent-first four-bet exposure wrapper
Agent-friendly wrapper over the metrics DAL returns four additive layers (market, sector, subsector, residual), each with er, hr, and hedge_etf, plus a top-level hedge map (ETF → dollar ratio). Same billing profile as GET /metrics/{ticker}; wired through OpenAPI, MCP schema decompose-v1, and RiskModelsClient.decompose().
- [API Update]
Agentic layer: MCP live-data tools, CLI-first onboarding, and per-key daily spend caps
Released the agentic interface for ERM3. The RiskModels MCP server now exposes get_l3_decomposition, get_metrics, and get_portfolio_risk_snapshot as first-class tools consumable by Claude Desktop, Cursor, and Zed; every response carries a meter envelope (cost, remaining balance, rate-limit remaining, data_as_of) so agents can self-throttle. The riskmodels CLI gained an mcp-config subcommand that prints paste-ready client JSON. Abuse protection extended with per-UTC-day spend caps (agent_accounts.daily_spend_cap) and per-key overrides (agent_api_keys.daily_spend_cap_usd) for scoped rm_agent_mcp_* keys; rate-limit headers now ship on every response, not only on 429. Data continues to stream from GCP zarr (historical) and Supabase security_history_latest (snapshot) with daily end-of-day refresh.
- [Methodology Paper]
RM-2026-01 published: Variance partition and attribution standards (ERM3 specification)
Released formal Technical Note RM-2026-01 on the Methodology page—a citable PDF artifact for institutional allocators: document header, variance identity (σ_p² = β_p² σ_m² + σ_ε²) with KaTeX rendering, R² / tracking error / active share definitions, Exhibit A, ERM3 context, institutional license language, and a formal References bibliography (Sharpe; Fama–French; Brinson). Use Download PDF to save; browser Print → Save as PDF remains available for an alternate export path.
- [Factor Research]
Automated residual variance detection in regional banks
Implemented rolling estimation of σ_ε² concentration within GICS regional banking sleeves. Observed elevated residual loadings where broad market β remained moderated. Results are codified in the beta-gaps cross-section filter used by the production metrics endpoint.
- [Factor Research]
Position-level marginal contribution to σ_ε² — subsector drill-through
Extended ERM3 output to include per-holding marginal contribution to residual variance. Enables allocator review of subsector concentration at the position level, complementing fund-level prospectus alignment diagnostics.
- [API Update]
Version 1.4: factor migration windows and sleeve attribution
Implemented 36-month rolling factor loading panels for migration diagnostics. The prior release’s quarterly snapshots were superseded; backward compatibility is maintained for preset prospectus workflows.
- [Methodology Paper]
Definitional identity σ_p² = β²σ_m² + σ_ε² in allocator reporting
Codified the partition as a model-dependent identity rather than a performance judgment. Observed that R² and tracking error must be read jointly with residual variance when prospectus categories are coarse.
- [Factor Research]
Subsector concentration under benchmark-hugging configurations
Observed thin active-share sleeves carrying disproportionate σ_ε² when overlap with the cap-weighted benchmark exceeded 85%. Implemented marginal contribution fields in simulation payloads for diligence review.
- [API Update]
Global ticker coverage expansion for decomposition jobs
Implemented expanded universe coverage for N-factor decomposition requests. Latency targets for batch attribution remain unchanged; rate limits are documented in the production changelog.
- [API Update]
Version 1.2: ERM3 engine integration for N-factor decomposition
Integrated the ERM3 multi-factor residual variance engine into the production API. N-factor decomposition requests now route through ERM3; 36-month rolling estimation and GICS-aligned subsector nodes are documented in the methodology note.
- [Methodology Paper]
Variance partition standard: single-factor vs. multi-factor residual specifications
Codified the choice between single-factor (CAPM) and multi-factor (Fama-French) residual specifications for allocator reporting. Concluded that subsector concentration diagnostics require multi-factor decomposition; ERM3 design reflects this standard.
Ledger entries are programmatically verified via RiskModels.app production logs.