Reactive portfolio performance attribution: decompose a drawdown into market/regime, factor/thematic, and stock-specific components. Uses score-vs-price divergence to determine if the loss is fundamental or transient, then gives conditional advice. Triggered when a client asks 'why am I down X%?'. Holdings as [{symbol, weight}]. NOT for proactive health checks (use /parallax-portfolio-checkup), not for forward-looking reviews (use /parallax-client-review), not for hypothetical scenarios (use /parallax-scenario-analysis).
Reactive performance attribution when a client asks "why am I down?" Decomposes the loss into market/regime, factor/thematic, and stock-specific layers, then determines if the drawdown is fundamental or noise.
/parallax-explain-portfolio [{"symbol":"AAPL.O","weight":0.25},{"symbol":"JPM.N","weight":0.20},{"symbol":"MSFT.O","weight":0.30},{"symbol":"JNJ.N","weight":0.25}] "I'm down about 4% this month"
The second argument is the client's stated concern — used to anchor the lookback period and validate against actual returns.
Execute using mcp__claude_ai_Parallax__* tools. JIT-load _parallax/parallax-conventions.md for execution mode, fallback patterns, and macro reasoning.
Infer lookback period from the client's statement ("this month" → ~21 trading days, "this week" → 5 days, "this quarter" → ~63 days). Default to 21 days if ambiguous.
Call export_price_series for each holding (parallel) with the inferred period. Compute:
Compare computed return against the client's stated figure. If they diverge significantly (>1%), note the discrepancy.
| Tool | Parameters | Purpose |
|---|---|---|
get_telemetry | fields: regime_tag, signals, commentary.headline, commentary.mechanism, divergences | Current market regime — is the whole market down? |
list_macro_countries | — | Check coverage for home markets |
quick_portfolio_scores | holdings | Current factor profile (may fail for niche portfolios — not blocking) |
After Batch: call macro_analyst with component="tactical" for each home market (cap at 2). This establishes the macro backdrop: is this a market-wide drawdown, sector rotation, or idiosyncratic?
If quick_portfolio_scores fails or returns <50% coverage, don't retry — Step 3's get_score_analysis per holding is the more reliable factor source and will provide all needed score data.
Call get_score_analysis for each holding (parallel) with weeks as int 13 (lookback window, non-default — see conventions §0.1). This is the primary factor data source — more reliable than quick_portfolio_scores for score trend analysis.
Analyze:
Cross-reference with get_telemetry divergences — do any thematic baskets in the telemetry data match the portfolio's exposure?
For the top 3 detractors by weighted contribution (parallel):
| Tool | Parameters |
|---|---|
get_news_synthesis | symbol |
get_peer_snapshot | symbol |
Note on get_peer_snapshot: The tool may return a different company as the "target" (see Convention #2). Extract the queried stock's scores from wherever it appears in the peer list — do not trust the target_company field blindly. Cross-check against get_company_info if the name looks wrong.
Determine for each: is this stock down because of (a) broad market, (b) sector/factor rotation, or (c) company-specific news?
For each holding, compare:
Important: If a major event occurred after the last score data point (e.g., earnings miss, indictment, regulatory action), note that scores may not yet reflect this development. The divergence classification still applies but should be flagged as provisional for affected holdings.
Classify each holding:
| Price | Scores | Interpretation | Advice |
|---|---|---|---|
| Down | Stable/Up | Transient — market mispricing, fundamentals intact | Hold or add |
| Down | Down | Fundamental — deterioration confirmed by scores | Investigate, consider trim |
| Down | Mixed | Ambiguous — some factors deteriorating, others stable | Monitor, dig deeper |
Portfolio-level verdict: if majority of weighted holdings show "Transient" → overall drawdown is likely noise. If majority show "Fundamental" → drawdown reflects real deterioration.
Based on the verdict:
If transient (scores stable, regime-driven):
If fundamental (scores declining):
/parallax-deep-dive), trim, or replacement.If mixed:
Keep tone calm and explanatory. The client is worried — the output should reduce anxiety with clarity, not amplify it with jargon.
Always end with: "This is informational analysis based on Parallax factor scores, not investment advice. All outputs should be reviewed by qualified professionals before any investment decisions."