merton.scenarios.shocks¶
Atomic firm-level shocks.
These are deterministic multiplicative or additive perturbations to single
Firm fields. They are the lego pieces used to
build composite stress scenarios (CCAR severely-adverse, EBA 2023, etc.)
in merton.scenarios.predefined.
Each shock returns a ScenarioResult so the
chain of transformations is fully introspectable for audit / reporting.
Classes¶
Multiplicative shock to equity value. |
|
Multiplicative shock to equity volatility ( |
|
Additive shock to the risk-free rate ( |
|
Multiplicative shock to total debt. |
Module Contents¶
- class merton.scenarios.shocks.equity_shock[source]¶
Bases:
merton.scenarios.base.ScenarioMultiplicative shock to equity value.
factor < 1reflects an equity drawdown;factor > 1a rally.Examples
>>> from merton import Firm >>> from merton.scenarios import equity_shock >>> firm = Firm(equity=100, debt_short=10, debt_long=20, equity_vol=0.25) >>> stressed = equity_shock(factor=0.7).apply(firm).firm >>> stressed.equity 70.0
- apply(firm: merton.core.firm.Firm, **kwargs: Any) merton.scenarios.base.ScenarioResult[source]¶
Return a stressed copy of
firmwith scenario metadata attached.
- class merton.scenarios.shocks.vol_shock[source]¶
Bases:
merton.scenarios.base.ScenarioMultiplicative shock to equity volatility (
σ_E).- apply(firm: merton.core.firm.Firm, **kwargs: Any) merton.scenarios.base.ScenarioResult[source]¶
Return a stressed copy of
firmwith scenario metadata attached.
- class merton.scenarios.shocks.rate_shock[source]¶
Bases:
merton.scenarios.base.ScenarioAdditive shock to the risk-free rate (
r).A 200-bps tightening is
rate_shock(delta=0.02); an easing israte_shock(delta=-0.01).- apply(firm: merton.core.firm.Firm, **kwargs: Any) merton.scenarios.base.ScenarioResult[source]¶
Return a stressed copy of
firmwith scenario metadata attached.
- class merton.scenarios.shocks.debt_shock[source]¶
Bases:
merton.scenarios.base.ScenarioMultiplicative shock to total debt.
Applies
factorindependently to short- and long-term debt by default. Passshort_factor/long_factorto differentiate.- apply(firm: merton.core.firm.Firm, **kwargs: Any) merton.scenarios.base.ScenarioResult[source]¶
Return a stressed copy of
firmwith scenario metadata attached.