Skip to content
Finance
Skill

/risk-stress-test

Portfolio and position risk report — beta-weighted exposure, historical scenario replay (2008, March 2020, 2022 rate shock, 2025 tariff shock), parametric VaR / CVaR at 95 / 99 %, max-drawdown estimate, correlation-spike scenario, rate / USD / oil sensitivity, liquidity (days to

BOOST
From plugin
investskill
25034 skills
Install
$ npx -y skills add yennanliu/investskill --skill risk-stress-test --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/risk-stress-test

Context preview

The summary Claude sees to decide when to auto-load this skill.

Portfolio and position risk report — beta-weighted exposure, historical scenario replay (2008, March 2020, 2022 rate shock, 2025 tariff shock), parametric VaR / CVaR at 95 / 99 %, max-drawdown estimate, correlation-spike scenario, rate / USD / oil sensitivity, liquidity (days to

SKILL.md

risk-stress-test.SKILL.md
description: Portfolio and position risk report — beta-weighted exposure, historical scenario replay (2008, March 2020, 2022 rate shock, 2025 tariff shock), parametric VaR / CVaR at 95 / 99 %, max-drawdown estimate, correlation-spike scenario, rate / USD / oil sensitivity, liquidity (days to exit at 20 % of ADV), and a Risk Budget Score 0–10

Risk Stress Test — How Much Could This Portfolio Lose?

⚠️ Data Verification — Do This Before Any Analysis

Before running any analysis, always retrieve the latest market data for the ticker:

1. **Fetch current price** — use web search or ask the user for the live price of every holding, so weights are computed on today's values, not on cost basis. Never assume a price from training data. 2. **Confirm the risk inputs** — for each holding: 1-year beta to SPY, annualized volatility (σ), 30-day average daily volume (ADV) in shares and dollars, sector, and the current weight. These are the raw material of every number below; if they are missing, ask for them or state the proxy used (sector ETF beta / σ) next to the figure. 3. **State your data source** — fill in the `Data & Sources` header (next section) so the origin, as-of date, retrieval path, and confidence of every figure are explicit at the top of the output. 4. **Flag stale data explicitly** — if live data is unavailable, display this warning before proceeding:

> ⚠️ **Live data unavailable.** The following analysis uses training-data estimates which may be significantly out of date. Verify all prices and metrics before making any decisions.

Never silently substitute training-data estimates for current prices. When in doubt, ask the user to paste the latest quote.

---

📋 Data & Sources Header — Open Every Output With It

The first thing in the output is this provenance block, filled in — never left as placeholders. It is the standard documented on the [Data & Accuracy](https://yennanliu.github.io/InvestSkill/data-and-accuracy.html) page and the first thing `result-validator` looks for:

Data & Sources
  As of:      <date the figures represent, e.g. 2026-06-30>
  Source:     <primary docs — SEC EDGAR 10-K/10-Q, company IR, FRED, exchange data …>
  Retrieval:  <pasted by user | web/tool retrieval | model memory>
  Confidence: <HIGH | MEDIUM | LOW>
  • `Retrieval: model memory` must be paired with `Confidence: LOW` — memory is a placeholder until confirmed against a primary source.
  • Mixed sources: list each with its own as-of date rather than blending them.
  • Sources disagree on the same figure (a closing price, a deal term): prefer the primary source (SEC filing, company release, exchange data) over an aggregator, then the most recent dated one. Show both values with their sources and dates, say which you used and why, and never average them.
  • Data the user pasted is reported as `pasted by user`; do not upgrade its confidence beyond what the user's own source supports.

---

Overview

Every other framework in the catalog asks whether a holding is *good*. This one asks the question that decides whether the investor is still around to find out: **how much can the whole book lose, how fast, and can it be sold when it has to be?**

`portfolio-review` covers allocation, drift, and concentration. `economics-analysis` names the regime. Neither converts a list of holdings into a dollar figure for a bad month, replays the portfolio through the crashes that actually happened, or tells the investor how many days it would take to get out. This skill does exactly that and nothing else — it is a **risk report, not a recommendation**. Its verdict is a Risk Budget Score: how far the portfolio's measured risk sits inside (or outside) the drawdown the investor has said they can tolerate.

**What an assistant can and cannot compute here.** A language model cannot recall a covariance matrix for a specific set of tickers, and must not pretend to. The skill therefore works from **inputs the user pastes or the assistant retrieves** — beta, σ, ADV, weights — and shows every formula it applies, so the arithmetic can be checked line by line. Historical scenario magnitudes are approximate index-level figures and are labelled as such; the reader confirms the ones that matter.

Pairs with: `portfolio-review` (what to hold), `economics-analysis` (which regime the stress is most likely to come from), `position-ladder` (the share-count ceiling this report may lower), `thesis-tracker` (whether a drawdown is a thesis event or just volatility), and `tax-lens` (what a forced de-risking would cost after tax).

---

1. Inputs

| Input | Required | Default if unstated | |-------|----------|---------------------| | Holdings with weights (or share counts + prices) | ✅ | — | | Per-holding beta (1Y vs. SPY), annualized σ, 30-day ADV | ✅ (paste, retrieve, or state the proxy) | sector-ETF beta / σ, flagged `proxy` | | Total portfolio value | ✅ (for dollar figures) | express everything in % | | Max-drawdown tolerance (the risk budget) | recommended | propose one from the investor profile: 15 % conservative · 25 % balanced · 40 % aggressive | | Horizon | optional | 1 day and 1 month | | Benchmark | optional | SPY | | Cash / bonds / hedges (puts, inverse ETFs) | optional | assumed zero — say so |

Ask for missing risk inputs rather than inventing them. If the user cannot supply β or σ for a name, use the sector ETF's figures and mark every derived number `(proxy)`.

---

2. Framework

Phase 1 — Exposure map (what the book actually is)

Weights first, then what they load onto:

Weight_i        = Value_i / Portfolio Value
β_p (net beta)  = Σ Weight_i × β_i
$-beta to SPY   = β_p × Portfolio Value          (dollar move for a 1.00 % SPY move × 100)
Sector weights  = Σ Weight_i by GICS sector      (flag any sector > 30 %)
Top-3 weight    = sum of the three largest positions

| Position | Weight | β | σ (ann.) | Sector | Weight × β | ADV ($) | |----------|--------|---|----------|--------|------------|--

Read more
Ships withinvestskill

Professional investment analysis frameworks for US stocks — works on every AI platform

Get the whole plugin

Other skills on investskill.