Trading Dev AcademyFree quant education

Free lesson · Markets & returns

Discounted cash flow and the price of capital

Open interactive lessonPractice calculationsExplore labs

Start with the idea

Discounting asks how much cash today would grow into a future payment at the required rate. A terminal value is a compact representation of a long sequence of payments; it is often the most assumption-sensitive part of a valuation.

Symbols, units & horizon
  • PV or V₀: value today in currency
  • CFₜ: cash flow at period t
  • k: required decimal return per period
  • g: perpetual decimal growth per period
  • T: explicit forecast horizon
  • TV_T: terminal value measured at time T
  • A: first discounted perpetuity payment
  • q: geometric-series ratio, below 1
  • EV: operating enterprise value
  • E: equity value
  • FCFF: cash flow to all capital providers
  • WACC: weighted average cost of capital

When and why to use this

Use discounted cash flow for fundamental forecasts, merger consideration and long-horizon price scenarios. Use the enterprise-to-equity bridge to avoid comparing the value of an entire business with only its equity claim.

Valuation relates a price today to uncertain future cash flows. Separate the cash-flow forecast from the discount rate: changing both to express the same risk can double count it. A model is useful when its assumptions and sensitivities are visible.

PV=∑t=1TCFt(1+k)t,TVT=CFT+1k−g,k>g
Algebra: geometric series

Reverse compounding; sum a growing perpetuity

  1. From CFt=PVt(1+k)t, divide by (1+k)t. Add the discounted payments because values in today’s currency are additive.
  2. At T, let A=CFT+1(1+k) and q=(1+g)(1+k). Then TV=A(1+q+q2+⋯). Subtract qTV from TV to obtain TV(1−q)=A.
  3. Substitute q and simplify: TV=CFT+1(k−g). The geometric series converges only when q<1, or k>g. Discount TV from T to today separately.
Work it by hand

Next year’s perpetuity payment $10, k=8%, g=2% gives 10/(.08−.02)=$166.67 at the valuation date.

Cash flow CFt, annual discount rate k, and growth g must use consistent nominal or real conventions. The terminal-value formula assumes perpetual constant growth. Its sensitivity becomes extreme when k approaches g.

EVfirm=PV(FCFF),E=EVfirm−debt+excess cash
Algebra and arithmetic

Bridge enterprise value to the equity claim

  1. With excess cash separated from operating assets, EV=E+debt−excess cash.
  2. Subtract debt from both sides and add excess cash: E=EV−debt+excess cash. EV is obtained by discounting FCFF at the appropriate capital-provider rate.
Work it by hand

Operating value $150m, debt $40m, excess cash $10m implies equity $120m; with 6m shares that is $20 per share.

Free cash flow to the firm belongs to debt and equity providers and is discounted at a weighted cost of capital. Cash flow to equity is discounted at the cost of equity. Here EV means enterprise value; in the probability lessons EV means expected value. Always read the units and context.

Python implementation

Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.

def dcf(cashflows, discount_rate, terminal_growth):
    """End-of-year cash flows; last grows once to form next year's payment."""
    if discount_rate <= terminal_growth or discount_rate <= -1:
        raise ValueError("Need k > g and k > -1")
    horizon = len(cashflows)
    terminal = cashflows[-1]*(1+terminal_growth)/(discount_rate-terminal_growth)
    pv = sum(cf/(1+discount_rate)**t for t, cf in enumerate(cashflows, 1))
    return pv + terminal/(1+discount_rate)**horizon

def equity_value(enterprise_value, debt, excess_cash):
    return enterprise_value - debt + excess_cash

print(equity_value(150e6, 40e6, 10e6))

Continue learning

Markets, Returns & Capital — all lessons
  1. Measure the return before modelling it
  2. Cash securities, derivatives, and financing
  3. Discounted cash flow and the price of capital
  4. Translate an investment idea into a mandate

Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations