Skip to content

Monte Carlo DCF + EV bridge — scenario engine with sector-specific assumption packs #23

@DogInfantry

Description

@DogInfantry

Summary

Replace the current point-estimate DCF with a Monte Carlo simulation that produces a distribution of fair value outcomes. Add an EV-to-equity bridge and sector-specific assumption packs (e.g. SaaS, industrials, financials).

Motivation

The current DCF outputs a single number. Real sell-side valuation communicates a range, a base/bull/bear scenario, and the assumptions that drive each. A distribution of outcomes with labeled assumptions is what separates a research engine from a spreadsheet.

Proposed Architecture

trg_workbench/valuation/
├── dcf_monte_carlo.py       # Monte Carlo simulation on WACC, growth, margins
├── ev_bridge.py             # EV → equity bridge (net debt, minorities, options)
├── scenario_packs/
│   ├── saas.yaml             # SaaS: ARR growth, NRR, Rule of 40
│   ├── industrials.yaml      # Industrials: EBITDA margins, capex intensity
│   ├── financials.yaml       # Banks: ROE, NIM, CET1
│   └── default.yaml          # Generic: FCF growth, WACC, terminal multiple
└── sensitivity.py           # Tornado chart data: which assumption drives value most

Simulation Design

# Inputs as distributions, not point estimates
wacc = Normal(mean=0.092, std=0.010)          # +/- 100bps
revenue_growth = Triangular(low=0.05, mid=0.12, high=0.20)
terminal_growth = Uniform(low=0.020, high=0.030)

# Run 10,000 simulations -> distribution of intrinsic value

Outputs

  • P10 / P50 / P90 intrinsic value per share
  • Probability that stock is undervalued at current price
  • Tornado chart: top 5 value drivers by sensitivity
  • Bull / base / bear scenario summary table

Acceptance Criteria

  • dcf_monte_carlo.py runs 10,000 simulations using numpy/scipy distributions
  • ev_bridge.py converts enterprise value to equity value correctly
  • At least 2 sector packs in scenario_packs/ with documented assumptions
  • P10/P50/P90 output surfaced in HTML note valuation section
  • Tornado chart generated (Plotly preferred, PNG fallback)
  • Existing point-estimate DCF preserved as --simple-dcf flag fallback
  • Unit tests with deterministic seed for reproducible simulation output

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions