Equity Valuation Engine

A Python engine I built to evaluate companies more deliberately as I expand my portfolio, with model fit, assumptions, and uncertainty kept beside every estimate.

Interface
CLI · JSON
Data
yfinance
Methods
DCF · Multiples · NAV
Analysis
Bear · Base · Bull
A financial market chart with candlesticks and trend lines on a dark display

A more disciplined way to invest

I had invested conservatively for years and earned good returns, but I wanted to expand my portfolio without relying on a promising ticker or a single familiar ratio. I needed a repeatable way to ask whether a company looked fairly valued or undervalued.

The engine grew from that need. It turns one ticker into several valuation arguments, records weak or missing data, and checks whether each model belongs in the analysis before it runs. It cannot remove the risk of investing, but making larger decisions without that discipline would leave me with even less to challenge.

From ticker symbol to valuation report

The pipeline separates data loading, domain modeling, model policy, calculation, and presentation. Each layer passes a structured result to the next one instead of quietly repeating earlier work.

yes

no

👤 Ticker input

🌐 yfinance repository

📦 StockMetrics aggregate

📝 Missing-data diagnostics

✓ Model suitable?

📈 Bear, Base, and Bull models

⚠️ Skipped with reasons

⚖️ Consolidated valuation summary

📤 CLI tables or JSON

Start with the result, then inspect the evidence

Different models answer different questions

Cash flow, earnings, revenue, dividends, returns, and net assets describe different parts of a business. The engine runs each method through the same manager contract without pretending their answers should agree.

Cash flow

DCF and Reverse DCF

Forward DCF estimates intrinsic value from projected cash flows; Reverse DCF asks what growth the current market price already assumes.

Market comparison

P/E, EV/EBITDA, and P/S

Comparable-value models use earnings, operating performance, revenue, and configured multiples without pretending one method fits every business.

Business structure

ROE, DDM, and NAV

Return, dividend, and asset-based models help when cash-flow or market-multiple approaches do not fit the business well.

Assumptions remain part of the output

Growth does not enter a formula as one unexplained percentage. The engine selects a signal, records its source, constrains unstable values, and builds Bear, Base, and Bull paths for models that need projections.

Optional weighted blending and sector mean reversion remain explicit. When evidence is too thin for the richer path, the system falls back and records why.

Scenario engine

See how signals become projections

See how selection, clamping, scenario adjustments, and mean reversion become a growth path you can inspect.

Read the decision path →

One run, five visible stages

  1. Normalize
  2. Diagnose
  3. Qualify
  4. Value
  5. Explain

Human-readable at the terminal

CLI tables make checks, scenarios, and comparisons useful during exploration without hiding skipped methods or analytical warnings.

Structured for the next interface

Compact JSON carries metrics, checks, reports, skips, and the summary as an integration surface rather than scraping values back out of terminal text.

The foundation of a larger pipeline

The engine's structured JSON is not only a CLI output — it is the anchor for two other projects. Equilyze wraps the engine and layers AI agents on top to write investment analysis, and Pressroom then turns that analysis into a finished, published article.

Read more: how three projects merge into one pipeline →

The outcome

A valuation run that can be questioned, traced, and compared instead of merely quoted.

The estimates are analytical tools, not investment advice. Use them to inspect assumptions, compare models, and find weaknesses in the input data.

Technical deep dives

Follow the project beyond the landing page. Each publication focuses on one architectural boundary, implementation decision, or operational lesson.

Vault publications

  • Your first valuation run
    11 min read · #python #valuation #tutorial

    Install the equity valuation engine, run one ticker, and learn to read suitability checks, scenarios, skipped models, and JSON.

  • How to choose a valuation model
    11 min read · #valuation #finance #models

    Match DCF, multiples, dividends, assets, and reverse DCF to the financial shape of a business before trusting any estimate.

  • From market data to usable metrics
    10 min read · #python #valuation #data-quality

    Follow provider data into StockMetrics, learn what missing-value diagnostics preserve, and see which gaps can still mislead a model.

  • Assumptions, scenarios, and honest uncertainty
    10 min read · #valuation #finance #scenarios

    Learn how historical signals, configured limits, and scenario policy become Bear, Base, and Bull paths without pretending to predict.

  • DCF and reverse DCF, step by step
    11 min read · #valuation #dcf #finance

    Build a discounted cash-flow valuation, inspect its sensitivity, and reverse the calculation to understand market-implied expectations.

  • Six other ways to value a company
    11 min read · #valuation #multiples #finance

    Compare P/E, EV/EBITDA, P/S, ROE, DDM, and NAV through independent examples, and learn why every model needs its own guardrails.

  • How to read a valuation result
    11 min read · #valuation #json #analysis

    Interpret scenario rows, skipped models, the equal-weight composite, model dispersion, and JSON without turning output into a target price.

  • Extending the engine without breaking its contract
    10 min read · #python #architecture #valuation

    Trace the architecture behind data fields, diagnostics, suitability, valuation managers, CLI output, JSON, and tests before adding features.