Two-Stage Dividend Discount Model
The Two-Stage Dividend Discount Model extends the (single-stage) Gordon Growth Model to companies that are not expected to grow at a constant rate forever. It explicitly projects and discounts dividends over an initial high-growth phase, and then values everything from the end of that phase onward as a perpetuity growing at a lower, more sustainable stable rate (a Gordon Growth terminal value).
The formula is as follows:
\[\text{Dividend Projection}_{t} = \text{Dividends Per Share} \cdot (1 + \text{High Growth Rate}) ^{t}\] \[\text{High-Growth Phase Present Value} = \text{Sum of Dividend Projection}_{t} / (1 + \text{Rate of Return}) ^{t},\;\; \text{for} \;\; t = 1,\;\; \text{...},\;\; \text{High Growth Periods}\] \[\text{Terminal Value} = \text{Last Dividend Projection} \cdot (1 + \text{Stable Growth Rate}) / (\text{Rate of Return} - \text{Stable Growth Rate})\] \[\text{Intrinsic Value} = \text{High-Growth Phase Present Value} + (\text{Terminal Value} / (1 + \text{Rate of Return}) ^{\text{High}} \text{Growth Periods})\]With transition periods it becomes the Three-Stage Dividend Discount Model: between the high-growth and the stable phase, the growth rate declines in equal steps from the high to the stable rate, and those dividends are discounted explicitly as well. In transition period k (of n), dividends grow at High Growth Rate - (High Growth Rate - Stable Growth Rate) * k / (n + 1), and the Terminal Value is taken at the end of the transition phase.
Also known as: two-stage DDM, two-stage dividend discount model, three-stage DDM, three-stage dividend discount model.
Two-Stage Dividend Discount Model in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_two_stage_dividend_discount_model as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(
["JNJ", "PG", "PEP"],
api_key="FINANCIAL_MODELING_PREP_KEY",
start_date="2021-01-01",
end_date="2025-12-31",
)
toolkit.models.get_two_stage_dividend_discount_model().xs(
"Intrinsic Value", level=1
)
Or, after setting up the Finance Toolkit MCP, ask:
What are Johnson & Johnson, Procter & Gamble and PepsiCo worth per share in a two-stage dividend discount model based on their own dividend growth and cost of equity?
Which returns:
| High-Growth Periods = 5 | |
|---|---|
| JNJ | 295.957 |
| PEP | 294.465 |
| PG | 200.93 |
Parameters
get_two_stage_dividend_discount_model accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
rate_of_return | float, list or dict | The required rate of return (discount rate) used to discount both phases. Can be one number to use for all tickers, or a list or dict that contains a rate of return for each ticker. Defaults to None, which uses the latest Cost of Equity of each company: the CAPM with the equity risk premium of its country, as in get_weighted_average_cost_of_capital. | 0.08 |
high_growth_rate | float, list or dict | The constant growth rate applied to dividends during the explicit high-growth phase. Can be one number to use for all tickers, or a list or dict that contains a high growth rate for each ticker. Defaults to None, which uses the compound annual growth of the company’s Dividends per Share up to the latest period. | 0.1 |
stable_growth_rate | float, list or dict | The perpetual (terminal) growth rate applied to dividends from the end of the high-growth phase onward. Can be one number to use for all tickers, or a list or dict that contains a stable growth rate for each ticker. Defaults to None, which uses the company’s dividend growth kept within 0 and the long-run growth rate of 2.5% (2.5% where it has none). | 0.03 |
high_growth_periods | int | The number of years in the explicit high-growth phase. Defaults to 5. | 10 |
transition_periods | int | The number of years in which the growth rate declines linearly from the high to the stable growth rate (the Three-Stage Dividend Discount Model). Defaults to 0, no transition phase. | 0, no transition phase |
rounding | int | None | The number of decimals to round the results to. Defaults to None, which uses the rounding of the Toolkit (4 unless set otherwise). | 2 |