merton.extensions.leland_toft¶
Leland-Toft (1996) endogenous-default model.
Leland & Toft extend Merton with coupon-paying perpetual debt, taxes,
bankruptcy costs, and — crucially — an endogenous default boundary:
equity holders choose V_B, the asset-value level at which they walk
away, to maximise their own equity claim.
Setup¶
Assets V_t follow geometric Brownian motion under the risk-neutral
measure with a continuous payout rate δ (dividends + coupon-from-assets):
Debt pays a continuous coupon C per unit time and is perpetual. The
tax shield on coupons is \tau C (corporate tax rate). Default triggers
a bankruptcy cost \alpha so debt holders recover (1 - \alpha) V_B.
Closed forms¶
Define
Then (V / V_B)^{x} is the risk-neutral probability of eventually
defaulting (i.e. of first passage from V down to V_B).
Equity value:
(Equity gives up the full V_B at default — the bankruptcy cost
\alpha V_B is destroyed, not transferred to equity, so it does not
appear here. It reduces the debt value instead.)
Equity-holders’ first-order condition (the smooth-pasting condition) yields the optimal default boundary
This module exposes optimal_default_boundary, leland_toft_pd,
leland_toft_equity_value, leland_toft_debt_value, and
LelandToftModel.
References
Leland, H. E. (1994). Corporate Debt Value, Bond Covenants, and Optimal Capital Structure. Journal of Finance 49 (4), 1213-1252.
Leland, H. E., Toft, K. B. (1996). Optimal Capital Structure, Endogenous Bankruptcy, and the Term Structure of Credit Spreads. Journal of Finance 51 (3), 987-1019.
Classes¶
Calibrate Leland-Toft on a single firm with coupon-paying debt. |
Functions¶
|
Smooth-pasting optimal default boundary |
|
Risk-neutral probability of eventually defaulting under Leland-Toft. |
|
Equity value |
|
Debt value: present value of coupon stream + recovery at default. |
Module Contents¶
- merton.extensions.leland_toft.optimal_default_boundary(*, coupon: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, sigma_asset: merton._typing.ArrayLike, tax_rate: merton._typing.ArrayLike = 0.0, dividend_yield: merton._typing.ArrayLike = 0.0) merton._typing.FloatArray[source]¶
Smooth-pasting optimal default boundary
V_B^*.
- merton.extensions.leland_toft.leland_toft_pd(*, asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, coupon: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, tax_rate: merton._typing.ArrayLike = 0.0, dividend_yield: merton._typing.ArrayLike = 0.0, default_boundary: merton._typing.ArrayLike | None = None) merton._typing.FloatArray[source]¶
Risk-neutral probability of eventually defaulting under Leland-Toft.
PD = (V_B / V)^xforV > V_Band 1 otherwise. Passdefault_boundaryto override the smooth-pasting optimum (useful for sensitivity analysis around a different barrier choice).
- merton.extensions.leland_toft.leland_toft_equity_value(*, asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, coupon: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, tax_rate: merton._typing.ArrayLike = 0.0, dividend_yield: merton._typing.ArrayLike = 0.0, bankruptcy_cost: merton._typing.ArrayLike = 0.0, default_boundary: merton._typing.ArrayLike | None = None) merton._typing.FloatArray[source]¶
Equity value
E(V)per Leland-Toft.
- merton.extensions.leland_toft.leland_toft_debt_value(*, asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, coupon: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, tax_rate: merton._typing.ArrayLike = 0.0, dividend_yield: merton._typing.ArrayLike = 0.0, bankruptcy_cost: merton._typing.ArrayLike = 0.0, default_boundary: merton._typing.ArrayLike | None = None) merton._typing.FloatArray[source]¶
Debt value: present value of coupon stream + recovery at default.
- class merton.extensions.leland_toft.LelandToftModel(*, coupon: float, tax_rate: float = 0.0, bankruptcy_cost: float = 0.0, tol: float = 1e-08, max_iter: int = 200)[source]¶
Bases:
merton.extensions.base.StructuralModelCalibrate Leland-Toft on a single firm with coupon-paying debt.
Inputs¶
- coupon
Continuous coupon payment (per year, in currency units). Required.
- tax_rate
Corporate tax rate (defaults to 0).
- bankruptcy_cost
Fraction of assets lost in bankruptcy (defaults to 0).
- fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]¶
Return a
StructuralResultforfirm.