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})\]Also known as: two-stage DDM, two-stage dividend discount model.
No programming experience? With the Finance Toolkit MCP server, AI assistants such as Claude and ChatGPT can calculate the Two-Stage Dividend Discount Model for you. Just ask in plain English.
Calculate the Two-Stage Dividend Discount Model in Python
The Two-Stage Dividend Discount Model is available in the Models module of the open-source Finance Toolkit. Install it with:
pip install financetoolkit -U
Then call get_two_stage_dividend_discount_model as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(["AAPL", "MSFT"], api_key="FINANCIAL_MODELING_PREP_KEY")
toolkit.models.get_two_stage_dividend_discount_model(0.10, 0.12, 0.03).loc["AAPL"]
Which returns:
| High-Growth Periods = 5 | |
|---|---|
| Final High-Growth Dividend | 1.6037 |
| High-Growth Phase Present Value | 4.8043 |
| Terminal Value | 23.5978 |
| Terminal Value Present Value | 14.6523 |
| Intrinsic Value | 19.4566 |
Parameters
get_two_stage_dividend_discount_model accepts the following parameters:
- 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.
- 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.
- 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.
- high_growth_periods (int, optional): The number of periods in the explicit high-growth phase. Defaults to 5.
- rounding (int, optional): The number of decimals to round the results to. Defaults to 4.
Related Models
The Models module page introduces the module, and the sidebar lists all of its functions.