# Financial Analysis

> Use when asked for a stock analysis, equity deep dive, company valuation, or investment research on a publicly listed company — including requests to "analyze", "research", "value", or "build a thesis on" a ticker, or to refresh an existing analysis after earnings or a large price move.

- Skill: `stmarks99/financial-analysis` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add stmarks99/financial-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/stmarks99/financial-analysis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- License: MIT
- Author: StMarks99 (https://skillmd.com/u/stmarks99)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/stmarks99/financial-analysis

---


# Financial Analysis — Hedge-Fund-Grade Equity Deep Dive

> **Disclaimer — read before use.** This skill produces educational research
> output, not financial advice. Verdicts, entry zones, and position sizes are
> analytical exercises generated by a language model from third-party data that
> may be wrong, stale, or incomplete. Nothing here is a recommendation to buy
> or sell any security. Verify primary filings before acting on anything, and
> consult a licensed adviser where appropriate. Use at your own risk.

## Overview

A complete bottom-up equity analysis workflow. One run produces **two files**:

| File | Content | Template |
|---|---|---|
| `TICKER.md` | Qualitative thesis: supply chain, operating model, pricing power, customer concentration, management, capital allocation, 12–18 month thesis roadmap (named catalyst + sector triggers + checkpoint schedule), score card | [references/qualitative-template.md](references/qualitative-template.md) |
| `TICKER_deep.md` | Quantitative: market snapshot, 4-year financials, Damodaran DCF (bear/base/bull), quant metrics + Piotroski + Altman, Schilit forensics, technicals, Porter's Five Forces, integrated verdict | [references/deep-template.md](references/deep-template.md) |

Framework arithmetic (WACC, F-Score, Z-Score variants, Schilit thresholds,
Porter scoring) lives in [references/frameworks.md](references/frameworks.md).

**Completeness is the point.** Every section in both templates is mandatory.
If data is unavailable, write the section anyway and state the limitation —
never silently omit it.

## Exit Discipline — the stance this skill takes

This skill encodes a **pyramid-on-winners / structural-sell-only** philosophy.
If you prefer trimming on valuation or price targets, this skill is not for
you — that is a legitimate style; it just isn't this one.

1. Trims and exits are triggered ONLY by **named structural changes to the
   thesis** — pre-registered invalidators firing, not price behavior.
2. Price-target hits, position-size growth, parabolic patterns, mean-reversion
   expected-value math, and "valuation looks stretched" are **NOT exit
   triggers**. A position growing large via thesis playout is the desired
   outcome of pyramiding, not a violation.
3. Initial-entry size caps apply to **entries**, not to positions that grew.
4. **DO NOT GENERATE** "trim at $X" / "scale to N% by $Y" / stop-ladder exit
   schedules. If you find yourself writing a price-based exit rule, stop and
   re-frame it as a structural-sell trigger.
5. Mean-reversion analytics (reverse-DCF reads, negative-EV math) MAY be
   included as context, flagged **informational — not a decision rule**.

The one bounded exception is the 3-key Valuation Backstop defined in the deep
template — a partial risk-management de-risk requiring extreme valuation AND a
mania cluster AND an oversized position simultaneously. Absent any one key,
valuation does nothing.

## Structural-Sell Decision Rule (memorize)

Signals are staged: **S1** peak narrative (informational), **S2** supply/cost
breakdown, **S3** demand/customer breakdown, **S4** technical (timing only).

| Situation | Action |
|---|---|
| Stage 1 only | INFORMATIONAL — do nothing |
| Stage 2 single signal | WATCH — refresh analysis in 30d |
| Stage 3 single signal | WATCH — refresh analysis in 30d |
| Stage 2 × 2 concurrent | TRIM 25–50% |
| Stage 3 × 2 concurrent | TRIM 25–50% |
| Stage 2 + Stage 3 concurrent | MANDATORY — trim 50% |
| Any 3 concurrent S2/S3 signals | Consider full exit |
| Stage 4 alone | DO NOTHING — price is not thesis |

S2 and S3 are weighted symmetrically: a single signal of either type is a
watch tier; concurrence escalates. **Valuation amplifier:** while the name's
valuation tier (MGDV block, deep template §3) is 🟡 Rich or 🔴 Extreme,
amplify any structural action one notch — single S2/S3 → TRIM 25–50%;
S2+S3 concurrent → full exit. Valuation never fires alone; it only amplifies
a real structural signal. **Exception — binary per-name triggers:**
the named `L1-<TICKER>-N` triggers you write in the deep template are
*pre-escalated encodings* of this matrix (persistence and concurrence are
built into their definitions, e.g. "ASP falls >15% QoQ for 2 consecutive
quarters"). A CONFIRMED binary trigger fires the action stated in its own
definition without being re-scored against the single-signal=WATCH row. The
matrix governs *raw* signals not yet codified into a name's trigger set.

## Workflow

### Step 0 — Orientation
1. Identify ticker, exchange, and the investment theme it belongs to.
2. Ask the user for (or confirm) the **output directory**; default `./analysis/`.
3. If `<output>/<TICKER>.md` already exists, this is an **update** — read it first.
4. Confirm the **IRR hurdle** for reverse-DCF: default **15%**; use a higher
   hurdle (e.g. 20%) for emerging-market listings where currency drag and
   country risk premium justify it. State the hurdle used in the output.

### Step 1 — Data collection (before any writing)
Pull quotes, profile, 5y annual + 8q quarterly statements, key TTM metrics,
analyst targets, insider trades, and RSI/SMA50/SMA200 — the full list with
provider endpoints is in [references/frameworks.md](references/frameworks.md#data-collection).

**Dependency:** this skill needs a market-data source (FMP MCP tools, Alpha
Vantage, or equivalent). If none is connected, STOP and tell the user which
data is needed. With user consent you may proceed from user-supplied figures
or filings — label every such number `(user-supplied, unverified)`. **Never
invent figures.**

### Step 2 — Write `TICKER.md`
Follow [references/qualitative-template.md](references/qualitative-template.md) exactly.

### Step 3 — Write `TICKER_deep.md`
Follow [references/deep-template.md](references/deep-template.md) exactly.

### Step 4 — Quality gates
Formatting gates:
- [ ] Both files at correct paths; every template section present
- [ ] DCF shows bear/base/bull with arithmetic, not just outputs
- [ ] Piotroski: all 9 signals individually documented
- [ ] Schilit: DSO, accrual ratio, OCF/NI explicitly computed
- [ ] Porter: all 5 forces individually scored
- [ ] Entry zone PRICE RANGES identical between the two files (labels differ
      by design: §6 "Aggressive Entry" = near-current; verdict "Deep-Value
      Accumulation" = deepest)

Safety gates (these are the ones that matter):
- [ ] Thesis Roadmap: structural catalyst named in ONE sentence, or explicitly
      marked "DIFFUSE" with conviction capped at MEDIUM — never left vague
- [ ] Thesis Roadmap: 2–4 sector triggers present, and NONE of them worded as
      an exit rule — disconfirming triggers feed WATCH/refresh only
- [ ] ≥4 named structural-sell triggers, each stage-tagged S2 or S3
- [ ] At least 1 trigger is S3 demand-side (not only supply-side)
- [ ] MGDV block populated and valuation tier assigned
- [ ] **Zero price-based exit rules anywhere in either file** — grep your own
      output for "trim at $", "stop at $", "scale out" before declaring done
- [ ] Disclaimer note present at the top of BOTH output files

## Red Flags — STOP and re-frame

If you catch yourself writing any of these, you are violating the discipline:

- "Trim at $X" / "take profits above $Y" / "stop-loss at $Z" as a *rule*
- "Position is now N% of the book, consider trimming" — size ≠ signal
- "Stock hit the bull-case DCF, de-risk" — a DCF target is not an exit
- "Parabolic move, mean-reversion is likely" — that's S4-only, do nothing
- "Priced for perfection per reverse-DCF" — informational context only

| Rationalization | Reality |
|---|---|
| "A price ladder is just risk management" | It is a valuation exit with extra steps. Use named structural triggers. |
| "This one signal is really strong" | Single S2/S3 = WATCH. Concurrence escalates, conviction doesn't. |
| "The user will want profit targets" | The user chose a structural-sell skill. Offer targets only if explicitly asked, labelled informational. |
| "Valuation is extreme, surely that's enough" | Alone, it isn't. Backstop needs all 3 keys simultaneously. |

## Common Mistakes

- **Writing files before data collection finishes** — partial data produces
  anchored, wrong numbers. Collect everything first.
- **Applying the original Altman Z to non-manufacturers** — use the Z″ variant
  per frameworks.md; the original mis-scores asset-light and financial names.
- **Stale ERP** — look up the current Damodaran US equity risk premium at
  analysis time; do not reuse a remembered constant.
- **Skipping the reverse-DCF when price > bull case** — that is precisely when
  it is mandatory.
- **Copying analyst price targets into the MGDV** — MGDV is fundamentals-only
  by construction; targets chase price in manias and would disarm the backstop.

