From cc4238cc6830d24b05a09d9b538961965eecba94 Mon Sep 17 00:00:00 2001 From: Tyler Date: Sun, 29 Mar 2026 11:53:02 -0700 Subject: Update README with valuation enhancements Document FCF growth override slider, EV/EBITDA valuation method, analyst targets, and earnings history tabs. Regenerate HTML readme. Co-Authored-By: Claude Sonnet 4.6 --- README.html | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 7 ++- 2 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 README.html diff --git a/README.html b/README.html new file mode 100644 index 0000000..4bafdb1 --- /dev/null +++ b/README.html @@ -0,0 +1,147 @@ + + + + + + + +

🔷 Prism

+

A local financial analysis dashboard. Enter any stock ticker to get a formatted view of financial statements, valuation metrics, a DCF model, and a news feed — all in your browser.

+
+

Features

+ +
+

Setup

+

1. Clone / navigate to the project

+
cd ~/Work/prism
+
+

2. Activate the virtual environment

+
source .venv/bin/activate
+
+

3. Add API keys

+
cp .env.example .env
+
+

Open .env and fill in your keys:

+
FMP_API_KEY=your_key_here
+FINNHUB_API_KEY=your_key_here
+
+

Both are free: +- FMP (Financial Modeling Prep) — financialmodelingprep.com — 250 requests/day +- Finnhub — finnhub.io — 60 requests/minute

+
+

No keys? The app still works. Price data, financials, and market indices are sourced from yfinance (no key required). Ratios, comps, and news won't load until keys are added.

+
+

4. Run the app

+
streamlit run app.py
+
+

Opens at http://localhost:8501

+
+

Daily Usage

+
cd ~/Work/prism
+source .venv/bin/activate
+streamlit run app.py
+
+
+

Project Structure

+
prism/
+├── app.py                    # Entry point
+├── requirements.txt
+├── .env                      # Your API keys (not committed)
+├── .env.example              # Key template
+├── .streamlit/
+│   └── config.toml           # Dark theme + layout settings
+├── services/
+│   ├── data_service.py       # yfinance — price, financials, indices
+│   ├── fmp_service.py        # FMP API — ratios, peers
+│   ├── news_service.py       # Finnhub — news + sentiment
+│   └── valuation_service.py  # DCF engine (Gordon Growth Model)
+├── components/
+│   ├── market_bar.py         # Index metrics row
+│   ├── overview.py           # Company header + price chart
+│   ├── financials.py         # Statement tables
+│   ├── valuation.py          # Ratios, DCF, comps
+│   └── news.py               # News feed
+└── utils/
+    └── formatters.py         # Number formatting helpers
+
+
+

DCF Model Notes

+

The DCF model uses historical Free Cash Flow from yfinance, computes a capped median growth rate from valid positive-FCF periods, and then projects forward using your chosen assumptions:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputDefaultRange
WACC10%5–20%
Terminal Growth Rate2.5%0.5–5%
Projection Years53–10
FCF Growth RateHistorical median-20–30%
+

The model uses the Gordon Growth Model for terminal value. It first estimates enterprise value, then bridges to equity value using debt and cash before calculating value per share. Terminal growth must remain below WACC. The FCF growth slider defaults to the historical median but can be freely overridden.

+

The EV/EBITDA tab derives an implied price by applying a target multiple to trailing EBITDA, subtracting net debt, and dividing by shares outstanding. The slider defaults to the company's current market multiple.

+
+

API Rate Limits

+ + + + + + + + + + + + + + + + + + + + + + + + + +
SourceLimitUsed For
yfinanceNonePrice, financials, indices
FMP (free)250 req/dayRatios, comps, news
Finnhub (free)60 req/minNews, sentiment
+

Data is cached in-memory per session to minimize API calls (financials: 1h, news: 10min, indices: 5min).

+ + \ No newline at end of file diff --git a/README.md b/README.md index b82ee48..f50a4a8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ A local financial analysis dashboard. Enter any stock ticker to get a formatted - **Market Bar** — Live S&P 500, NASDAQ, DOW, and VIX at the top of every page - **Overview** — Price chart (1M / 3M / 6M / 1Y / 5Y), key stats (market cap, P/E, 52W range, beta) - **Financials** — Annual and quarterly Income Statement, Balance Sheet, and Cash Flow Statement with year-over-year % change columns -- **Valuation** — Key ratios grid (P/E, EV/EBITDA, margins, ROE, etc.), interactive DCF model with adjustable WACC and growth rate, comparable companies table +- **Valuation** — Key ratios grid (P/E, EV/EBITDA, margins, ROE, etc.), DCF model with adjustable WACC/growth/years, EV/EBITDA implied price, comparable companies table, analyst price targets, and earnings history (EPS actual vs. estimate) - **News** — Recent articles with heuristic Bullish / Bearish / Neutral tags and a 7-day sentiment summary --- @@ -103,8 +103,11 @@ The DCF model uses historical **Free Cash Flow** from yfinance, computes a cappe | WACC | 10% | 5–20% | | Terminal Growth Rate | 2.5% | 0.5–5% | | Projection Years | 5 | 3–10 | +| FCF Growth Rate | Historical median | -20–30% | -The model uses the **Gordon Growth Model** for terminal value. It first estimates **enterprise value**, then bridges to **equity value** using debt and cash before calculating value per share. Terminal growth must remain below WACC. +The model uses the **Gordon Growth Model** for terminal value. It first estimates **enterprise value**, then bridges to **equity value** using debt and cash before calculating value per share. Terminal growth must remain below WACC. The FCF growth slider defaults to the historical median but can be freely overridden. + +The **EV/EBITDA** tab derives an implied price by applying a target multiple to trailing EBITDA, subtracting net debt, and dividing by shares outstanding. The slider defaults to the company's current market multiple. --- -- cgit v1.3-2-g0d8e