finance-sentiment
Fetch normalized stock sentiment across Reddit, X.com, financial news, and Polymarket from the Adanos Finance API: buzz score,…
Estimate a public company's intrinsic value with DCF, relative (peer multiple), and sum-of-the-parts (SOTP) methods, then blend them into an implied share price with upside/downside vs the market price, a WACC and terminal-growth sensitivity grid, and bull/base/bear scenarios.
Claude Code
$ npx -y skills add himself65/finance-skills --skill company-valuation --agent claude-code
Codex
$ npx skills add himself65/finance-skills --skill company-valuation -a codex -y
Cursor
$ npx skills add himself65/finance-skills --skill company-valuation -a cursor -y
Gemini CLI
$ npx skills add himself65/finance-skills --skill company-valuation -a gemini-cli -y
GitHub Copilot
$ npx skills add himself65/finance-skills --skill company-valuation -a github-copilot -y
OpenCode
$ npx skills add himself65/finance-skills --skill company-valuation -a opencode -y
Windsurf
$ npx skills add himself65/finance-skills --skill company-valuation -a windsurf -y
name: company-valuation description: > Estimate a public company's intrinsic value with DCF, relative (peer multiple), and sum-of-the-parts (SOTP) methods, then blend them into an implied share price with upside/downside vs the market price, a WACC and terminal-growth sensitivity grid, and bull/base/bear scenarios. Use this skill whenever the user asks what a company or ticker is worth: fair value, intrinsic value, implied share price, a price target from fundamentals, whether it is overvalued or undervalued, building a DCF (WACC, terminal value, discounted cash flow), EV/EBITDA or P/E based targets, peer comparison valuation, or SOTP and conglomerate discounts. Run the model rather than answering valuation questions from memory.
If your host has not already executed the shell probes below (for example, in Codex), run the commands inside the `!` wrappers with its shell tool before choosing a setup path. Use the actual output; if shell access is unavailable, report that limitation.
Triangulates intrinsic value via three methods, then blends them to an implied share price:
1. **DCF** — 5-year FCFF projection, discount at WACC, terminal value. 2. **Relative** — apply peer median P/E, EV/Revenue, EV/EBITDA. 3. **SOTP** — when 2+ distinct reporting segments exist, value each at pure-play peer multiples.
Always present a WACC × terminal-growth sensitivity table and Bull/Base/Bear scenarios.
**Disclaimer**: Research/educational output. Not financial advice.
---
Detect data source and runtime deps. The skill supports 2 method paths — pick the richest one available.
**Environment status:**
!`python3 -c "exec('try:\n import yfinance, numpy, pandas\n print(\'YFIN_OK\')\nexcept Exception:\n print(\'YFIN_MISSING\')')"`!`python3 -c "exec('try:\n import yfinance as yf\n t=yf.Ticker(\'^TNX\')\n p=t.fast_info.last_price\n print(f\'RF_10Y={p/100:.4f}\')\nexcept Exception:\n print(\'RF_FETCH_FAIL\')')"`**Decision tree:**
| Condition | Method path | |---|---| | `YFIN_OK` | **Path A** (primary): yfinance for financials + peer multiples | | `YFIN_MISSING` | **Path B**: pip-install yfinance, then Path A. `python3 -m pip install -q yfinance numpy pandas` | | `RF_FETCH_FAIL` | Use default `rf = 0.045` and note stale risk-free rate in output |
If `RF_10Y=` printed, use that value as `rf` in Step 4d instead of the hardcoded 4.5%.
---
| Company type | DCF | Relative | SOTP | Fallback | |---|---|---|---|---| | Mature cash-flow (CPG, telecom, utilities) | ✅ primary | ✅ | ❌ | — | | High-growth SaaS / software | ✅ with care | ✅ primary | ❌ | Use EV/Revenue + Rule of 40 | | Multi-segment conglomerate | ✅ | ✅ | ✅ primary | See `references/sotp.md` | | Banks / insurance | ❌ | ✅ (P/B, P/TBV) | ❌ | DDM or excess return; note in output | | Pre-revenue | ❌ | EV/Revenue only | ❌ | Flag low confidence | | REITs | ❌ | ✅ (P/FFO, P/AFFO) | ❌ | NAV-based | | Cyclicals (energy, semis, industrials) | ✅ on mid-cycle | ✅ | sometimes | Normalize through-cycle |
Settle every parameter before pulling data — these defaults apply unless the user overrides them.
| Parameter | Default | Rationale | |---|---|---| | Projection horizon | 5 years | Standard explicit forecast window | | Terminal growth `g` | 2.5% | ~ long-run US GDP | | Risk-free rate `rf` | Live 10Y UST from Step 1, else 4.5% | Current cost of capital anchor | | Equity risk premium `erp` | 5.5% | Damodaran mid-range | | Beta | `info['beta']` from yfinance | Market-observed levered beta | | Cost of debt `kd` | `interest_expense / total_debt`, else 5.5% | Effective rate; fallback to IG spread | | Tax rate | 3-yr median effective rate, floored 15%, capped 30% | Strips out one-offs | | Margin assumptions | 3-yr median of each ratio | Smooths cyclical noise | | SBC treatment | Cash for software/SaaS; non-cash for industrials/CPG | Industry convention | | Peer count | 4-6 | Balances signal vs noise | | Peer multiple | Median (not mean) | Robust to outliers | | Method weights (no SOTP) | DCF 50% / Relative 50% | Equal triangulation | | Method weights (with SOTP) | DCF 40% / Relative 30% / SOTP 30% | SOTP gets weight when applicable | | Sensitivity grid | WACC ±1% in 0.5% steps × g from 1.5-3.5% in 0.5% | 5×5 matrix |
See `references/wacc_erp_rates.md` for current risk-free rates, ERP tables, and sector WACC benchmarks.
---
import yfinance as yf
import numpy as np
import pandas as pd
TICKER = "AAPL" # replace
t = yf.Ticker(TICKER)
info = t.info
income_a = t.income_stmt
cashflow_a = t.cashflow
balance_a = t.balance_sheet
income_q = t.quarterly_income_stmt
cashflow_q = t.quarterly_cashflow
earnings_est = t.earnings_estimate
revenue_est = t.revenue_estimate
price = info.get("currentPrice") or info.get("regularMarketPrice")
market_cap = info.get("marketCap")
shares_out = info.get("sharesOutstanding")
total_debt = info.get("totalDebt") or 0
cash = info.get("totalCash") or 0
beta = info.get("beta") or 1.0
sector = info.get("sector")
industry = info.get("industry")Key financial statement rows (yfinance labels):
| Need | Row | |---|---| | Revenue | `Total Revenue` | | EBIT | `Operating Income` | | Net income | `Net Income` | | D&A | `Depreciation And Amortization` (in cashflow) | | CapEx | `Capital Expenditure` (negative) | | ΔNWC | `Change In Working Capital` (cashflow) | | SBC | `Stock Based Compensation` (cashflow) |
---
Full methodology + industry-specific tweaks in `references/dcf.md`. Quick skeleton:
# 4a. Revenue growth path — fade from Y1 (consensus or hist CAGR) to terminal g rev = income_a.loc["Total Revenue"].dropna().iloc[::-1].values # yfinance columns are newest-first; reverse to oldest -> newest hist_cagr = (rev[-1] / rev[0]) ** (1 / (len(rev)-1)) - 1 y1 = float(r
A collection of agent skills for financial analysis and trading, following the Agent Skills open standard. Visit skills.himself65.com for documentation, demos, and setup instructions.
Fetch normalized stock sentiment across Reddit, X.com, financial news, and Polymarket from the Adanos Finance API: buzz score,…
Query Fintel (fintel.io) institutional market data through its REST API or official MCP server. Use this skill whenever the user…
Check the live status of the Strait of Hormuz from the Hormuz Strait Monitor dashboard: open, restricted, or closed status,…
Read Hyperliquid (app.hyperliquid.xyz) perp and spot market data through opencli and Hyperliquid's public info API: mark, oracle,…
Query TradingView market data through the bundled tradingview MCP server without a desktop app or login. Use whenever the user…
Read the user's local TradingView desktop app through opencli: quotes, options chains with greeks and per-strike IV, options…
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…